AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi Problem mit UPN-Rechner, bzw. TObjectStack - Anfänger
Thema durchsuchen
Ansicht
Themen-Optionen

Problem mit UPN-Rechner, bzw. TObjectStack - Anfänger

Offene Frage von "Huppi"
Ein Thema von Huppi · begonnen am 10. Feb 2007
Antwort Antwort
Huppi

Registriert seit: 10. Feb 2007
1 Beiträge
 
#1

Problem mit UPN-Rechner, bzw. TObjectStack - Anfänger

  Alt 10. Feb 2007, 15:11
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]
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:59 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz