home *** CD-ROM | disk | FTP | other *** search
- 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.