В n будем хранить количество чисел, которые ещё нужно вывести. a и b - предыдущее и текущее числа Фибоначчи. По определению, следующее число Фибоначчи равно сумме двух предыдущих, так что новое значение b будет a + b. Чтобы не заводить новую временную переменную, новое значение a можно будет найти, вычитая из нового b старое a, получится (a + b) - a = b.
Код процедуры:
procedure print_fib(n: integer);
var a, b, t: integer;
begin
a := 0;
b := 1;
while n > 0 do
begin
write(b, ' ');
b := a + b;
a := b - a;
n := n - 1;
end;
end;
Пример основной программы:
begin
print_fib(10)
end.
Вывод:
1 1 2 3 5 8 13 21 34 55
var a,m,n,j,i,x1,y1,x2,y2,x3,y3,x4,y4,kg,kv,p:integer;
k:real;
procedure kvadrat;//рисование 1 квадрата
begin
setpencolor(clBlue);
moveto(x1,y1);
lineto(x2,y2);
lineto(x3,y3);
lineto(x4,y4);
lineto(x1,y1);
end;
begin
hidecursor;
repeat
write('Сторона квадрата от 20 до 100 a=');
read(a);
until a in [20..100];
repeat
writeln('Введите 2 числа для определения соотношени m<n:');
read(m,n);
until m<n;
clearwindow;
k:=m/n;//отношение
kg:=windowwidth div a+1; //кол. кв. по горизонтали
kv:=windowheight div a+1; //по вертикали
for j:=1 to kg do
for p:=1 to kv do
begin
for i:=1 to 50 do //рисуем 50 вложенных квадратов в 1 месте
begin
kvadrat;
x1:=trunc(x1+(x2-x1)*k); y1:=trunc(y1+(y2-y1)*k);
x2:=trunc(x2+(x3-x2)*k); y2:=trunc(y2+(y3-y2)*k);
x3:=trunc(x3+(x4-x3)*k); y3:=trunc(y3+(y4-y3)*k);
x4:=trunc(x4+(x1-x4)*k); y4:=trunc(y4+(y1-y4)*k);
end;
x1:=a*(j-1); y1:=a*(p-1); //на новое место
x2:=a*j; y2:=a*(p-1);
x3:=a*j; y3:=a*p;
x4:=a*(j-1); y4:=a*p;
end;
end.