Zum Inhalt springen

Ein C-Programm und ich habe keine Ahnung...


Empfohlene Beiträge

Geschrieben

Hallo miteinander,

ihr habt sicher schon erkannt ich bin neu hier in der Runde und muss Euch leider gleich mit einem (für mich zumindest) dicken Problem "nerven" :(

Im Rahmen meiner Ausbildung hatte ich nun knapp ein halbes Jahr das Fach Informatik (mehr kommt jetzt auch nicht mehr) und demnächst steht die Klausur ins Haus. Dazu haben wir auch ein paar Beispielaufgaben erhalten, bei denen ich mich ja schon bei den klitzekleinsten Nachmittage mit beschäftigt habe. Nun gibt es allerdings ein paar Aufgaben, bei denen finde ich ja noch nicht einmal einen Anfang... Wie z.B. diese hier:

1280_3335626237323562.jpg

oder besser so: http://foto.arcor-online.net/palb/alben/64/1242764/1280_3335626237323562.jpg

Jedenfalls habe ich keinen Plan, wie ich das bewerkstelligen soll. Ich bekomme einfach nichts Gescheites hin, ehrlich gesagt bekomme ich dank der vielen Fehlermeldungen und Warnungen nicht mal ein lauffähiges Programm zu Stande :rolleyes:

Es wäre wirklich super, wenn ihr mir helfen könntet. Auch für hilfreiche Tipps und jegliche Hilfestellungen bin ich immer offen.

DANKE!

Geschrieben
ehrlich gesagt bekomme ich dank der vielen Fehlermeldungen und Warnungen nicht mal ein lauffähiges Programm zu Stande :rolleyes:
Lass doch erst mal den Code liegen, und formuliere einen Algorithmus, als PAP oder Struktogramm. Wenn das steht, kannst du anfangen, das in Code umzusetzen.

Beides gleichzeitig klappt nur bei einfachen Problemstellungen, oder wenn du die entsprechende Erfahrung hast.

Geschrieben
Lass doch erst mal den Code liegen, und formuliere einen Algorithmus, als PAP oder Struktogramm.

Sorry - wie gesagt bin ich kein Experte, sondern hatte nur ein halbes Jahr Informatik. Das Wort Code sagt mir ja im Hinblick auf den Quellcode noch etwas, aber die anderen beiden Wörter sagen mir grade rein gar nichts: PAP? und Struktogramm sagt mir in dem Zusammenhang leider auch nichts :(

Geschrieben
Lösen sie diese Aufgabe ohne While-Anweisungen zu benutzen

*hust*For*hust*

[...]ein halbes Jahr Informatik. [...] PAP? und Struktogramm sagt mir in dem Zusammenhang leider auch nichts :(

Programmablaufplan und Struktogramm hat man eigentlich am Anfang der Informatik bevors mit Programmieren losgeht.

Geschrieben
Das Wort Code sagt mir ja im Hinblick auf den Quellcode noch etwas, aber die anderen beiden Wörter sagen mir grade rein gar nichts: PAP? und Struktogramm sagt mir in dem Zusammenhang leider auch nichts :(

Was für eine Ausbildung machst du denn da?

Was ich meine: Du sollst zuerst den Algorithmus (also die Vorgehensweise zur Problemlösung) allgemein formulieren, unabhängig von einer konkreten Programmiersprache. Meinetwegen auch einfach als Fließtext in Deutsch.

Erst dann sollst du diesen Algorithmus in die Programmiersprache C umsetzen. Wenn du nämlich beides gleichzeitig versuchst, kommt dabei nur Murks raus.

Geschrieben (bearbeitet)
Programmablaufplan [...] hat man eigentlich am Anfang der Informatik bevors mit Programmieren losgeht.

:upps so sagt mir PAP nun auch was :D

...ich werde mal versuchen sowas aufzustellen und im Anschluss hier zu posten.

Was für eine Ausbildung machst du denn da?

Maschinenbau Studium - Entwicklung und Konstruktion sind mein Gebiet, die Informatik überlasse ich gerne den Profis. Ist absolut nicht mein Ding, daher tue ich mich gerade wahrscheinlich auch so unheimlich schwer damit.

Bearbeitet von absoluteranfänger
Geschrieben

Problemstellung:

Ich soll ein Computerprogramm in der Programmiersprache C erstellen, welches die Addition von Brüchen, welche eine gewisse Regelmäßigkeit im Nenner aufweisen, automatisiert durchführt. Die Brüche sind so lange zu addieren, bis die Faktoren im Nenner einen gewissen Maximalwert erreicht haben. Das Ergebnis dieser Berechnung ist dann auf dem Bildschirm auszugeben.

Es sollen geeignete Kontrollstrukturen verwendet werden und es dürfen keine while-Anweisungen verwendet werden, daher muss ich mich auf die Verwendung einer for-Schleife konzentrieren.

Ist das ein brauchbarer PAP?

Geschrieben
Ist das ein brauchbarer PAP?
Nein, das ist überhaupt kein PAP. Das ist eine Wiederholung der Aufgabenstellung.

Der Algorithmus formuliert die Lösung der Aufgabe.

Begriffe wie "gewisse Regelmäßigkeit", "gewisser Maximalwert" und "Bruch" haben darin nichts zu suchen, denn damit kann ein Computer nichts anfangen. Auch welcher Art die Kontrollstrukturen sein sollen, ist hier nicht direkt relevant. Alle Arten von Schleifen lassen sich ineinander überführen.

Geschrieben

Mal an einer Fahrenheits-Celsius-Berechnung demonstrieren...

PAP:

beisp-2.gif

Struktogramm:

beisp-1.gif

[Editerle]

Crash war wohl schneller. :beagolisc

[Editerle2]

So, das ganze jetzt für dein Problem.

Geschrieben
Ein PAP ist das nicht. Das ist nur die Problembeschreibung mit einer ersten Analyse.

Was ein PAP ist, erfährst du hier. DAs ist halt grob eine Darstellung deines Programmes, was wann passiert.

Gut, dann werde ich mich mal anhand dieser Bildchen orientieren und versuchen einen Ablauf zu erstellen ;)

Geschrieben
Struktogramm:

Das ist IMHO ein schlechtes Beispiel. Das ist nicht einmal ein Struktogramm. Was soll "Programm Fahrenheit" für eine Schleife sein? Oder "Beginn/Ende"? Und was ist "Ausgabebildschirm fixieren"? Kann es sein, dass das ziemlich alt ist?

Es würde mich jedenfalls nicht wundern, wenn da auch irgendwo "Lochstreifen auswerfen" auftauchen würde ;)

Es muss ja nicht mal ein PAP oder Struktogramm sein. Es reicht auch, das ganze einfach als Text zu formulieren, in etwa so:

Eine Variable S für die Summe anlegen, mit Startwert 0

Eine Variable n von 2 bis 198 laufen lassen

... usw.

Geschrieben
Kann es sein, dass das ziemlich alt ist?

Keine Ahnung, war in der Wiki verlinkt, aber die Seite scheint irgendwie ein Aktualisierungsdatum von 1999 zu haben.

Naja wie auch immer. Ich wollte nur in etwa zeigen was es ist.

Geschrieben

Wenn ich das hier nun lese, dann ist mein PAP wohl wieder kein richtiger :rolleyes:

Ich hatte nun den hier erstellt:

1280_3037323462346237.jpg

Daher nun einfach mal ein anderer Versuch:

Zunächst rufe ich das Programm auf,

dann binde ich die Biblitotheksfunktionen ein,

nun würde ich die Variablen (a, b, c, loesunga, loesungb, loesungc und ergebnis) in ihrem Typ deklarieren,

es folgt der Beginn des Hauptprogramms,

das Hauptprogramm führt eine Addition durch,

dieses Hauptprogramm läuft so lange, bis die Variablen folgende Werte haben: a <= 198; b <= 199 und c <= 200,

zu diesem Hauptprogramm erstelle ich ein Unterprogramm, welches die Variablen 1/a, 1/b, 1/c in jedem Durchlauf miteinander multipliziert,

nach jedem Durchlauf des Hauptprogramms erhöhe ich den Wert der Variablen wie folgt: a = a +2, b = b + 2, c = c + 2,

haben die Variablen ihr im Hauptprogramm definiertes Maximum erreicht, wird das Unterprogramm nicht noch einmal durchlaufen, sondern es erfolgt die Bildschirmausgabe des Ergebnisses,

wurde das Programm ohne Fehler abgearbeitet, wird es beendet

Kann man denn mit dieser Form nun etwas anfangen?

Geschrieben
Kann man denn mit dieser Form nun etwas anfangen?
Das ist schon gar nicht schlecht.

Eine Gesetzmäßigkeit, die das Ganze noch weiter vereinfacht, ist dir aber offenbar noch nicht aufgefallen: b ist immer a+1, und c ist immer a+2. Du brauchst also weder b noch c.

Geschrieben

Ich würde dir dazu raten, nicht a, b und c als variablen zu nehmen, sondern n, n+1 und n+2.

So musst du nur eine Variable hochzählen und nicht derer drei.

Laut deinem PAP wird nur addiert, wenn a > 198 ist. Zudem ist dort nicht ersichtlich, was addiert wird.

[edit]

hmpf - da war diesmal Klotzkopp schneller als ich.

[/edit]

Geschrieben

Eine Gesetzmäßigkeit, die das Ganze noch weiter vereinfacht, ist dir aber offenbar noch nicht aufgefallen: b ist immer a+1, und c ist immer a+2. Du brauchst also weder b noch c.

Das war jetzt schon etwas bissig :-P

An den OP damit's nicht off-topic wird: Setz dich wirklich mit Papier und Bleistift hin und spiele einen Fall durch und notiere Dir jeden Schritt den Du im Kopf machst. Dann hast Du ganz groben Pseudocode, den musst Du dann verfeinern. Das ganze solltest Du dann vom konkreten Beispiel mit Variablen machen (mathematische Schreibweise). Wenn Du den Pseudocode hast, dann kannst Du ihn leicht in die passende Sprache übersetzen

HTH Phil

Geschrieben (bearbeitet)
Das ist schon gar nicht schlecht.

:beagolisc

Eine Gesetzmäßigkeit, die das Ganze noch weiter vereinfacht, ist dir aber offenbar noch nicht aufgefallen: b ist immer a+1, und c ist immer a+2. Du brauchst also weder b noch c.

Doch, aber ich weiß nicht, wie sich der Computer da in der Speicherverwaltung verhält. Ich habe immer Angst, ich überschreibe eine Variable, deren Wert ich an anderer Stelle noch benötige...

Ändere ich meine Überlegung also nach dem ab, würde es wie folgt aussehen:

Zunächst rufe ich das Programm auf,

dann binde ich die Biblitotheksfunktionen ein,

nun würde ich die Variablen (a, faktor1, faktor2 und ergebnis) in ihrem Typ deklarieren,

es folgt der Beginn des Hauptprogramms,

das Hauptprogramm führt eine Addition durch,

dieses Hauptprogramm läuft so lange, bis die Variable folgenden Wert besitzt: a <= 200,

zu diesem Hauptprogramm erstelle ich ein Unterprogramm namens Division (a = 2; a++) das 1/a berechnet und nenne das Ergebnis dann faktor1,

zu diesem Hauptprogramm erstelle ich ein Unterprogramm namens Division (a = 2; a++) das 1/a berechnet und nenne das Ergebnis dann faktor2,

als weiteres Unterprogramm folgt ein Programm mit dem Namen Multiplikation, das faktor * 1/a (a++) berechnet,

hat die Variable ihr im Hauptprogramm definiertes Maximum erreicht, werden die Unterprogramme nicht noch einmal durchlaufen, sondern es erfolgt die Bildschirmausgabe des Ergebnisses,

wurde das Programm ohne Fehler abgearbeitet, wird es beendet

...nur ich habe Angst ich überschreibe mir benötigte Werte und mache meine Rechnung damit im Endeffekt kaputt :rolleyes:

Bearbeitet von absoluteranfänger
Geschrieben

nun würde ich die Variablen (a, faktor1, faktor2 und ergebnis) in ihrem Typ deklarieren,

es folgt der Beginn des Hauptprogramms

Variablen im Programm deklarieren. Außerhalb ist Mist.

Außerdem, was man auch beachten sollte ist:

S = (1 / (n+0) * (n+1) * (n+2)) + (1 / (n+2) * (n+3) * (n+4))

Hoffentlich hab ich jetzt nicht zu viel verraten. :P

btw: Warum kommt mir diese Berechnung bekannt vor?

Geschrieben
zu diesem Hauptprogramm erstelle ich ein Unterprogramm namens Division
Für ein einfaches 1/x würde ich kein Unterprogramm erstellen.

Und wenn du nicht a++ benutzt, sondern wirklich a+1 bzw. a+2, dann brauchst du auch nicht zu befürchten, dass du etwas überschreibst.

Du kannst ruhig auf einen Rutsch 1 / ( a * (a+1) * (a+2) ) ausrechnen, und das aufsummieren.

Geschrieben (bearbeitet)

ZWeimal ein Unterprogramm mit gleichem Namen erstellen geht nicht, bzw nur das als letztes deklarierte sollte dann vorhanden sein. (zumindest wenn sie die gleichen Variablen übergeben bekommen)

Wieso rechnest du erst 1/Faktor1 und 1/Faktor2, wenn du das auch direkt in einem zusammenfassen kannst per 1/ ( n * (n+1) * (n+2) ), wenn n deine Variable ist, die du in 2er-Schrittweite von der For-Schleife hochzählen lässt.

[edit]

@Klotzkopp & TDM:

Och menno - lasst euch doch mal 2 Minuten mehr Zeit. Bin doch nebenher am Essen. :rolleyes:

[/edit]

Bearbeitet von Crash2001
Geschrieben

Das sieht doch schon mal gar nicht so schlecht aus. Codier es doch einmal so.

...nur ich habe Angst ich überschreibe mir benötigte Werte und mache meine Rechnung damit im Endeffekt kaputt :rolleyes:

Naja, du musst dir eben überlegen welche Gültigkeit (scope) Variablen besitzen und ggf. den Code dann anpassen.

Phil

[edit] da stehen ja fast schon die fertigen Lösungen

Geschrieben
ist sowas in der art nicht quasi alles was man machen muss?
Ja, das ist im Prinzip alles. Aber wir möchten absoluteranfänger dahin führen, dass er sich das selbst erarbeitet, und nicht einfach nur vorsagen, denn dann kann er das nächste Problem selbst lösen.

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...