Einzelnen Beitrag anzeigen

Benutzerbild von Wuaegner
Wuaegner

Registriert seit: 8. Feb 2004
406 Beiträge
 
Delphi 6 Enterprise
 
#13

Re: Taschenrechner mit Zwischenergebnis programmieren

  Alt 23. Jun 2004, 11:03
Servus! Hab jetzt mal Multiplikation und Division eingeführt bei meinem TR , auch die Punkt-Vor-Strich-Regel , jedoch weiß ich nicht wie ich es anstelle, dass nachdem er die MalRechnung ausgeführt hat den restlichen Stack auch noch abarbeitet.
Delphi-Quellcode:
procedure TForm1.EAusgabeKeyPress(Sender: TObject; var Key: Char);
var
  OpPosition: integer;
  OpAltPosition: integer;
  Zahl,ZahlAlt: extended;
  OpAlt : String;

begin
   inc(anz);
   if (Op <> '') and (anz = 1) then
      EAusgabe.Text := '';

  if Key in [',','0','1','2','3','4','5','6','7','8','9'] then exit;

   if OpPos(Key,OpPosition)= true then {Wenn key ein Operator ist}
     begin
     Label1.Caption:= Key;
     Zahl:= StrToFloat(EAusgabe.Text);

       if OpStack.IsEmpty= false then
             begin
               Opstack.ShowTopObject(TObject(OpAltPosition));

               if OpAltPosition <= OpPosition then
                    begin

                    ZahlAlt:= StrToFloat(NumStack.Pop);
                    OpAlt:= OpStack.ShowTopObject(TObject(OpAltPosition));

                       case OpAlt[1] of
                        '=','+':
                           begin
                           Zahl:= ZahlAlt + Zahl;
                           EAusgabe.Text:= FloatToStr(Zahl);
                           NumStack.Push(FloatToStr(Zahl));
                           OpStack.PushObject(key,TObject(2)); {+ hat Stärke 2}
                           Anz:= 0;
                           end;
                        '-':
                           begin
                           Zahl:= ZahlAlt - Zahl;
                           EAusgabe.Text:= FloatToStr(Zahl);
                           NumStack.Push(FloatToStr(Zahl));
                           OpStack.PushObject(key,TObject(2)); {- hat Stärke 2}
                           Anz:= 0;
                           end;
                        '*':
                           begin
                           Zahl:= ZahlAlt * Zahl;
                           EAusgabe.Text:= FloatToStr(Zahl);
                           NumStack.Push(FloatToStr(Zahl));
                           OpStack.PushObject(key,TObject(1)); {* hat Stärke 1}
                           Anz:= 0;
                           end;
                        '/':
                           begin
                           Zahl:= ZahlAlt / Zahl;
                           EAusgabe.Text:= FloatToStr(Zahl);
                           NumStack.Push(FloatToStr(Zahl));
                           OpStack.PushObject(key,TObject(1)); {/ hat Stärke 1}
                           Anz:= 0;
                           end;
                      end;

                 end

                   else If OpAltPosition > OpPosition then
                              begin
                              NumStack.Push(FloatToStr(Zahl));
                              OpStack.PushObject(key,TObject(OpPosition));
                              Anz:= 0;
                              exit;
                              end;


               end
                else {if IsEmpty = true}
                  begin
                   Op := Key;
                   Anz:= 0;
                   OpStack.PushObject(key,TObject(OpPosition));
                   NumStack.Push(FloatToStr(Zahl));
                   exit;
                  end;
   end;
   Key:= #0;
end;
Wäre sehr dankbar wenn mir jemand weiterhelfen kann!
Grüße Flo
Wuaegner
  Mit Zitat antworten Zitat