Einzelnen Beitrag anzeigen

Benutzerbild von Evian
Evian

Registriert seit: 10. Apr 2003
Ort: Berlin
485 Beiträge
 
Delphi 6 Professional
 
#1

Rechenvorschriften beachten.

  Alt 27. Apr 2006, 23:52
Hallo,

ich habe eine Frage zu C++, aber eigentlich könnte könnte man das Problem auch in jeder anderen belibigen Programmiersprache behandeln. Also ich habe follgende Aufgabenstellung:

--------
Es wird eine Rechenaufgabe der Form: a + b in die TextBox eingetragen (Grundrechenarten).
Nach betätigen des Buttons soll das Ergebnis in der Form a + b = c in der gleichen TextBox
ausgegeben werden, a, b, c sind Gleitpunktzahlen.

Zusatzaufgabe: Die Rechnung besteht aus beliebig vielen Operanten.
--------

Bis jetzt haben ich das durch follgenden Quelltext gelöst, der linear durch den Stringgeht, die Zahlen zwichen den Operatoren ausließt und sie dann anhand der Operatoren zusammenrechnet.

Code:
private: System::Void btnOk3_Click(System::Object *  sender, System::EventArgs *  e)
       {
         int anf=0,i;
         double erg=0;
         char oper='+';
         String* Zahl;
         for(i=0;i<tbxAufgabe3->Text->Length;i++){
            if((tbxAufgabe3->Text->Chars[i]=='+')||(tbxAufgabe3->Text->Chars[i]=='-')||(tbxAufgabe3->Text->Chars[i]=='*')||(tbxAufgabe3->Text->Chars[i]=='/')||(i == tbxAufgabe3->Text->Length-1)){
               if(i == tbxAufgabe3->Text->Length-1){
                  Zahl =   tbxAufgabe3->Text->Substring(anf,i-anf+1);
               }else{
                  Zahl =   tbxAufgabe3->Text->Substring(anf,i-anf);
               }
               
               switch(oper){
                  case '+': erg=erg+Convert::ToDouble(Zahl); break;
                  case '-': erg=erg-Convert::ToDouble(Zahl); break;
                  case '*': erg=erg*Convert::ToDouble(Zahl); break;   
                  case '/': erg=erg/Convert::ToDouble(Zahl); break;
               }
                  oper = tbxAufgabe3->Text->Chars[i];
                  anf = i+1;
            }
         }
         tbxAufgabe3->Text = String::Concat(tbxAufgabe3->Text,"=",Convert::ToString(erg));
         
       }
Funktioniert soweit auch ganz gut, nur wird dabei nicht beachtet, dass man Punktrechnungen vor Strichrechnungen machen muss. Hat jemand eine Idee, wie ich das am Besten angehen könnte?!

gruß

Evian

Edit: Wenn jemand die Lösung kennt, sie aber nur in Object Pascal angeben könnte, dann würde mir das schon reichen.
-> www.Phillsoft.de

Ich bin nun Mathematiker, aber meine Freundin bleibt trotzdem unberechenbar!
  Mit Zitat antworten Zitat