AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Stack programmieren / postfix

Ein Thema von robbespierre · begonnen am 31. Mär 2008 · letzter Beitrag vom 1. Apr 2008
 
robbespierre

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

Stack programmieren / postfix

  Alt 31. Mär 2008, 22: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
 

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 07:33 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