RosettaCodeData/Task/Zeckendorf-number-representation/Simula/zeckendorf-number-representation.simula
2019-09-12 10:33:56 -07:00

37 lines
1.8 KiB
Text

BEGIN
INTEGER N, F0, F1, F2, D;
N := 20;
COMMENT CALCULATE D FROM ANY GIVEN N ;
F1 := 1; F2 := 2; F0 := F1 + F2; D := 2;
WHILE F0 < N DO BEGIN
F1 := F2; F2 := F0; F0 := F1 + F2; D := D + 1;
END;
BEGIN
COMMENT Sinclair ZX81 BASIC Solution ;
TEXT Z1, S1;
INTEGER I, J, Z;
INTEGER ARRAY F(1:D); ! 10 dim f(6) ;
F(1) := 1; ! 20 let f(1)=1 ;
F(2) := 2; ! 30 let f(2)=2 ;
FOR I := 3 STEP 1 UNTIL D DO BEGIN ! 40 for i=3 to 6 ;
F(I) := F(I-2) + F(I-1); ! 50 let f(i)=f(i-2)+f(i-1) ;
END; ! 60 next i ;
FOR I := 0 STEP 1 UNTIL N DO BEGIN ! 70 for i=0 to 20 ;
Z1 :- ""; ! 80 let z$="" ;
S1 :- " "; ! 90 let s$=" " ;
Z := I; ! 100 let z=i ;
FOR J := D STEP -1 UNTIL 1 DO BEGIN ! 110 for j=6 to 1 step -1 ;
IF J=1 THEN S1 :- "0"; ! 120 if j=1 then let s$="0" ;
IF NOT (Z<F(J)) THEN BEGIN ! 130 if z<f(j) then goto 180 ;
Z1 :- Z1 & "1"; ! 140 let z$=z$+"1" ;
Z := Z-F(J); ! 150 let z=z-f(j) ;
S1 :- "0"; ! 160 let s$="0" ;
END ELSE ! 170 goto 190 ;
Z1 :- Z1 & S1; ! 180 let z$=z$+s$ ;
END; ! 190 next j ;
OUTINT(I, 0); OUTCHAR(' '); ! 200 print i ; !" "; !;
IF I<10 THEN OUTCHAR(' '); ! 210 if i<10 then print " "; !;
OUTTEXT(Z1); OUTIMAGE; ! 220 print z$ ;
END; ! 230 next i ;
END;
END