home *** CD-ROM | disk | FTP | other *** search
- (* ------------------------------------------------------ *)
- (* ULAN.PAS *)
- (* (c) 1989 H.Hagemeyer & TOOLBOX *)
- (* ------------------------------------------------------ *)
- PROGRAM Terminate;
- USES Crt;
-
- PROCEDURE Pause;
- BEGIN
- WriteLn('- Taste pressen -');
- REPEAT UNTIL Ord (ReadKey) > 0;
- END;
-
- PROCEDURE Fehler;
- BEGIN
- WriteLn; WriteLn;
- WriteLn('Rechenbereich überschritten. ',
- 'Programm wird abgebrochen');
- Halt;
- END;
-
- FUNCTION Ulanfolge(a : LongInt; Anzeige : BOOLEAN): LongInt;
- CONST
- TestZahl = 2;
- VAR
- z : LongInt;
-
- PROCEDURE Fehler;
- BEGIN
- WriteLn; WriteLn;
- WriteLn('Rechenbereich überschritten. ',
- 'Programm wird abgebrochen');
- Halt;
- END;
-
- BEGIN
- z := 1;
- IF Anzeige THEN BEGIN
- WriteLn ('Ulanfolge für a = ', a:8);
- WriteLn ('============================');
- WriteLn;
- END;
- WHILE a <> 1 DO BEGIN
- IF (a MOD TestZahl = 0) THEN
- a := a DIV TestZahl
- ELSE
- { Hier ist ein Terminieren dann nicht gewährleistet, }
- { wenn durch Rechenüberschreitungen a < 0 wird. }
- { Turbo Pascal überprüft leider nicht, ob das Ergeb- }
- { nis einer Multiplikation > MaxLongInt wird. Daher }
- { muß der Programmierer selbst für eine geeignete Ab-}
- { frage sorgen! Die Abfrage wird benötigt für }
- { a > 106239 ! }
-
- IF a <= (MaxLongInt) DIV 3 THEN
- a := 3 * a + 1
- ELSE
- Fehler; { mit Abbruch des Programms durch Halt }
- Inc (z, 1);
- IF Anzeige THEN Write (a:10);
- END;
- UlanFolge := z;
- END;
-
- CONST
- Nmax = 1000;
- Nlang = 26623;
- VAR
- i, z, max : LongInt;
-
- BEGIN
- ClrScr;
- WriteLn('Berechnung der Ulan-Folge für n = ',
- Nlang, ' (sehr lange Folge)');
- WriteLn;
- Pause;
- i := UlanFolge (Nlang,TRUE) ; { Sehr lange Folge }
- WriteLn; WriteLn;
- WriteLn ('Und nun wird die Anzahl der Folge-Glieder bis ',
- Nmax,' ausgegeben :');
- WriteLn;
- Pause;
- max := 1;
- FOR i := 2 TO Nmax DO BEGIN { Terminiert immer ! }
- z := UlanFolge (i, FALSE);
- IF z > Max THEN BEGIN
- WriteLn(i:5, z:10);
- Max := z;
- END;
- END;
- END.
- (* ------------------------------------------------------ *)
- (* Ende von ULAN.PAS *)