Registriert seit: 8. Feb 2004
406 Beiträge
Delphi 6 Enterprise
|
Re: Taschenrechner mit Zwischenergebnis programmieren
23. Jun 2004, 12: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
|
|
Zitat
|