home *** CD-ROM | disk | FTP | other *** search
- (* ------------------------------------------------------ *)
- (* PTRTRICK.PAS *)
- (* Compiler : Quick Pascal 1.0 (Demo-Version) *)
- (* Bemerkung : Die Option Far-Call muß beim Compilieren *)
- (* gesetzt sein! *)
- (* (c) 1991 Jens Rohloff & TOOLBOX *)
- (* ------------------------------------------------------ *)
- PROGRAM Pointertrick (input, output);
-
- CONST
- max = 3;
-
- TYPE
- FUNC = FUNCTION(x : INTEGER) : REAL;
- (* Der Typ Funktion wird geschaffen: *)
- (* Alle Funktionen mit der gleichen *)
- (* Schnittstelle sind vom gleichen Typ *)
-
- VAR
- Funktionen : ARRAY [1..max] OF FUNC;
- (* Ein Feld, das auf Funktionen *)
- (* verweisen kann *)
- hilf : FUNC;
- i : INTEGER;
- x : REAL;
- antwort : CHAR;
-
-
- FUNCTION eins(X : INTEGER) : REAL;
- (* Funktionen eins, zwei und drei haben *)
- (* die gleichen Schnittstellen *)
- VAR
- xx : REAL;
- BEGIN
- WriteLn('Funktion eins:');
- WriteLn('"Ich wurde von', x, ' aufgerufen."');
- IF x > 2 THEN
- xx := Funktionen[x-1](x-1);
- eins := 1;
- END;
-
- FUNCTION zwei(X : INTEGER) : REAL;
- VAR
- antwort : CHAR;
- xx : REAL;
- BEGIN
- WriteLn('Funktion ', x);
- WriteLn('Im Funktionskörper etwas anders !');
- IF x > 1 THEN BEGIN
- WriteLn('Springen ja oder nein (J/N) [N] ');
- (* Kleine Spielerei ... *)
- ReadLn(antwort);
- IF (UpCase(antwort) = 'J') THEN
- xx := Funktionen[x-1](x);
- END;
- zwei := 2;
- END;
-
- FUNCTION drei(X : INTEGER) : REAL;
- BEGIN
- WriteLn('Funktion ', x);
- drei := 3;
- END;
-
- BEGIN
- Funktionen[1] := eins;
- Funktionen[2] := zwei;
- Funktionen[3] := drei;
- Write('Welche Funktion ? '); ReadLn(i);
- If ((i >= 1) AND (i <= max)) THEN x := Funktionen[i](i);
- REPEAT
- hilf := Funktionen[1];
- FOR i := 1 TO max-1 DO Funktionen[i] := Funktionen[i+1];
- Funktionen[max] := hilf;
- Write('Welche Funktion ? '); ReadLn(i);
- If ((i >= 1) AND (i <= max)) THEN x := Funktionen[i](i);
- WriteLn('Ende ? (J/N) [N]');
- ReadLn(antwort);
- UNTIL(Upcase(antwort) = 'J')
- END.
- (* ------------------------------------------------------ *)
- (* Ende von PTRTRICK.PAS *)
-