m a t h e p l a t t e . d e

PROGRAM Hasse;
USES CRT;
VAR z, s, a: LONGINT;
j, c: INTEGER;

BEGIN
ClrScr;
z:=0; c:=0;

TextColor(LightRed);
writeln(' ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ»');
writeln(' º úúú H A S S E - A L G O R I T H M U S úúú º');
writeln(' ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ');
writeln(' Ist die Zahl gerade, halbiere sie. ');
writeln(' Ist die Zahl ungerade, multipliziere sie mit 3 und addiere 1. ');
writeln(' Wiederhole bis 1 herauskommt. ');
writeln;

TextColor(White);
write(' Gib einen Startwert ein: ');
readln(s);
a:=s;

writeln(' ------------------------------------------------------------------------------');
write(' ');

REPEAT

IF a<10 THEN j:=1; {j ist die Länge der Zahl}
IF (a>9) AND (a<100) THEN j:=2;
IF (a>99) AND (a<1000) THEN j:=3;
IF (a>999) AND (a<10000) THEN j:=4;
IF (a>9999) AND (a<100000) THEN j:=5;
IF (a>99999) AND (a<1000000) THEN j:=6;
IF (a>999999) AND (a<10000000) THEN j:=7;
IF (a>9999999) AND (a<100000000) THEN j:=8;
IF (a>99999999) AND (a<1000000000) THEN j:=9;
IF (a>999999999) THEN j:=10;

c:=c+j+2; {+2 wegen Komma und Leerzeichen}

IF c>78 THEN {wenn damit mehr als 78 Zeichen}
BEGIN
writeln; {dann neue Zeile}
write(' ',a,',');
c:=j+2; {und Zeichenzähler wieder zurück}
END
ELSE
write(' ',a,','); {sonst noch diese Zeile}

IF a DIV 2=a/2 THEN {Trick mit Division}
a:=a DIV 2
ELSE
a:=3*a+1;

z:=z+1; {Schrittzähler erhöhen}

UNTIL a=1;

write(' 1.');
writeln;
TextColor(White);
writeln(' ------------------------------------------------------------------------------');
writeln(' Beim Startwert ',s,' nach ',z,' Schritten den Wert 1 erreicht.');

readln;
END.



Quellcode als PAS-Datei? Hier!

Zur Startseite zurück