Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Stack-Problem kann nur ein Element Stapeln! (https://www.delphipraxis.net/123662-stack-problem-kann-nur-ein-element-stapeln.html)

Arathok 6. Nov 2008 07:32


Stack-Problem kann nur ein Element Stapeln!
 
Hallo ich bins mal wieder. hier mein neuseste problem.
Delphi-Quellcode:
type
  TForm1 = class(TForm)
    Edit1: TEdit;
    Label1: TLabel;
    Button1: TButton;
    Button2: TButton;
    Label2: TLabel;
    Button3: TButton;
    Memo1: TMemo;
    procedure Button3Click(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;// hier wirds wichtig...
     type tstapel=record
     Stack: ARRAY[0..256000]of longint;
     top:integer;
  End;
  var
  Form1: TForm1;
  s: tstapel;
  e:integer;
implementation
procedure ErzSt(var s:tstapel);
begin
s.top:=0
End;
procedure StEl(var s:tstapel;e:Integer);
Begin
Inc(s.top);
s.Stack[s.top]:=e;
end;
Procedure StLeer(var s:tstapel;e:integer);
begin
Dec(s.top);
e:=(s.Stack[s.top])
end;
{$R *.dfm}
procedure TForm1.Button3Click(Sender: TObject);
begin
ErzSt(s);
begin
s.top:=0
End;


end;
procedure TForm1.Button1Click(Sender: TObject);
begin
e:=StrToInt(edit1.text);
StEl(s,e)
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
StLeer(s,e);
memo1.Lines.Add(IntToStr(e));
end;

end.
Das problem ist jetzt: wenn ich etwas vom stapel herunter nehmen will, dann sehebekomme ich als ergebniss immer wieder nur die zuletzt eingestackte zahl...
Button1= Stacken
Button2= Destacken
Button3= Stapel erzeugen

Danke im Vorraus
Ara

Angel4585 6. Nov 2008 07:39

Re: Stack-Problem kann nur ein Element Stapeln!
 
es muss heissen

s.top:=Inc(s.top);

und

s.top:=Dec(s.top);

;)

Edit: oder doch nicht? prüfe mal ob sich die Zahlen danach tatsächlich erhöhen, schon ne weile her das ich damit was gemacht hab

hazard999 6. Nov 2008 07:42

Re: Stack-Problem kann nur ein Element Stapeln!
 
:wall:

autsch.

der code tut weh.

Delphi-Quellcode:
type
   tstapel = record
      Stack: array[0..256000] of longint;
      top: integer;
   end;

   TForm1 = class(TForm)
      Edit1: TEdit;
      Label1: TLabel;
      Button1: TButton;
      Button2: TButton;
      Label2: TLabel;
      Button3: TButton;
      Memo1: TMemo;
      procedure Button3Click(Sender: TObject);
      procedure Button1Click(Sender: TObject);
      procedure Button2Click(Sender: TObject);
   private
      { Private-Deklarationen }
      s: tstapel;
      procedure ErzSt;
      procedure StEl(e: Integer);
      function StLeer: integer;
   public
      { Public-Deklarationen }

   end; // hier wirds wichtig...
var
   Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.ErzSt;
begin
   s.top := 0
end;

procedure TForm1.StEl(e: Integer);
begin
   Inc(s.top);
   s.Stack[s.top] := e;
end;

function TForm1.StLeer: integer;
begin
   Dec(s.top);
   result := s.Stack[s.top];
end;

procedure TForm1.Button3Click(Sender: TObject);
begin
   ErzSt;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
   e := StrToInt(edit1.text);
   StEl(e);
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
   memo1.Lines.Add(IntToStr(StLeer));
end;

end.
etwas besser...

hazard999 6. Nov 2008 07:43

Re: Stack-Problem kann nur ein Element Stapeln!
 
oder doch nicht. inc und dec sind CallByRef.
wenn du dir nicht sicher bist dann F1

Arathok 6. Nov 2008 07:45

Re: Stack-Problem kann nur ein Element Stapeln!
 
Zitat:

Zitat von Angel4585
es muss heissen

s.top:=Inc(s.top);

und

s.top:=Dec(s.top);

;)

Edit: oder doch nicht? prüfe mal ob sich die Zahlen danach tatsächlich erhöhen, schon ne weile her das ich damit was gemacht hab

[Fehler] Unit1.pas(46): Inkompatible Typen: 'Integer' und 'procedure, untyped pointer or untyped parameter'

ok danke es hat doch funktioniert

Angel4585 6. Nov 2008 08:03

Re: Stack-Problem kann nur ein Element Stapeln!
 
Was wars denn jetz? :gruebel:


Alle Zeitangaben in WEZ +1. Es ist jetzt 02: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