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