calculator mit visual c++
-
So lautet die Aufgabe richtig und ist noch um einiges länger:
- Nach einer Eingabenhilfe soll am Beginn der nächsten Zeile eine 0 (Null) ausgegeben werden.
- Anschließend sollen paarweise Operator und Operand mit abschließendem <ret> eingelesen werden und das Ergebnis berechnet werden und am Beginn der nächsten Zeile ausgegeben werden.
- Eingabe und Berechnung sollen solange wiederholt werden, bis als Operator ein e eingegeben wird, anschließend soll das Programm ohne weitere Aktivitäten terminieren.- Gültige Operatoren sind +,-,*,/ Die Division durch Null soll ignoriert werden (Fehlermeldung soll angezeigt werden, das Programm fortgesetzt werden).
Bei Eingabe von c (für clear) soll das Ergebnis auf 0 zurückgesetzt und ausgegeben werden.- Bei Eingabe ungültiger Operatoren soll eine Fehlermeldung ausgegeben und das Programm fortgesetzt werden.
Beachten Sie, daß bei der Eingabe eines falschen Operators nhach der Fehlerausgabe das "alte" Ergebnis ausgegeben werden muß und daß der auf den falschen Operator folgende Operand ebenfalls als Operator zu interpretieren versucht wird.- Beachten Sie, daß hier eine typische Mehrfachentscheidung vorliegt, verwenden Sie die geeignete Anweisung.
Bsp. der Eingabe:
... ende -> e
0+3
3*5
15%3
-> %: falsche Operation
15 ->3: falsche Operation
15-16
-1ePress any key to continue
Vielen Dank für deine Bemühung. Toll das hier so nette User sind

Gruß,
Sandro
-
also ich hab jetzt mal folgendes zu Stande gebracht:
#include <iostream.h> int main() { double operand1; double operand2; char op; double ergebnis; cout<<"\nMit druecken der Taste c loeschen sie das Ergebnis und starten erneut bei 0."; cout<<"\nMit druecken der Taste e beenden Sie das Programm."; cout<<"\n\nBitte Eingabe nach folgendem Muster: "; cout<<"\nOperand1 <return> "; cout<<"\nOperator <return> "; cout<<"\nOperand2 <return> "; cout<<"\n\n0"; do { cout<<"\n\n"; cin>>operand1; cin>>op; cin>>operand2; switch(op) { case '+': ergebnis = operand1 + operand2; cout<<"\n\n"<<ergebnis; break; case '-': ergebnis = operand1 - operand2; cout<<"\n\n"<<ergebnis; break; case '*': ergebnis = operand1 * operand2; cout<<"\n\n"<<ergebnis; break; case '/': if(operand2 == 0) { cout<<"\nDivision durch 0 nicht moeglich!!!"; } else { ergebnis = operand1 / operand2; cout<<"\n\n"<<ergebnis; } break; case 'c': ergebnis = 0; cout<<"\n\n"<<ergebnis; break; default: cout<<"\nUngueltiger Operator wurde eingeben!!!"; cout<<"\n\n"<<ergebnis; } } while(op != 'e'); return 0; }jedoch muss man da nach der eingabe eines Operanden return drücken, von der Aufgabenstellung ist es aber so gemeint das man alles (2 Operanden und den Operator) in eine Eingabezeile schreiben soll.
Aber das bring ich auch noch raus, hat da jemand eine Idee? ich würde es mit einem char-array versuchen, wenn man nur einstellige Zahlen eingibt würde das wunderbar funktionieren, aber bei mehreren müsste dann zuerst noch eine Überprüfunf stattfinden, wann der Operator kommt.
aber ansonsten müsste alles soweit passen oder?
gruß Zeke
-
probier's mal aus, du wirst dich wundern, es geht.
kürzer
cin >> operand1 >> op >> operand2;vielleicht noch irgendeine primitive sicherung gegen falsche eingaben wie zb
while (op != 'e' && cin)und so allgemein solltest du statt iostream.h iostream verwenden und deine variablen erst dann einführen, wenn du sie brauchst (statt ganz am anfang).
-
iostream.h und void main() sind bei uns vorgaben die wir irgendwie immer benutzen sollen, auch wenn es wohl überholt ist ..
danke auf jeden fall noch mal für eure hilfe. ich probier es gleich mal aus.
sandro
-
ich hab dein programm mal getestet. bei mir rechnet er immer nur eine rechnung und nicht mit dem ergebnis automatisch weiter. jedes mal muß noch wieder der erste operand eingegeben werden. aber ich glaub das packen wir auch noch

das ist der code mal mit den änderungen von davie ..
#include <iostream.h> int main() { double operand1; double operand2; char op; double ergebnis; cout<<"\nMit druecken der Taste c loeschen sie das Ergebnis und starten erneut bei 0."; cout<<"\nMit druecken der Taste e beenden Sie das Programm."; cout<<"\n\nBitte Eingabe nach folgendem Muster: "; cout<<"\nOperand1 <return> "; cout<<"\nOperator <return> "; cout<<"\nOperand2 <return> "; cout<<"\n\n0"; do { cin >> operand1 >> op >> operand2; switch(op) { case '+': ergebnis = operand1 + operand2; cout<<"\n\n"<<ergebnis; break; case '-': ergebnis = operand1 - operand2; cout<<"\n\n"<<ergebnis; break; case '*': ergebnis = operand1 * operand2; cout<<"\n\n"<<ergebnis; break; case '/': if(operand2 == 0) { cout<<"\nDivision durch 0 nicht moeglich!!!"; } else { ergebnis = operand1 / operand2; cout<<"\n\n"<<ergebnis; } break; case 'c': ergebnis = 0; cout<<"\n\n"<<ergebnis; break; default: cout<<"\nUngueltiger Operator wurde eingeben!!!"; cout<<"\n\n"<<ergebnis; } } while(op != 'e'); return 0; while (op != 'e' && cin); return 0; }
-
dann versuch mal beim ergebnis zuweisen den alten wert zu übernehmen, in etwa so:
ergebnis += operand2;@davie
mir hat man an meiner schule wiederholt beigebracht, dass die variablen die man braucht ganz am anfang zu deklarieren sind, was eigentlich auch logisch und übersichtlicher ist. denn wenn ich mal von einer variable den typ wissen will, muss ich den ganze code danach absuche und überlegen wo ich die zum ersten mal gebraucht habe.
wenn ich sie aber ganz am anfang deklarier, dann hab ich alles auf einen blick.gruß zeke
-
hm da schließ ich mich eher davie an, alles an den Anfang schreiben stammt noch aus C-Zeiten, so wie anscheinend deine Lehrer in der Schule
(nicht ganz so ernst nehmen das mit den Lehrern^^)
-
und gibts es jetzt auch einen grund warum man die variablen deklarationen nicht alle
am anfang des programms schreiben sollte
weil die übersichtlichkeit fördert es ja nicht...
-
Bei einfachen Typen (POD) spielts keine Rolle. Bei Objekten jedoch kann es sein
das die Erstellung bzw Initialisierung wircklich "teuer" ist. Daher erstellt
man Objekte erst dann wenn sie wirklich benötigt werden.
-
Ich finde schon, dass es überichtlicher wird. Ich leg Variablen da an, wo sie semantisch hingehören. Das ist übersichtlicher, als alles an den Anfang zu klatschen.
Und wenn du Objkete anlegen willst, wirds noch sinnvoller, die dann anzulegen, wenn man sie braucht. Um so evtl unnötige Konstruktionen zu verhindern und um den Konstruktor für evtl. Initialisierungen nutzen zu können.
-
Die Verwendung von <iostream.h> statt <iostream> ist nur veraltet.
Die Verwendung von void main() ist gemäss Standard falsch weil es
void main() dort nicht gibt, auch wenn viele Compiler damit klarkommen