Einzelnen Beitrag anzeigen

robbespierre

Registriert seit: 31. Mär 2008
3 Beiträge
 
#1

Stack programmieren / postfix

  Alt 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]
  Mit Zitat antworten Zitat