![]() |
Problem mit UPN-Rechner, bzw. TObjectStack - Anfänger
Hallo.
Ich bin gerade dabei, testweise einen kleinen UPN-Rechner auf die Beine zu stellen. Dabei soll ein Term ( z.b. 123+456-678 ) in ein Editfeld geschrieben werden ( "Eingabe" ). Ein klick auf das Gleichheitszeichen bewirkt nun, dass der Term aufgespaltet wird, und die Zahlen auf den einen Stack ( Zahlenstack ), also 123, 456 und 678 und die Rechenzeichen auf einen Rechenzeichenstack gelegt werden , also + und -. Dies funktioniert bei mir auch schon, doch ich bekomme die Rechenprozedur einfach nicht hin. Er soll dann die Zahlen aus dem Stack nehmen, dann das Rechenzeichen auslesen, dann berechnen - und das, solange bis die Stacks leer sind und dann das Ergebnis ausgeben. Punkt vor Strichrechnung soll dabei berücksichtigt werden, und nun fangen bei mir die Probleme an. Zunächst habe ich nur + und - Rechnungen eingebnunden, aber selbst die funktionieren nicht so richtig. Könnt ihr evtl. einmal drüberschauen? Hier wird der Term auseinandergezogen und aufgeteilt.
Delphi-Quellcode:
procedure tform1.berechne;
var i,iPos:integer; ausrechnen:boolean; rechenz:string; stapelz,ergebnis:real; begin eingabe:=edit1.text; iPos:=1; ausrechnen:=false; for i:=2 to length(eingabe) do begin if not (eingabe[i] in ['0','1','2','3','4','5','6','7','8','9']) then begin zwischenergebnis:=copy(eingabe,iPos,i-ipos); rmerker:=trmerker.create; rmerker.zeichen:=copy(eingabe,i,1); rechenzeichenstack.Push(rmerker); listbox2.items.add(rmerker.zeichen); zmerker:=tzmerker.create; zmerker.zahl:=strtofloat(copy(eingabe,ipos,i-ipos)); zahlenstack.Push(zmerker); edit2.text:=edit2.text+' | '+zwischenergebnis; listbox1.Items.add(zwischenergebnis); ipos:=i+1; end; end; zwischenergebnis:=copy(eingabe,ipos,length(eingabe)); zmerker:=tzmerker.create; zmerker.zahl:=strtofloat(copy(eingabe,ipos,i-ipos)); zahlenstack.Push(zmerker) ; listbox1.items.add(zwischenergebnis); edit2.text:=edit2.text+' | ' +zwischenergebnis end; Und hier soll berechnet werden :
Delphi-Quellcode:
Doch das Berechnen läuft einfach nicht.
procedure TForm1.Button19Click(Sender: TObject);
var stapelzahl,zahloben:real; rzeichen:string; zergebnis:real; s:integer; begin zergebnis:=0; zahloben:=tzmerker(zahlenstack.peek).zahl; repeat until zahlenstack.count=0 zahlenstack.Pop; rzeichen:=trmerker(rechenzeichenstack.peek).zeichen; if rzeichen='+' then begin zergebnis:= tzmerker(zahlenstack.peek).Zahl+zahloben; end else if rzeichen='-' then begin zergebnis:= tzmerker(zahlenstack.peek).Zahl-zahloben; end; end; showmessage(floattostr(zergebnis)); end; Bin schon fast am verzweifeln :) PS: Sorry für die Unübersichtlichkeit! Danke, Huppi [edit=Christian Seehase]Delphi-Tags gesetzt. Bitte künftig selber machen. Danke. Mfg, Christian Seehase[/edit] |
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:18 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz