// Prozedurrumpf zur Methode TastenDruck // im Projekt RechnerV2 // (c) 2003 OStR M. Ziemke / LLG procedure Tf_rechner.Tastendruck(Sender: TObject); var zeichen : Char; neue_zahl : Boolean; operatoren : SET OF Char; // Mengen aus Zeichen; ziffern : SET OF Char; // sie werden unten festgelegt temp : String; op1, op2, erg : Real; op : Char; i : Byte; begin // Anzeige zeigt '0'? Dann beginnt eine neue Zahl! neue_zahl := (e_anzeige.text = '0'); // bewirkt das gleiche wie: // IF e_anzeige.text = 0 // THEN neue_zahl := true // ELSE neue_zahl := false; // Operator- und Ziffern-Mengen festlegen: operatoren := ['*','+','-','/']; ziffern := ['0','1','2','3','4','5','6','7','8','9','.']; // Nur falls bereits etwas gestapelt wurde: if stapel > '' // Letztes gestapeltes Zeichen war ein Rechenzeichen? // Dann beginnt jetzt eine neue Zahl! then neue_zahl := (stapel [Length(stapel)] IN operatoren); // Eingabe annehmen: IF Sender = b_1 then zeichen := '1'; IF Sender = b_2 then zeichen := '2'; { Hier ergänzen } IF Sender = b_plus then zeichen := '+'; { Hier ergänzen } IF Sender = b_komma then zeichen := '.'; // Neues Zeichen ist eine Ziffer? IF zeichen IN ziffern Then begin // Zeichen geeignet(!) anzeigen: { Hier ergänzen } // Zeichen einstapeln: { Hier ergänzen } end else begin // Neues Zeichen ist keine Ziffer! // Neue Operatorpriorität festlegen: { Hier ergänzen } // Prioritäten vergleichen: IF neue_prioritaet > alte_prioritaet then { Hier ergänzen } else begin // Term vom Stapel holen und bearbeiten: // Operant2 holen: temp := ''; { Hier ergänzen } op2 := StrToFloat (temp); // Operator holen: { Hier ergänzen } // Operant1 holen: temp := ''; { Hier ergänzen } op1 := StrToFloat (temp); // Term berechnen und anzeigen: CASE op OF '+' : erg := op1 + op2; { Hier ergänzen } else ShowMessage ('Operator ' + op + ' ist unbekannt!'); end; e_anzeige.text := FloatToStr (erg); // Ergebnis einstapeln; { Hier ergänzen } end; end; // Für die Fehlersuche hier nur zeitweise: ShowMessage ('Stapel: ' + stapel); end;