t3rr4x Geschrieben 13. Dezember 2008 Geschrieben 13. Dezember 2008 Hallo liebe Fachinformatiker Community, ich bin jetzt seit September in einer Ausbildung zum Fachinformatiker für Systemintegrationen. Nur leider hab ich in der Schule wohl noch so meine Problemchen Und zwar sollen wie als Übung/Hausaufgabe ein Programm schreiben (c++) welches folgende Funktionen haben sollte: Ein Bauartikelhändler gwährt seinen Kunden beim Kaufd von Dachziegeln einen Mengenrabatt: Einkaufsmenge Rabatt ------------------------------- bis 500 Stck 2% bis 1000 Stck 5% darüber 10% Kunden mit einer Geschäftsbeziehung von mehr als 10 Jahren und einer Menge von mehr als 1000 Stück erhalten einen zusätzlichen Rabatt von 5%. So soweit so gut: Strutkogramm habe ich gezeichnet und anschliessend angefangen den Source zu schreiben. Nur leider meckert mein Compiler (Visual C++ express). Kann jedoch den Fehler nicht feststellen. Wär toll wenn mir da jemand helfen könnte! Hier der Quelltext: #include <iostream> #include <iomanip> using namespace std; int main(void) { int mengeziegel, bezjahre, rabatt, preisziegel; cout << " Rabattrechner ! /n "; cout << "Bitte geben Sie die gewünschte Menge an Ziegeln ein!"; cin >> mengeziegel; cout << "Wie lange sind Sie schon Kunde von uns? "; cin >> bezjahre; cout << " Wie viel kostet ein einzelner Ziegel?" ; cin >> preisziegel; if (mengeziegel >= 500) { rabatt=2; } if {mengeziegel >= 1000) { rabatt=5; } if (mengeziegel <=1000); { rabatt=10; } else (mengeziegel <=1000 || bezjahre>=10); { rabatt=15; } cout << " Es kostet sie gerade mal: " << (preisziegel*mengeziegel)/rabatt; << " Euro" ; return 0; } cin.get(); cin.get(); } Fehlerausgabe: d:\documents and settings\unknown\my documents\visual studio 2008\projects\rabatt_ziegel\rabatt_ziegel\rabatt.cpp(26) : error C2143: Syntaxfehler: Es fehlt ';' vor '{' Grüsse terrax Zitieren
robotto7831a Geschrieben 13. Dezember 2008 Geschrieben 13. Dezember 2008 Hallo, mach doch mal das Semikolon bei den beiden Zeilen weg. if (mengeziegel <=1000); else (mengeziegel <=1000 || bezjahre>=10); [/code] Frank Zitieren
t3rr4x Geschrieben 13. Dezember 2008 Autor Geschrieben 13. Dezember 2008 Leider immernoch der gleiche *******: Kompilieren... rabatt.cpp d:\documents and settings\unknown\my documents\visual studio 2008\projects\rabatt_ziegel\rabatt_ziegel\rabatt.cpp(26) : error C2059: Syntaxfehler: '{' d:\documents and settings\unknown\my documents\visual studio 2008\projects\rabatt_ziegel\rabatt_ziegel\rabatt.cpp(26) : error C2143: Syntaxfehler: Es fehlt ';' vor '{' d:\documents and settings\unknown\my documents\visual studio 2008\projects\rabatt_ziegel\rabatt_ziegel\rabatt.cpp(26) : error C2059: Syntaxfehler: ')' d:\documents and settings\unknown\my documents\visual studio 2008\projects\rabatt_ziegel\rabatt_ziegel\rabatt.cpp(27) : error C2143: Syntaxfehler: Es fehlt ';' vor '{' d:\documents and settings\unknown\my documents\visual studio 2008\projects\rabatt_ziegel\rabatt_ziegel\rabatt.cpp(27) : warning C4552: '>=': Operator hat keine Auswirkungen; Operator mit Nebeneffekt erwartet Das Buildprotokoll wurde unter "file://d:\Documents and Settings\uNknown\My Documents\Visual Studio 2008\Projects\rabatt_ziegel\rabatt_ziegel\Debug\BuildLog.htm" gespeichert. rabatt_ziegel - 4 Fehler, 1 Warnung(en) ========== Erstellen: 0 erfolgreich, Fehler bei 1, 0 aktuell, 0 übersprungen ========== Zitieren
robotto7831a Geschrieben 13. Dezember 2008 Geschrieben 13. Dezember 2008 Du hast mindestens zwei schließende Klammern zu viel. Frank Zitieren
Mephisto81 Geschrieben 13. Dezember 2008 Geschrieben 13. Dezember 2008 hallo, in Zeile 26 benutzt du anstatt einer normalen Klammer eine geschweifte (beim if). HTH mep Zitieren
t3rr4x Geschrieben 14. Dezember 2008 Autor Geschrieben 14. Dezember 2008 Hey Jungs, dank euch schonmal! Leider bestehen wohl immernoch Fehler, ich verzweifle langsam... Kompilieren... rabatt.cpp d:\documents and settings\unknown\my documents\visual studio 2008\projects\rabatt_ziegel\rabatt_ziegel\rabatt.cpp(45) : error C2143: Syntaxfehler: Es fehlt ';' vor '.' d:\documents and settings\unknown\my documents\visual studio 2008\projects\rabatt_ziegel\rabatt_ziegel\rabatt.cpp(45) : error C4430: Fehlender Typspezifizierer - int wird angenommen. Hinweis: "default-int" wird von C++ nicht unterstützt. d:\documents and settings\unknown\my documents\visual studio 2008\projects\rabatt_ziegel\rabatt_ziegel\rabatt.cpp(46) : error C2143: Syntaxfehler: Es fehlt ';' vor '.' d:\documents and settings\unknown\my documents\visual studio 2008\projects\rabatt_ziegel\rabatt_ziegel\rabatt.cpp(46) : error C4430: Fehlender Typspezifizierer - int wird angenommen. Hinweis: "default-int" wird von C++ nicht unterstützt. d:\documents and settings\unknown\my documents\visual studio 2008\projects\rabatt_ziegel\rabatt_ziegel\rabatt.cpp(46) : error C2086: 'int cin': Neudefinition d:\documents and settings\unknown\my documents\visual studio 2008\projects\rabatt_ziegel\rabatt_ziegel\rabatt.cpp(45): Siehe Deklaration von 'cin' d:\documents and settings\unknown\my documents\visual studio 2008\projects\rabatt_ziegel\rabatt_ziegel\rabatt.cpp(47) : error C2059: Syntaxfehler: '}' d:\documents and settings\unknown\my documents\visual studio 2008\projects\rabatt_ziegel\rabatt_ziegel\rabatt.cpp(47) : error C2143: Syntaxfehler: Es fehlt ';' vor '}' d:\documents and settings\unknown\my documents\visual studio 2008\projects\rabatt_ziegel\rabatt_ziegel\rabatt.cpp(47) : error C2059: Syntaxfehler: '}' Das Buildprotokoll wurde unter "file://d:\Documents and Settings\uNknown\My Documents\Visual Studio 2008\Projects\rabatt_ziegel\rabatt_ziegel\Debug\BuildLog.htm" gespeichert. rabatt_ziegel - 8 Fehler, 0 Warnung(en) So hier mal der aktualisierte Source: #include <iostream> #include <iomanip> using namespace std; int main(void) { int mengeziegel, bezjahre, rabatt, preisziegel; cout << " Rabattrechner ! /n "; cout << "Bitte geben Sie die gewünschte Menge an Ziegeln ein!"; cin >> mengeziegel; cout << "Wie lange sind Sie schon Kunde von uns? "; cin >> bezjahre; cout << " Wie viel kostet ein einzelner Ziegel?" ; cin >> preisziegel; if (mengeziegel >= 500) { rabatt=2; } if (mengeziegel >= 1000) { rabatt=5; } if (mengeziegel <=1000) { rabatt=10; } else (mengeziegel <=1000 || bezjahre>=10); { rabatt=15; } cout << " Es kostet sie gerade mal: " << (preisziegel*mengeziegel)/rabatt << " Euro" ; return 0; } cin.get(); cin.get(); } @ Robotto, hmm 2 Klammern zu viel? Welche meinst du, also meines Wissens gehören die alle dort hin , wo sie jetzt stehen. Grüsse terrax Zitieren
flashpixx Geschrieben 14. Dezember 2008 Geschrieben 14. Dezember 2008 Die Einrückung kann Dir helfen, dass Du Fehler findest: #include <iostream> #include <iomanip> using namespace std; int main(void) { int mengeziegel, bezjahre, rabatt, preisziegel; cout << " Rabattrechner ! \n "; cout << "Bitte geben Sie die gewünschte Menge an Ziegeln ein: "; cin >> mengeziegel; cout << "Wie lange sind Sie schon Kunde von uns: "; cin >> bezjahre; cout << " Wie viel kostet ein einzelner Ziegel: " ; cin >> preisziegel; if (mengeziegel >= 500) rabatt=2; if (mengeziegel >= 1000) rabatt=5; if (mengeziegel <=1000) rabatt=10; else if (mengeziegel <=1000 || bezjahre>=10) rabatt=15; cout << " Es kostet sie gerade mal: " << (preisziegel*mengeziegel)/rabatt << " Euro \n\n" ; return 0; } Das Returnzeichen für einen Zeilenumbruch lautet "\n" und nicht "/n", ob der Code nun semantisch korrekt ist, habe ich nicht überprüft! HTH Phil Zitieren
t3rr4x Geschrieben 14. Dezember 2008 Autor Geschrieben 14. Dezember 2008 Hey Ho, danke dir Phil, scheint ja schonmal zu laufen. Aber es scheint auch wirklich nur so. In 80% der Fälle ist das Ergebnis 0, in den übrigen 20% irgendwas anderes, aufjedenfall nicht das richtige Ergebnis. Stimmt etwas an meiner Rechnung nicht? Steh grad nen bisschen auf der Leitung... Grüsse Zitieren
flashpixx Geschrieben 14. Dezember 2008 Geschrieben 14. Dezember 2008 Stimmt etwas an meiner Rechnung nicht? Steh grad nen bisschen auf der Leitung... Schaue Dir Deine Datentypen noch einmal genau an und prüfe noch einmal die Semantik Phil Zitieren
Toothrot Geschrieben 15. Dezember 2008 Geschrieben 15. Dezember 2008 if (mengeziegel >= 1000) { rabatt=5; } if (mengeziegel <=1000) { rabatt=10; } else (mengeziegel <=1000 || bezjahre>=10); { rabatt=15; } Das ergibt hinten und vorne keinen Sinn. Warum rückst Du unabhängige If-Abfragen ein? Im else-Zweig fehlt offensichtlich noch ein if. Und auch dann ergibt dein Algorhythmus keinen Sinn. Du gibst einen Rabatt von 4 bei mehr (oder gleich) als 1000 Stück und einen Rabatt von 10 bei weniger oder gleich 1000 Stück. Du solltest die Aufgabe nochmal lesen und das ganze nochmal von vorn anfangen. Die 5 % extra gibt es bei > 1000 Stück und einer Geschäftsbeziehung von mehr als 10 Jahren, die letzte Abfrage kann daher in die >1000 Abfrage mit hinein. Ein Integer ist für den Betrag auch nicht angebracht, dafür brauchst Du schon eine Gleitkommazahl. Zitieren
t3rr4x Geschrieben 15. Dezember 2008 Autor Geschrieben 15. Dezember 2008 Hey Jungs, dank euch schonmal. Bin nun nach laaaangem überlegen und rumprobieren endlich zur richtigen Lösung gekommen. Will sie euch ma nicht vorenthalten: #include <iostream> #include <iomanip> using namespace std; int main(void) { int mengeziegel, bezjahre, rabatt, preisziegel; double betragziegel, rabattbetrag, gesamtbetrag; cout << " Rabattrechner ! \n "; cout << "Bitte geben Sie die gewünschte Menge an Ziegeln ein: "; cin >> mengeziegel; cout << "Wie lange sind Sie schon Kunde von uns: "; cin >> bezjahre; cout << " Wie viel kostet ein einzelner Ziegel: " ; cin >> preisziegel; if (mengeziegel <= 1000) rabatt=5; if (mengeziegel <= 500) rabatt=2; if (mengeziegel >1000) rabatt=10; if (mengeziegel >1000 && bezjahre>=10) { rabatt=15; } betragziegel=mengeziegel*preisziegel; rabattbetrag=(betragziegel*rabatt)/100; gesamtbetrag=betragziegel-rabattbetrag; cout << gesamtbetrag; cin.get(); cin.get(); cin.get(); return 0; } Grüsse terrax Zitieren
robotto7831a Geschrieben 15. Dezember 2008 Geschrieben 15. Dezember 2008 Hallo, ich würde das if - Konstrukt etwas umstellen. if (mengeziegel <= 500) rabatt=2; else if (mengeziegel <= 1000) rabatt=5; else { //es kann dann nur noch > 1000 sein if (bezjahre>=10) rabatt=15; else rabatt=10; } [/code] Jetzt muss er nicht mehr so oft immer die gleichen Prüfungen durchführen. Bei deinem kleinen Programm geht die Zeitersparnis wohl gegen Null aber bei größeren kann es schon mal was bringen. Vor allem ist die Lesbarkeit so besser. Dein Programm funktioniert genau so gut. Frank Zitieren
Empfohlene Beiträge
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.