home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Turbo Toolbox
/
Turbo_Toolbox.iso
/
sonderh1
/
dmp1.pas
< prev
next >
Wrap
Pascal/Delphi Source File
|
1986-10-12
|
3KB
|
66 lines
PROGRAM beispiel1 (input, output);
{ Dieses Programm fuehrt eine Liste mit positiven Zahlen, wobei Neueingaben
am Ende der Liste angehaengt werden. Nach jeder Eingabe wird die gesamte
Liste ausgegeben. }
CONST forever = False;
TYPE zeiger = ^eintrag; { Deklaration des Zeigers fuer den Datentyp 'eintrag' }
eintrag = RECORD { Deklaration des Datentyps 'eintrag' }
zahl: Integer; { Informationsteil }
next: zeiger { Verwaltungsteil }
END;
VAR liste: zeiger; { Listenkopf / Anker }
zahl: Integer;
{-----------------------------------------------------------------------------}
PROCEDURE anhaengen (VAR liste: zeiger; { zeigt auf ein Listenelement }
VAR zahl: Integer);
{ Der formale Parameter 'liste: zeiger' wird beim ersten Aufruf durch die glo-
bale Variable 'liste: zeiger' ersetzt, bei den rekursiven Aufrufen durch den
'next'-Zeiger der schon vorhandenen Elemente in der Liste. }
BEGIN
IF liste = nil THEN { Ende der Liste erreicht? }
BEGIN
new (liste); { ja, neues Element anhaengen }
liste^.zahl := zahl;
liste^.next := nil;
END
ELSE
anhaengen(liste^.next, zahl); { nein, rekursiver Aufruf mit
Zeiger auf naechstes Element }
END;
{-----------------------------------------------------------------------------}
PROCEDURE ausgeben (restliste: zeiger);
{ Die Liste wird ab dem Element, auf welches der Zeiger 'restliste' zeigt,
iterativ (WHILE-Schleife) ausgegeben. }
BEGIN
WriteLn;
WHILE restliste <> nil DO { solange Ende der Liste nicht erreicht }
BEGIN
Write (restliste^.zahl:5); { Zahl ausgeben }
restliste := restliste^.next; { und zum Nachfolger gehen }
END;
WriteLn;
END;
{-----------------------------------------------------------------------------}
BEGIN {beispiel1}
WriteLn('*** dynamische Liste:');
liste := nil; { anfangs ist die Liste leer }
REPEAT
WriteLn;
Write ('Zahl: ');
ReadLn (zahl); { neuen Eintrag einlesen }
anhaengen (liste, zahl); { Eintrag an Liste anhaengen }
ausgeben(liste); { komplette Liste ausgeben }
UNTIL forever; { Endlosschleife ! }
END.