hilfe beim lehrgang c++ taschenrechner
-
hallo!
im juni 2005 habe ich einen lehrgang für c++ angefangen. da ich zeitlich eingegrenzt bin, bin ich auf schnelle hilfe angewiesen.
mir geht es nicht ums vorsagen oder abschreiben, damit ist mir nicht geholfen!!!
sondern um denkanstöße wenn es mal wieder klemmt.
ich bin auf diesem gebiet absoluter anfänger (und bitte um nachsicht
im moment hänge ich beim programmieren eines taschenrechners (nur unter der dos-console)
die grundfunktion hab ich zum laufen, jetzt soll er erweitert werden. wer kann helfen?
über eine zusätzlich funktion sollen die anderen ergebnisse auch ausgegeben werden.#include <iostream.h>
double zahl1; //Variable
double zahl2;
char rechnen;double summe(double x, double y){ //Addition
return (x+y);
}double differenz(double x, double y){ //Subtraktion
return (x-y);
}double produkt(double x, double y){ //Multiplikation
return (x*y);
}double divisor(double x, double y){ //Division
return (x/y);
}void main() {
cout << "Geben Sie die erste Zahl ein: "; //Einlesen
cin >> zahl1;cout << "Geben Sie die zweite Zahl ein: ";
cin >> zahl2;cout << "Geben Sie die Rechenoperation ein: (+ , - , * , /) ";
cin >> rechnen;switch(rechnen){
case '+':
cout << "Das Ergebnis der Addition lautet: "<<summe(zahl1,zahl2)<<endl;
break;case '-':
cout << "Das Ergebnis der Subtraktion lautet: "<<differenz(zahl1,zahl2);
break;case '*':
cout << "Das Ergebnis der Multiplikation lautet: "<<produkt(zahl1,zahl2);
break;case '/':
if (zahl2==0){ //Schutz gegen Division durch Null
cout << "Sie haben eine Null eingegeben!"<<endl;
cout << "Die Division durch Null ist nicht erlaubt!";
break;
}
else{cout << "Das Ergebnis der Division lautet: "<<divisor(zahl1,zahl2);
break;
}default: //Schutz gegen falsches Zeichen
cout << "Sie haben keine Rechenfunktion gewaehlt !!!";
}
char p[50];
cin.getline (p,50);
cin.getline (p,50);
}die erste ausgabe sieht so aus:
geben sie die erste zahl ein:12
geben sie die zweite zahl ein:25
geben sie die rechenoperation ein+,-,*,/)
das ergebnis der division lautet:0.48nach der erweiterung soll folgendes ausgegeben werden!
geben sie die erste zahl ein:12
geben sie die zweite zahl ein:25
geben sie die rechenoperation ein+,-,*,/)
das ergebnis der division lautet:0.48
Alle berechnungen:
das ergebnis der addition lautet:37
das ergebnis der subtraktion lautet:-13
das ergebnis der multiplikation lautet:300
das ergebnis der division lautet:0.48also im prinzip soll ich eine funktion schreiben, in der die funktionen der berechnungen enthalten sind, und alle berechnungen sollen erst nach der entsprechend gewählten berechnung ausgegeben werden (siehe beispiel).
ich habe probleme mit der syntax
-
1. C++ Tags (für das Syntaxhighliting im Forum) wären ganz nett.
2. iostream statt iostream.h verwenden. Letztere ist veraltet. Allerdings solltest Du dann using namespace std; nach den includes schreiben.
3. void main() ist eigentlich nicht korrekt; sollte int main() heissen
4. die Funktion divisor sollte division heissen. Divisor ist die Zahl durch die geteilt wird, die Operation heisst "division".
5. die Variablen rechnen, zahl1, zahl2 solltest Du lokal in main() deklarieren.Zu Deiner eigentlichen Frage:
Pack doch Dein switch in eine Funktion und übergibt den character:void berechne( const char rechne) { // ... hier Dein switch } // in main, dann nach dem cin einmal berechne( rechne); berechne('+'); berechne('-'); // usw.
-
oh shit alter du hast so viele fehler und so viele
geöffnete ( { ) auf du solltest erst die syntaxt lernen.
-
WIe wäre es so:
#include <iostream> using namespace std; double Berechnen (double Operand1, double Operand2, char Operator) { switch(Operator) { case '+': return Operand1 + Operand2; case '-': return Operand1 - Operand2; case '*': return Operand1 * Operand2; case '/': if(Operand2) { return Operand1 / Operand2; } else { //Problem exit(1); return 0; } default: //Problem exit(1); return 0; } } int main (void) { double Operand1 = 0, Operand2 = 0; const char Zeichen[4] = {'+', '-', '*', '/'}; cout << "1. Operand eingeben" << endl; cin >> Operand1; cout << "2. Operand eingeben" << endl; cin >> Operand2; for(int i = 0; i < 4; ++i) { cout << Operand1 << Zeichen[i] << Operand2 << "=" << Berechnen(Operand1, Operand2, Zeichen[i]) << endl; } cin.get(); cin.get(); }Felix
-
Du solltest allgemein berücksichtigen was niemand gesagt hat. Außerdem solltest du das switch aus main auslagern (also berechne von niemand). Funktionen wie addiere/subtrahiere... sind sinnlos (zumindest in deinem fall). Außerdem wäre es gut wenn berechne von niemand einen wert zurückgeben würde den du in main ausgibst. Also statt berechne(rechne); solltest du eher cout<<berechne(rechne)<<endl; schreiben.
Wenn du nicht weiter weißt kannst du auch hier gucken (hab ich jetzt mal schnell gemacht, vmtl. verstehst du nicht alles, vergiss einfach die bedingte compilierung (#if/#elif/#endif), aber lösung #1 zu "publizieren" wäre dann doch ein bisschen... Das unschönste ist, wie "alle Operationen" in main gelöst wird (aufruf von calc mit allen ops): jetzt muss sowohl in main als auch in calc jede operation bekannt sein (faktisch ist das bei dem kleinen proggie kein problem, aber wenn die programme größer werden...)
/edit: @Phoemuex er wollte _keine_ fertige source vorn latz geknallt kriegen.