C++ Taschenrechner
-
Hi Leute,
da wir in der Schule nicht so viel in C++ beigebracht bekommen stell ich meine frage nun hier.Und zwar: In der Schule haben wir ein schlichten Taschenrechenr programmiert. Da wird der Benutzer nach der ersten Zahl dann nach dem Rechenzeichen und dann nach der zweiten Zahl gefragt. Danach wird das Ergebnis ausgegegen. Das ist der Source Code.
//#pragma hdrstop #include <condefs.h> #include <iostream.h> //--------------------------------------------------------------------------- int main() { bool eingabe = false; float zahl1=0.0 , zahl2=0.0, erg=0.0; char rechenzeichen; do{ cout<<endl<<"Bitte erste Zahl eingeben: "; if (scanf("%f", &zahl1)) { fflush(stdin); eingabe=true; } else { fflush(stdin); eingabe=false; cout<<"Sie haben keine Zahl eingegeben, bitte nochmals ein gültige Zahl eingeben: "; } }while(eingabe==false); do{ cout<<" Bitte ein gültiges Rechenzeichen eingeben (+,-, * oder /): "; cin>>rechenzeichen; }while(rechenzeichen!= '+' && rechenzeichen!= '-' && rechenzeichen!= '*' && rechenzeichen!= '/'); do{ cout<<endl<<"Bitte zweite Zahl eingeben: "; if (scanf("%f", &zahl2)) { fflush(stdin); eingabe=true; } else { fflush(stdin); eingabe=false; cout<<"Sie haben keine Zahl eingegeben, bitte eine gueltige Zahl eingeben: "; } }while(eingabe==false); switch (rechenzeichen) { case '+': erg=zahl1+zahl2; break; case '-': erg=zahl1-zahl2; break; case '*': erg=zahl1*zahl2; break; case '/': erg=zahl1/zahl2; break; default: cout<<"Das Programm stinkt"; break; } cout<<zahl1<<" "<<rechenzeichen<<" "<<zahl2<<"= "<<erg; getchar(); return 0; }meine Frage ist nun wie ich einen Taschenrechenr programmiere der Punkt vor Strich rechnet und drei Zahlen mit einander berechnet. Bitte helft mir ich weiß nicht wies geht

-
Hallo.
Für Code bitte die C/C++-Tags verwenden, sonst ist es zu unübersichtlich. // felißiger Mod
Einfach wäre es so:
Eingabe Zahl1 Eingabe Operation1 Eingabe Zahl2 Eingabe Operation2 Eingabe Zahl3 Wenn Operation1 '+' oder '-' ist und Opeartion2 '*' oder '/' Ergebniss = Rechnen Zahl1 Operation1 ( Zahl2 Operation2 Zahl3 ) Sonst Ergebniss = Rechnen Zahl1 Operation1 Zahl2 Operation2 Zahl3 Ausgabe ErgbenissDass es nicht ewig lang wird würde ich eine Funktion rechnen erstellen, die als Übergabeparameter 2 Zahlen und eine Operation erhält. Ich weiß aber nicht ob ihr schon Funktionen behandelt hatten..
-
Nee Funktionen hatte wir noch nicht deswegen hab ich ja hier nachgefragt.

Ich versuchs jetzt ma das Programm zu machen. Danke
-
//--------------------------------------------------------------------------- #include <vcl.h> #pragma hdrstop #include "MSF.h" //--------------------------------------------------------------------------- #pragma package(smart_init) #pragma resource "*.dfm" TForm1 *Form1; float Eingabe1, Eingabe2, Ergebnis, Zahl1, Zahl2, Zahl3; //--------------------------------------------------------------------------- __fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) { } //--------------------------------------------------------------------------- void __fastcall TForm1::Button1Click(TObject *Sender) { Eingabe1 = StrToFloat (Edit1->Text); Eingabe2 = StrToFloat (Edit2->Text); Ergebnis = Eingabe1 + Eingabe2; Label1->Caption = "Das Ergebnis der Addition ist: " +FloatToStr(Ergebnis); } //--------------------------------------------------------------------------- void __fastcall TForm1::Button2Click(TObject *Sender) { Eingabe2 = StrToFloat (Edit2->Text); Eingabe1 = StrToFloat (Edit1->Text); Ergebnis = Eingabe1 - Eingabe2; Label1->Caption = "Das Ergebnis der Subtraktion ist: " + FloatToStr(Ergebnis); } //--------------------------------------------------------------------------- void __fastcall TForm1::Button3Click(TObject *Sender) { Eingabe1 = StrToFloat (Edit1->Text); Eingabe2 = StrToFloat (Edit2->Text); Ergebnis = Eingabe1 * Eingabe2; Label1->Caption = "Das Ergebnis der Multiplikation ist: " +FloatToStr(Ergebnis); } //--------------------------------------------------------------------------- void __fastcall TForm1::Button4Click(TObject *Sender) { try { Eingabe1 = StrToFloat (Edit1->Text); Eingabe2 = StrToFloat (Edit2->Text); Ergebnis = Eingabe1 / Eingabe2; Label1->Caption = "Das Ergebnis der Division ist: " +FloatToStr(Ergebnis); } catch (...) { Application->MessageBox ("Ach was! Das geht doch nicht", "Fehlermeldung", 2); } } //--------------------------------------------------------------------------- void __fastcall TForm1::Button5Click(TObject *Sender) { Eingabe1 = StrToFloat (Edit1->Text); Ergebnis = Eingabe1 * Eingabe1; Label1->Caption = "Die Hochzahl von " + FloatToStr(Eingabe1) + " " + "ist " + FloatToStr(Ergebnis) ; } //--------------------------------------------------------------------------- void __fastcall TForm1::Button6Click(TObject *Sender) { Eingabe1 = StrToFloat (Edit1->Text); Ergebnis = Eingabe1 * Eingabe1 * Eingabe1; Label1->Caption = "Die 3.Hochzahl von " + FloatToStr(Eingabe1) + " " + "ist " + FloatToStr(Ergebnis) ; } //--------------------------------------------------------------------------- void __fastcall TForm1::Button7Click(TObject *Sender) { Eingabe1 = StrToInt (Edit1->Text); Zahl1 = 2; Zahl2 = 2; Zahl1 ++; Zahl2 ++; if ((Eingabe1 > 33)) Label1->Caption = " Nicht so viel!!!"; } //--------------------------------------------------------------------------- void __fastcall TForm1::Button8Click(TObject *Sender) { Eingabe1 = StrToInt (Edit1->Text); Eingabe2 = StrToInt (Edit2->Text); Zahl1 = Eingabe2 / 100; Zahl2 = Zahl1 * Eingabe1; Ergebnis = Eingabe1 + Zahl2; if ((Ergebnis > 1)) Label2->Caption = " " + String(Eingabe1) + " +" + String(Eingabe2) + " % sind gleich : " + String(Ergebnis); else Label2->Caption = " " + String(Eingabe1) + " +" + String(Eingabe2) + " % ist gleich : " + String(Ergebnis); } //--------------------------------------------------------------------------- void __fastcall TForm1::Button10Click(TObject *Sender) { // Hier hab ich mal die "von" Prozentzahlen!!!!! Eingabe1 = StrToInt (Edit1->Text); Eingabe2 = StrToInt (Edit2->Text); Zahl1 = Eingabe2 / 100; Ergebnis = Zahl1 * Eingabe1; if (( Ergebnis > 1)) Label2->Caption = " " + String(Eingabe2) + " % von " + String(Eingabe1) + " sind : " + String(Ergebnis) + "%"; else Label2->Caption = " " + String(Eingabe2) + " % von " + String(Eingabe1) + " ist : " + String(Ergebnis) + "%"; } //--------------------------------------------------------------------------- void __fastcall TForm1::Button9Click(TObject *Sender) { Eingabe1 = StrToInt (Edit1->Text); Eingabe2 = StrToInt (Edit2->Text); Zahl1 = Eingabe2 / 100; Zahl2 = Zahl1 * Eingabe1; Ergebnis = Eingabe1 - Zahl2; if ((Ergebnis > 1)) Label2->Caption = " " + String(Eingabe1) + " -" + String(Eingabe2) + " % sind gleich : " + String(Ergebnis); else Label2->Caption = " " + String(Eingabe1) + " -" + String(Eingabe2) + " % ist gleich : " + String(Ergebnis); } //---------------------------------------------------------------------------<edit>Bitte Code-Tags verwenden!</edit>
-
Das Programm oben drüber funkzt bei mir nicht und außerdem hab ich keine Ahnung was das ganze zeug was da steht macht. Kann auch sein das ich nur C++Builder 4.0 hab.
Ich wollt nur ein Programm auf dem Stand des von mir obeigen Programms haben.
-
habe versucht drei zahlen mit einander zu verechnen aber ich weiß nicht wie ich punkt vor strich im Source Code programmiere. Genauer gesagt weiß ich nicht wie ich die abfrage vom ersten rechenzeichen und vom zweiten rechenzeichen mach und das programm dann punkt vor strich rechnet. Ich kann ja net hin schreiben
ergebnis = zahl1 rechenzeichen1 zahl2 rechenzeichen2 zahl3 (und pass auf punkt vor strich auf);

-
Als erstes solltest du dir eine Klasse schreiben die deinen eingegeben Text lexikalisch prüft( einen sogenannten Lexer). Dieser Lexer sollte den eingegebenen Text in einzelne Token(Zahl oder Operation) zerlegen und je nach dem seine Operationen ausführen (wenn du dabei Punkt vor Strich beachten willst) wirst du nicht drumrum kommen, dir entweder eine rekursive Methode zuschreiben oder einen Stack zu verwenden). Wenn dein Lexer fertig ist brauchst du nur noch einen Parser, welche deine Rechnung dementsprechend ausführt. Wenn ichs heut noch hinkriege stell ich den auf meine Seite und du kannst dirs downloaden).
Gruss
-
Hier der Link zum Download
-
joa danke aber davon versteh ich genauso wenig wie von den Sachen davor. Naja egal irgendwann schaffs ich schon

Cya
-
Machs do so wie ich gesagt hab, das ist relativ einfach und so wie ich das mitbekommen hab bracuhst du nur 2 Operationen...
double zahl1, zahl2, zahl3; char rechenzeichen1, rechenzeichen2; /* Eingabe ... */ double ergebniss; if( ( rechenzeichen2 == '*' || rechenzeichen2 == '/' ) && ( rechenzeichen1 == '+' || rechenzeichen1 == '-' ) ) { /* Rechnen: zahl1 rechenzeichen1 ( zahl2 rechenzeichen2 zahl3 )*/ } else { /* Ganz normal Rechnen: zahl1 rechenzeichen1 zahl2 rechenzeichen2 zahl3 */ }
-
na Arthor, da haben wir wohl ein bisschen beim Herrn Stroustrup "ausgeborgt", hmm?

//theduke