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. |