Beispiel Aufgabe Prozentsatz (Honorar - Millionär ) Fehlerfindung
-
Hallo,
Die Aufgabe in folgendem Kapitel bei mir lautet:
Angenommen ein Autor erhält 5% Honorar pro verkauftem Buch, das mit einem
Verkaufspreis von 15,95 EUR angesetzt ist. Wie viele Bücher musser verkaufen um
Millionär zu werden?Meine eigene Antwort ist diese:
#include <stdio.h> #include <math.h> int main() { float bookrate, zahl1 = 15.95, /* Preis für ein Buch, 100% */ zahl2 = zahl1/100*5, zahl3 = 1000000; bookrate = (zahl3/zahl2; printf("Buecher verkauft werden um eine Mll. : %f Stueck\n" ,bookrate); system("PAUSE"); return 0; }
Die Musterlösung zu dem Problem lautet so, ich habe aber anscheinend irgendeinen Fehler und sie lässt sich nicht kompilieren und Ausführen:
#include <stdio.h> int main() { float anzahl_books, anteil = 5.0, /* Anteil Honorar = 5% */ verkaufspreis = 15.95, anteil_p_book; /*Anteil pro verkauftem Buch*/ anteil_p_book = verkaufspreis/100*anteil; printf("Honorar pro Buch : %f Euro\n" ,anteil_p_book); anzahl_books = 1000000/anteil_p_book; printf("Es muessten %d Buecher verkauft werden\n" ,(int)anzahl_books); return 0; }
Nun zwei Fragen. Was ist nun besser Weg eins oder Weg zwei und warum?
Und zum weiten, habe ich ja einen Wert rausbekommen, wie bekomme ich das Programm so zum laufen, dass mir nur die Ganzzahlen angezeigt werden?
Ich weiß, dass ich irgendwo (int) angeben muss, als Cast Operator, aber wo?Danke (:
-
Erstens: Wie äußert sich denn dieses "lässt sich nicht compilieren"? Normalerweise verrät dir der Compiler auch, womit er ein Problem hat. Auf Anhieb sehe ich im ersten Code nur eine überflüssige Klammer in Zeile 11.
Zweitens: Bei deiner Lösung fällt nur die miserbale Variablenbenennung und das zweifelhaftesystem("PAUSE");
auf, ansonsten dürften beide Lösungen das selbe Ergebnis liefern.
Drittens: In der Musterlösung siehst du doch, wo der Cast hingehört, alternativ kannst du auch bookrate als int-Variable definieren.
-
Hey,
der Compiler sagt mir:
[Build Error] Error 1
Kann ich jetzt nicht sonderlich was raus ziehen, weil der mir keine weiteren Angaben nennt.System Pause, klar gehört nicht in ein fertiges Programm (:
Wenn ich (int) in meiner Rechnung davor setze, dann kommt 0 raus...
-
Die Musterlösung läuft bei mir einwandfrei:
Honorar pro Buch : 0.797500 Euro
Es muessten 1253918 Buecher verkauft werdenBei deiner eigenen Antwort fehlt eine Klammer in Zeile 11. Außerdem sind Variablennamen wie zahl1, zahl2, zahl3 nichtssagend.
Alles in allem wäre das meine Lösung:
#include <stdio.h> int main() { int ergebnis; float verkaufspreis = 15.95; float anteil = 0.05; float honorar = verkaufspreis * anteil; printf("Honorar pro Buch: %f Euro.\n", honorar); ergebnis = 1000000 / honorar; printf("Es muessten %d Buecher verkauft werden.\n", ergebnis); return 0; }
-
Du musst aber bedenken das beim cast abgerundet wird.
D.h. er muss ein Buch mehr verkaufen, wenn die Rechnung nicht ganzzahlig aufgeht.
-
klklö schrieb:
Die Musterlösung läuft bei mir einwandfrei:
Honorar pro Buch : 0.797500 Euro
Es muessten 1253918 Buecher verkauft werdenWow, ein Währung mit 6 Nachkommastellen. Die meisten sind froh, wenn sie die vielen Nullen zwischen der ersten Zahl und dem Komma weg bekommen.
-
Zwiebels schrieb:
Hey,
der Compiler sagt mir:
[Build Error] Error 1
Kann ich jetzt nicht sonderlich was raus ziehen, weil der mir keine weiteren Angaben nennt.Was ist denn das für ein Compiler? Normalerweise ist sowas nur die letzte Bemerkung - davor kommt idR eine Liste mit den Fehlern, die ihm aufgefallen sind.
Wenn ich (int) in meiner Rechnung davor setze, dann kommt 0 raus...
Nicht in der Rechnung, sondern bei der Ausgabe/Speicherung des Endergebnisses. Wenn du eins der Zwischenergebnisse rundest (z.B. das Honorar pro Buch), kommt nichts sinnvolles dabei herauskommen.
-
Benutze den Bloodshed Compiler.
Mhh habe es auf dem Destop gespeichert und jetzt geht es auch, ohne Murren.
Danke für die verbesserte Version (:-closed-