Thema: Delphi STACK!!!DRINGEND!!!

Einzelnen Beitrag anzeigen

robbespierre

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

STACK!!!DRINGEND!!!

  Alt 1. Apr 2008, 17:34
hey

hab ich zwar schonmal geschrieben, aber hab meinen stack jez verbessert, aber irgendwie kann er den inhalt vom stack nichts in die andere unit übergeben, kann jmd helfen?

unit:

Code:
unit postfix;

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;
  operator:shortstring;
  wort:string;
  hilf,laenge,i,neu:integer;
  op:boolean;
  zahl1,zahl2:integer;
  zeichen:char;

implementation

uses post;

{$R *.dfm}

PROCEDURE rechne(operator:shortstring;VAR neu:integer);
BEGIN
    zahl1:=pop^.inhalt;
    zahl2:=pop^.inhalt;
    zeichen:=operator[1];
    CASE zeichen OF
     '+':neu:=zahl2+zahl1;
     '-':neu:=zahl2-zahl1;
     '*':neu:=zahl2*zahl1;
     '/':neu:=zahl2 DIV zahl1;
    END;
     push(neu);
END;

procedure TForm1.Button1Click(Sender: TObject);
begin
  op:=false;
  wort:=edit1.text;
  laenge:=length(wort);
  FOR i:=1 TO laenge DO BEGIN
     CASE (wort[i]) OF
     '+':BEGIN rechne(wort[i],neu);op:=true;END;
     '-':BEGIN rechne(wort[i],neu);op:=true;END;
     '*':BEGIN rechne(wort[i],neu);op:=true;END;
     '/':BEGIN rechne(wort[i],neu);op:=true;END;
     END;
     IF op=false THEN BEGIN hilf:=strtoint(wort[i]);
                            push(hilf);
                            END;
     END;
end;

procedure TForm1.Edit2Change(Sender: TObject);
begin
    edit2.Text:=inttostr(neu);
end;

procedure TForm1.FormActivate(Sender: TObject);
begin
       init;
end;


end.



der stack ist jetzt:

Code:
unit post;

interface

type tzeiger = ^tknoten;
     tknoten = RECORD
                 inhalt:integer;
                 next:tzeiger;
               END;
     PROCEDURE init;
     FUNCTION empty:boolean;
     PROCEDURE push(neu:integer);
     FUNCTION pop:tzeiger;
VAR hilfe,hilfe1,head,element:tzeiger;
    neu:string;

implementation



PROCEDURE init;
BEGIN
    head:=NIL;
END;

FUNCTION empty:boolean;
BEGIN
   result:=head=NIL;
END;

PROCEDURE push(neu:integer);
BEGIN
      new(element);
      element^.inhalt:=neu;
   IF empty THEN BEGIN head:=element;
                       element^.next:=NIL;
                       END
            ELSE BEGIN hilfe:=head;
                       WHILE hilfe<>NIL DO BEGIN hilfe:=hilfe^.next; END;
                       hilfe:=element;
                       element^.next:=NIL;
                      END;
END;

FUNCTION pop:tzeiger;
BEGIN
   hilfe:=head;
   WHILE hilfe<>NIL DO BEGIN hilfe1:=hilfe;hilfe:=hilfe^.next; END;
   pop:=hilfe;
   hilfe1:=NIL;
END;

end.