44 lines
740 B
Text
44 lines
740 B
Text
MODULE Zeckendorf;
|
|
FROM InOut IMPORT Write, WriteString, WriteCard, WriteLn;
|
|
|
|
VAR n: CARDINAL;
|
|
|
|
PROCEDURE Zeck(n: CARDINAL);
|
|
VAR
|
|
fib: ARRAY [1..50] OF CARDINAL;
|
|
i: CARDINAL;
|
|
BEGIN
|
|
IF n=0 THEN
|
|
Write('0');
|
|
RETURN
|
|
END;
|
|
|
|
fib[1] := 1;
|
|
fib[2] := 2;
|
|
i := 2;
|
|
WHILE fib[i] < n DO
|
|
fib[i+1] := fib[i] + fib[i-1];
|
|
INC(i)
|
|
END;
|
|
|
|
WHILE fib[i] > n DO DEC(i) END;
|
|
|
|
WHILE i > 0 DO
|
|
IF fib[i] > n THEN
|
|
Write('0')
|
|
ELSE
|
|
Write('1');
|
|
DEC(n, fib[i])
|
|
END;
|
|
DEC(i)
|
|
END
|
|
END Zeck;
|
|
|
|
BEGIN
|
|
FOR n := 0 TO 20 DO
|
|
WriteCard(n, 2);
|
|
WriteString(": ");
|
|
Zeck(n);
|
|
WriteLn;
|
|
END
|
|
END Zeckendorf.
|