Registriert seit: 31. Mär 2008
3 Beiträge
|
Stack programmieren / postfix
31. Mär 2008, 23:49
hallo,
ich soll einen postfixausdruck ins programm eingeben können und das programm berechnet es per buttonklick, die speicherung soll per selbstprogrammierten stack laufen, aber k.a. warum das nicht geht, zeigt immer fehler an
also die projektunit sieht so aus:
Delphi-Quellcode:
unit postverfahren;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
Edit1: TEdit;
Edit2: TEdit;
procedure Button1Click(Sender: TObject);
procedure Edit2Change(Sender: TObject);
procedure FormActivate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
leer:boolean;
neu:integer;
operator:shortstring;
implementation
uses post;
{$R *.dfm}
PROCEDURE rechne( operator:shortstring; VAR head,tail,raus:tzeiger; VAR neu:integer);
VAR zahl1,zahl2:integer;
zeichen:char;
BEGIN
get(head,tail,raus);
zahl1:=raus^.inhalt;
get(head,tail,raus);
zahl2:=raus^.inhalt;
zeichen:=operator[1];
CASE zeichen OF
' +':neu:=zahl2+zahl1;
' -':neu:=zahl2-zahl1;
' *':neu:=zahl2*zahl1;
' /':neu:=zahl2 DIV zahl1;
END;
put(head,tail,leer,neu);
END;
procedure TForm1.Button1Click(Sender: TObject);
VAR i:byte;
hilf,laenge:integer;
op:boolean;
begin
laenge:=length(edit1.text);
FOR i:=1 TO laenge DO BEGIN
CASE (edit1.text[i]) OF
' +': BEGIN rechne((edit1.text[i]),head,tail,raus,neu);op:=true; END;
' -': BEGIN rechne(edit1.text[i],head,tail,raus,neu);op:=true; END;
' *': BEGIN rechne(edit1.text[i],head,tail,raus,neu);op:=true; END;
' /': BEGIN rechne(edit1.text[i],head,tail,raus,neu);op:=true; END;
END;
IF op=false THEN BEGIN hilf:=strtoint(edit1.text[i]);
put(head,tail,leer,hilf);
END;
END;
end;
procedure TForm1.Edit2Change(Sender: TObject);
begin
edit2.Text:=inttostr(neu);
end;
procedure TForm1.FormActivate(Sender: TObject);
begin
init(head,tail);
end;
end.
und die stackspeicherung so:
Delphi-Quellcode:
unit post;
interface
type tzeiger = ^tknoten;
tknoten = RECORD
inhalt:integer;
znaechster:tzeiger;
END;
PROCEDURE init( VAR head,tail:tzeiger);
PROCEDURE empty(head,tail:tzeiger; VAR leer:boolean);
PROCEDURE put( VAR head,tail:tzeiger;leer:boolean;neu:integer);
PROCEDURE get( VAR head,tail:tzeiger; VAR raus:tzeiger);
VAR hilfe1,hilfe2,head,tail,element,raus:tzeiger;
leer:boolean;
neu: string;
implementation
PROCEDURE init( VAR head,tail:tzeiger);
BEGIN
head:=NIL;
tail:=NIL;
END;
PROCEDURE empty(head,tail:tzeiger; VAR leer:boolean);
BEGIN
IF head=tail THEN leer:=true
ELSE leer:=false;
END;
PROCEDURE put( VAR head,tail:tzeiger;leer:boolean;neu:integer);
BEGIN
empty(head,tail,leer);
IF leer THEN BEGIN new(element);
element^.inhalt:=neu;
tail:=element;
head:=element;
element:=NIL;
END
ELSE BEGIN new(tail^.znaechster);
tail^.znaechster^.inhalt:=neu;
tail:=tail^.znaechster;
tail^.znaechster:=NIL;
END;
END;
PROCEDURE get( VAR head,tail:tzeiger; VAR raus:tzeiger);
BEGIN
hilfe1:=head;
IF hilfe1<>tail THEN BEGIN WHILE hilfe1<>tail DO BEGIN hilfe2:=hilfe1;hilfe1:=hilfe1^.znaechster; END; end
ELSE hilfe2:=hilfe1;
raus:=tail;
tail:=hilfe2;
tail:=NIL;
END;
end.
hoffe jemand kann helfen, und bitte ganze schnell, brauchs zu übermorgen!!!!
thx
[edit=Jelly]Delphi Tags gesetzt, und Sprache auf Win32 angepasst (davon geh ich mal aus)... Nächstes Mal bitte selber machen... Mfg, Jelly[/edit]
|