3 viết chương trình in ra dãy số fibonacci pascal

Bài 1(Cách 1): Viết chương trình nhập từ bàn phím một số n. Xuất dãy số Fibonacci trong khoảng n.

Biết dãy số Fibo được xác dịnh như sau :

U0 = U1 = 1

Un+2 = Un+1 + Un (n > 0)

Ví dụ: n = 8 -> 1 1 2 3 5 8 13 21.

Program Day_Fibo;

uses crt;

var i,n,f1,f2,f3:longint;

procedure fibo(k:longint);

begin

 f1:=1;

 f2:=1;

 for i:=1 to k do

 begin

  f3:=f1+f2;

  write(f1:3,'  ');

  f1:=f2;

  f2:=f3;

 end;

end;

begin

 clrscr;

 write('Nhap n: ');readln(n);

 fibo(n);

 readln;

end.

Bài 1 (Cách 2): Nhập vào một số N. Xuất ra tất cả các số fibonanci trong khoảng N.

VD: N = 5    -> 1        1          2          3          5

Program Bai9;

uses crt;

var a,b,c,d,i,n:integer;

begin

clrscr;

  write('Nhap vao n = ');readln(n);

  a:=1;

  b:=1;

  c:=a+b;

  write(n,' so Fibonaci dau tien la: ');

  write(1:4,1:4);

  for i:=3 to n do

    begin

      write(c:4);

      a:=b;

      b:=c;

      c:=a+b;

    end;

  writeln;

  writeln('Da xu ly xong');

readln;

end.

  writeln('da xu ly xong');

 readln;

end.

Bài 2: Nhập vào một số N. Xuất ra số Fibonanci thứ N

VD: N = 10    -> Số Fibonanci thứ 10 là: 55

program xuat_so_fibonanci;

uses crt;

var i,n,s,a,b:integer;

begin

clrscr;

 write('nhap vao n:=');readln(n);

  b:=1;

  i:=2;

  a:=1;

   while (i

    begin

     i:=i+1;

      if i mod 2=1 then a:=a+b

      else b:=b+a;

    end;

     if i mod 2=1 then write('So Fibonanci thu ',n,' la: ',a)

     else writeln('So Fibonanci thu ',n,' la: ',b);

readln;

end.

Bài 3: Nhập vào một số phân tích thành tổng các số là số fibonanci.

VD: N = 10   -> 10 = 8 +2

program tfbnc;

var i,j,n:integer;

    f:array[1..1000] of longint;

function fib(k:integer):longint;

  begin

    f[1]:=1;

    f[2]:=1;

    f[3]:=2;

    if f[k]=-1 then f[k]:=fib(k-1)+fib(k-2);

    fib:=f[k];

  end;

begin

  write('nhap n: ');readln(n);

  write(n,'=');

  for i:=1 to 1000 do f[i]:=-1;

  while n>0 do

  begin

    i:=1;

    while fib(i)<=n do i:=i+1;

    j:=fib(i-1);

    if i<=n then write(j,' + ')

    else write (j);

    n:=n-j;

  end;

  writeln();

  writeln('da xu ly xong');

 readln;

end.

Bài 4: Nhập vào một số N. kiểm tra xem có mấy cách phân tích thành tổng các số fibonanci.

VD: N = 10   -> Có 3 cách phân tích.

program bai10;

var f:array[1..20] of integer;

    dd:array[1..20] of boolean;

    n,i,luu:integer;

procedure tim(i:integer);

var j:integer;

begin

  if n=0 then

  begin

    writeln(i-1);

    readln;

    halt;

  end

  else

  begin

    for j:=1 to luu do

     if (not dd[j]) and (n>=f[j]) then

     begin

       dd[j]:=true;

       n:=n-f[j];

       tim(i+1);

       dd[j]:=false;

       n:=n+f[j];

     end;

  end;

end;

{Chuong trinh chinh}

begin

  write('nhap vao n: ');readln(n);

  f[1]:=1;

  f[2]:=1;

  i:=2;

  while (f[i]

    begin

      i:=i+1;

      f[i]:=f[i-1]+f[i-2];

    end;

  luu:=i;

  tim(0);

end.