Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Problem mit UPN-Rechner, bzw. TObjectStack - Anfänger (https://www.delphipraxis.net/86182-problem-mit-upn-rechner-bzw-tobjectstack-anfaenger.html)

Huppi 10. Feb 2007 15:11


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:
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;
Doch das Berechnen läuft einfach nicht.

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