ADT Liste
lima-city → Forum → Programmiersprachen → Delphi & Pascal
aktuell aktuell anfang
aktuell anfang
aktuell inhalt
anfang
code
eingabe
eventuelle fehlermeldungen
implementation
inhalt
item
last
lauf
leute
list
liste
private anfang
programm
record
sender
zahl
-
Hi Leute,
ich will für einen Vortrag @school nen Programm schreiben, das die Funktionsweise einer ADT-Liste simuliert.
Nur Leider scheint nicht alles so zu funktionieren, wie es soll. Um genau zu sein, passiert nichts.
Hier der Code:
procedure refresh(); //Aktualiesieren der Listbox (mit Liste abgleichen) var i: integer; //Zählvariable für Schleife begin Listbox1.clear; list.findfirst; for i:=1 to list.count do begin Form1.Listbox1.items.Add(inttostr(list.get)); list.findnext; end; end; procedure TForm1.FormCreate(Sender: TObject); begin list:=tliste.create; end; procedure TForm1.Button1Click(Sender: TObject); var zahl: integer; begin list.findfirst; try zahl:=strtoint(edit1.text); if radiobutton1.Checked then list.putbehind(zahl) else list.putbefore(zahl); except showmessage('Ungültige Eingabe!'); end; refresh; end;
und die Klasse TListe ist so deffiniert:
unit liste2; interface type pzeiger=^tElement; tElement=record next:pZeiger; inhalt:integer; end; tListe=class private anfang:pZeiger; aktuell:pZeiger; zahl:Integer; public constructor create(); function get():integer; procedure putbehind(var Inh:integer); procedure putbefore(var Inh:integer); procedure delete(); function empty():BOOLEAN; function full:BOOLEAN; function count():Integer; function last():Boolean; procedure findfirst(); procedure findnext(); end; implementation constructor TListe.create; BEGIN inherited create; anfang:=NIL; aktuell:=NIL; zahl:=0; END; PROCEDURE TListe.putbehind; VAR neu:pZeiger; BEGIN NEW(neu); neu^.Inhalt:=Inh; IF empty() THEN BEGIN anfang:=neu; neu^.next:=NIL; END ELSE BEGIN neu^.next:=aktuell^.next; aktuell^.next:=neu; END; aktuell:=neu; zahl:=zahl+1; END; PROCEDURE TListe.putbefore; VAR neu,lauf:pZeiger; BEGIN NEW(neu); neu^.Inhalt:=Inh; IF aktuell=anfang THEN anfang:=neu ELSE BEGIN lauf:=anfang; WHILE lauf^.next<>aktuell DO lauf:=lauf^.next; lauf^.next:=neu; END; neu^.next:=aktuell; aktuell:=neu; zahl:=zahl+1; END; PROCEDURE TListe.delete; VAR lauf:pZeiger; BEGIN IF aktuell=anfang THEN anfang:=anfang^.next ELSE BEGIN lauf:=anfang; WHILE lauf^.next<>aktuell DO lauf:=lauf^.next; lauf^.next:=aktuell^.next; END; DISPOSE(aktuell); aktuell:=anfang; zahl:=zahl-1; END; function TListe.get():integer; BEGIN result:=aktuell^.Inhalt; END; FUNCTION TListe.empty; BEGIN empty:=anfang=NIL; END; FUNCTION TListe.full; BEGIN full:=SizeOf(tElement)>AllocmemSize; END; FUNCTION TListe.count; BEGIN count:=zahl; END; FUNCTION TListe.last; BEGIN Last:=aktuell^.next=NIL; END; PROCEDURE TListe.Findfirst; BEGIN aktuell:=anfang; END; PROCEDURE TListe.Findnext; BEGIN aktuell:=aktuell^.next; END; BEGIN END.
-
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
Also es wäre schön, wenn du erstmal beschreiben könntest,
was genau nicht funktioniert, d.h.:
Eingabe, erwartete Reaktion, das was wirklich passiert, eventuelle Fehlermeldungen etc. -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage