Delphi-Quellcode:
if u=30 then begin
i:=1; c:=count; g:=g+1;
s0:=0; s1:=0; s2:=0; s3:=0; s4:=0; s5:=0; s6:=0; s7:=0; s8:=0;
c:= (3*c +1) div 2;
repeat
if not odd(c) then
begin
c:=c div 2;
if i=1 then s0:=0;
if i=2 then s1:=0;
if i=3 then s2:=0;
if i=4 then s3:=0;
if i=5 then s4:=0;
if i=6 then s5:=0;
if i=7 then s6:=0;
if i=8 then s7:=0;
if i=9 then s8:=0;
end
else begin
c:=(3*c+1) div 2;
if i=1 then s0:=1;
if i=2 then s1:=1;
if i=3 then s2:=1;
if i=4 then s3:=1;
if i=5 then s4:=1;
if i=6 then s5:=1;
if i=7 then s6:=1;
if i=8 then s7:=1;
if i=9 then s8:=1;
end;
inc(i);
until i > u;
Nachdem u an dieser Stelle 30 ist - wird die Schleife 30x durchlaufen. Du wertest aber nur die ersten 9 mal aus.
Weiters wäre es hier besser ein Array zu benutzen:
Delphi-Quellcode:
var:
s: array [1..8] of byte;
if u=30 then begin
c:=count;
i:=1;
inc(g);
c:= (3*c +1) div 2;
repeat
if odd(c) then
begin
c:=(3*c+1) div 2
s[i] := 1;
end
else
begin
c:=c div 2;
s[i] := 0;
end
inc(i);
until i > 8;
if s[0]=1 and s[1]=1 and s[2]=1 and s[3]=1 and s[4]=1 and s[5]=1 then ...
Ein Array of Bool wäre natürlich noch eleganter, aber so sollte es fürs erste funktionieren.
Stefan
Jedoch kann die referenzbasierte Implementierung des Standard-Objektmodells in Kombination mit den komplexen syntaktischen Dereferenzierungsregeln bei einer objektorientierten
API wie ein Stolperstein wirken.