calculator mit visual c++
-
hallo, wir sollen einen taschenrechner programmieren, der immer mit 0 beginnt. erlaubt sind +,-,*,/ .. operator und operant sollen dann eingegeben werden. dann soll das ergebnis in der nächsten zeile erscheinen und man soll immer weiterrechnen können, es sei denn:
- 0 wird als operant eingegeben, dann soll es eine Fehlermeldung geben
- bei eingabe von e soll das programm beendet werden
- bei eingabe von c soll das ergebnis zurück auf 0 gesetzt werdenich weiß nicht, wahrscheinlich ist es zu leicht, aber ich weiß echt nicht wie der befehl zum beenden ist .. close, end, ende .. alles geht nicht.
und ich weiß auch nicht wo und wie ich die schleife im programm unterbringen soll, damit er immer weiterrechnet ..// Calculator #include <iostream.h> void main() { double zahl,e,ergebnis; const start=0; cout <<"CALCULATOR:" << endl; cout <<"-----------" << endl; cout <<""<< endl; cout <<"Geben Sie zunaechst paarweise den gewuenschten Operator ein" << endl; cout <<"(+,-,*,/), gefolgt von einem Operator." << endl; cout <<"Mit druecken der Taste c loeschen sie das Ergebnis und starten erneut bei 0." << endl; cout <<"Mit druecken der Taste e beenden Sie das Programm." << endl; cout <<""<< endl; cout <<"Bitte geben Sie nun Operator und Operant ein: "; cout <<start; cin >> zahl; ergebnis=(start+zahl); if(zahl==0) cout <<"Fehler" << endl; else cout <<"Das Ergebnis lautet: " << ergebnis << endl; }bei ergebnis habe ich + geschrieben .. mir ist aufgefallen, daß wenn ich operator schreibe es blau wird, aber anschließend folgt eine fehlermeldung. das + ist ja aber bestimmt falsch, weil andere rechnungen auch ausgeführt werden sollen, was komischerweise auch geht (bis auf teilen).
wäre toll wenn mir einer helfen könnte. habe alle meine unterlagen durchstöbert, die aber irgendwie nie brauchbar sind für ganze programme und bei google find ich irgendwie auch nix .. scheint zu simpel zu sein.
ach so .. benutzt wird visual c++ 6.0
gruß, sandro
-
Hi
also dein Problem ist in der Tat etwas verzwickt, ich muss mir erst mal schnell überlegen wie ich das machen würde, ich poste dann mal mein Ergebnis wenn ichs habe.
aber mit dem Programm beenden kann ich dir jetzt schon helfen. Du benutzt am besten eine do-while-schleife, die solange ausgeführt wird, bis e gedrückt wird.
Gruß Zeke
-
Wäre nett von dir Zeke .. ich hab noch ein paar tipps bekommen, aber weiß nicht an welche stelle ich das schreiben muß. und der befehl exit(0) funktioniert auch irgendwie nicht ..
soweit habe ich es im moment verändert, beim kompilieren findet er 3 fehler
#include <iostream.h> void main() { double zahl,e,ergebnis; const start=0; char operant; cout <<"CALCULATOR:" << endl; cout <<"-----------" << endl; cout <<""<< endl; // Einleitung mit Erklärung cout <<"Geben Sie zunaechst paarweise den gewuenschten Operator ein" << endl; cout <<"(+,-,*,/), gefolgt von einem Operator." << endl; cout <<"Mit druecken der Taste c loeschen sie das Ergebnis und starten erneut bei 0." << endl; cout <<"Mit druecken der Taste e beenden Sie das Programm." << endl; cout <<""<< endl; switch(operant) { case '+': break; case '-': break; case '*': break; case '/': break; default: cout <<"Falsche Operation" << endl; ergebnis=start switch(operant) zahl; } while;{ cout <<"Bitte geben Sie nun Operator und Operant ein: "; cout <<start; cin >> operant >> zahl; } if(zahl==0) cout <<"Fehler" << endl; else cout <<"Das Ergebnis lautet: " << ergebnis << endl; }
-
Hi
also ich habe gerade versucht das Programm zu schreiben, bin aber auf keinen grünen Zweig gekommen, ich verstehe die Aufgabenstellung nicht so ganz. könntest du die vielleicht nochmal näher erleutern?
kann es sein das du irgendwie die Begriffe Operator und Operand durcheinander gebracht hast?
Operatorn sind +,-,*,/
und Operanden die Zahlen bzw. Werte mit denen man rechnen soll.und wie soll die Eingabe genau aussehen? soll zuerst ein Operator eingegeben werden und dann die Operatoren oder zuerst ein Operand dann ein Operator und dann der zweite Operand, wie beim richtigen Taschenrechner?
und wie soll die Ausgabe erfolgen? immer an der gleichen Stelle indem der alte Wert überschrieben wird?
gruß Zeke
-
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