Forum: Sonstige Fragen zu Delphi
Delphi
by MrSpock,
30. Mai 2012
Hallo Kudle,
hier ist Flo's Taschenrechner zu finden.
Forum: Sonstige Fragen zu Delphi
Delphi
by MrSpock,
18. Jul 2004
Hallo Flo,
zeig doch einmal deinen Versuch, die Abfrage in einer Schleife darzustellen. Wie es prinzipiell läuft hab ich ja schon beschrieben. Die Stufe der Bindung des Operators holst du dir im Code bereits mit OpAltPosition. Anstatt nur den obersten Eintrag zu betrachten nimmst du eine while Schleife, die immer dann ausgeführt wird, wenn OpAltPosition <= OpPosition ist. Dann führst du den...
Forum: Sonstige Fragen zu Delphi
Delphi
by MrSpock,
24. Jun 2004
Hallo Flo,
du musst tatsächlich, wenn du einen Operator findest, der schwächer bindet, als der oberste auf dem Stack, diesen und alle weiteren (in einer Schleife) vom Stack abarbeiten, bis du auf einen Operator triffst, der wieder schwächer bindet.
Beispiel:
3+4*5^2* ergibt auf dem
NumStack:3 4 5 6
OpStack: + * ^
AktOp: *
Forum: Sonstige Fragen zu Delphi
Delphi
by MrSpock,
23. Jun 2004
Hallo Flo,
der Taschenrechner darf ja den Rest des Stack gar nicht abarbeiten! Nur bei einer schließenden Klammer muss er den Stack abräumen, bis zur dazugehörigen öffnenden Klammer (die existieren muss!) oder bei einem Gleichheitszeichen, dann muss er den Stack komplett räumen, darf aber nicht mehr auf eine öffnende Klammer stoßen, sonst müsste es einen Fehler geben.
Forum: Sonstige Fragen zu Delphi
Delphi
by MrSpock,
16. Jun 2004
Hallo Flo,
das liegt daran, dass du in dem anderen Teil der if Anweisung auch zweimla pop aufrufst. Pop löscht ja das obere Element vom Stack. Ich hatte deshalb damals neben pop und popObjects ja auch noch die Funktionen:
function ShowTop: String;
function ShowTopObject(var obj: TObject): String;
implementiert, die wie Pop arbeiten, aber ohne das Element zu löschen! Damit kannst du...
Forum: Sonstige Fragen zu Delphi
Delphi
by MrSpock,
15. Jun 2004
Hallo Flo,
auf den ersten Blick glaube ich, dass es an folgendem liegt:
im else-Fall (wenn also der Stack am Anfang leer ist), schreibst du Key zweimal auf den Stack!
Anz:= 0;
OpStack.Push(key);
OpStack.PushObject(key,TObject(OpPosition))