aLeXanDer.. Geschrieben 26. September 2007 Geschrieben 26. September 2007 Hallo Community hab das Forum schon durchsucht aber nichts gefunden was mit helfen kann. Habe folgende Aufgabe bekommen : Es soll ein kleines Taschenrechner-Programm erstellt werden das zwei Zahlen (Operanden) und einen Operator nach folgender Syntax einliest: Operand1 Operator Operand2 Als Operator sind nur +, -, * und / zulässig. Wird ein anderer Operator eingegeben, so soll eine entsprechende Fehlermeldung ausgegeben werden. Die Operanden sind als short-Werte einzulesen. Bei korrekter Eingabe ist das Ergebnis der eingegebenen Formel als Ganzzahl zu berechnen und auszugeben. bin so vorgegangen das ich erstmal die operanden definiert hab mit short operand1; short operand2; dann kommt das erste problem ich komm nicht drauf wie das mit dem Operator geht. Kann man ihn definieren mit den zeichen *+-/?! wenn ja wie? muss ich ihn nicht definieren?! zudem hät ich noch gemacht double = result int main() result = operand1 operator operand2 ; cout << "Eingabe der Werte" ; cin >> operand1 >> operator >> operand2; if (!operator) { cout << "Fehler" << endl; } else { cout << result; } nun ich denke bzw. weiß das einiges falsch ist deswegen brauch ich hilfe Zitieren
Klotzkopp Geschrieben 26. September 2007 Geschrieben 26. September 2007 Zunächst musst du dir darüber im Klaren sein, dass du nicht auf "magische" Weise aus Benutzereingaben Code erzeugen kannst. Das geht nur bei Scriptsprachen und Sprachen, die Reflection unterstützen. C++ gehört nicht dazu. Die Eingabe des Benutzers ist also zunächst mal nur Text, ohne semantische Bedeutung für deinen Code. Der Operator ist also nur ein Zeichen, und als solches solltest du dann auch die Variable definieren: als char. Die Eingabe kannst du prüfen, indem du sie mit den Zeichenliteralen '+', '-', '*' oder '/' vergleichst. Das heißt aber natürlich auch, dass du dafür verantwortlich bist, dass je nach Operator die richtige Operation ausgeführt wird. Du kannst char-Ausdrücke übrigens als Steuerungsausdruck für eine Switch-Anweisung verwenden: char c; cin >> c; switch( c ) { case '+': // Addieren break; // ... usw ... default: // Falsche Eingabe break; }[/code] Zweitens musst du die richtige Reihenfolge der Arbeitsschritte einhalten. In deinem Code berechnest du das Ergebnis, bevor der Benutzer die Daten eingibt. Es sollte offensichtlich sein, dass das nicht funktioniert. Drittens darfst du "operator" nicht als Variablenname verwenden. Das ist ein Schlüsselwort in C++. Zitieren
aLeXanDer.. Geschrieben 26. September 2007 Autor Geschrieben 26. September 2007 kommt "operator" dann in den Code? wo? wie ? Zitieren
Klotzkopp Geschrieben 26. September 2007 Geschrieben 26. September 2007 Könntest du deine Fragen etwas präziser stellen? Ich habe doch eben geschrieben, dass du operator nicht als Variablennamen benutzen darfst. Du darf ja auch keine Variable namens int, return oder for anlegen. Das sind Schlüsselwörter, die sind reserviert. Das heißt, wenn du deine char-Variable für den Operator deklarierst, darfst du sie nicht operator nennen. Zitieren
aLeXanDer.. Geschrieben 26. September 2007 Autor Geschrieben 26. September 2007 jah hast meine frage schon beantwortet =) hab den rechner fertig so wie du es mir gezeigt hast mit dem switch-case jetzt soll ich ihn aber in if schreiben anstelle von switch-case ich probiers mal Zitieren
aLeXanDer.. Geschrieben 26. September 2007 Autor Geschrieben 26. September 2007 mit IF : int main () { short operand1; short operand2; char oper; std::cout << "Formel nach Syntax Operand 1 Operator Operand2 eingeben!" << std::endl; std::cout << "Operator kann +,*, -,/ sein" << std::endl; std::cout << "Formel :" ; std::cin >> operand1 >> oper >> operand2; std::cout << "Ergebnis: \n"; if (oper == '+') std::cout << operand1 + operand2; if (oper == '-') std::cout << operand1 - operand2; if (oper == '*') std::cout << operand1 * operand2; if (oper == '/') std::cout << operand1 / operand2; else std::cout << "Falsche Eingabe"; } also es funktioniert ist vielleicht trotzdem irgendwas mhh schlecht gemacht oder so!? Zitieren
Klotzkopp Geschrieben 26. September 2007 Geschrieben 26. September 2007 also es funktioniertNicht ganz. Das else bezieht sich immer nur auf das letzte if. Du müsstest also auch bei +, - und * die Ausgabe "Falsche Eingabe" erhalten. Das kannst du verhindern, indem du die if (bis auf das erste) durch else if ersetzt. Zitieren
aLeXanDer.. Geschrieben 26. September 2007 Autor Geschrieben 26. September 2007 if (oper == '+') std::cout << operand1 + operand2; else if (oper == '-') else std::cout << operand1 - operand2; .... so gemeint?! hab gerade festgestellt das es ein relativ dummes programm ist das kann ja nix außergewöhnliches rechnen Zitieren
Guybrush Threepwood Geschrieben 26. September 2007 Geschrieben 26. September 2007 hab gerade festgestellt das es ein relativ dummes programm ist das kann ja nix außergewöhnliches rechnen Naja was hast du denn erwartet? Der nächste Schritt wäre jetzt die Eingaben auf ihre Korrektheit zu prüfen bevor du damit arbeitest. Danach könntest du zum Beispiel einen einfachen Parser integrieren so das der Benutzer evtl auch "3+2*5-8" eingeben kann und wenn das funktioniert dir mal Gedanken drüber machen wie du Punkt-vor-Strich Rechnung einbauen kannst Zitieren
aLeXanDer.. Geschrieben 26. September 2007 Autor Geschrieben 26. September 2007 Soweit bin ich nocht nicht, dass ich wüßte was ein Parser is und wie ich ihn einsetze. ich steck noch in den Kinderschuhen. Erwartet hab nur soviel das er funktioniert aba das bei sowas wie 5/4 = 1 rauskommt is halt dann scho simpelst müsst ma noch dran rumspieln und ihn bissl tunen Zitieren
Guybrush Threepwood Geschrieben 26. September 2007 Geschrieben 26. September 2007 Das ist auch richtig so bei einer Integerdivision Zitieren
aLeXanDer.. Geschrieben 26. September 2007 Autor Geschrieben 26. September 2007 ja ich wollte ja nicht darauf raus das es falsch ist , sondern das man normalerweiße "Vierfünftel" erwartet und wie gesagt da müsste man änderungen vornehmen , was ich aber etz gar net mag. muss weiter lernen danke guy =) bis zum nächsten Problem Zitieren
Ntl Geschrieben 26. September 2007 Geschrieben 26. September 2007 Du kannst auch einfach den Datentyp auf z.B. double ändern, dann würde er das Ergebnis nicht runden. edit: Wer lesen kann ist klar im Vorteil War ja die Aufgabe, das als short zu deklarieren. 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.