program tab_fib_iter; const rozmiar = 84; type dlc = record p,k : longint end; type tablica = array[1..rozmiar] of dlc; var j : longint; tab : tablica; procedure dodaj(x,y : dlc;var wyn :dlc); begin if x.k+y.k<1000000000 then begin wyn.p:= x.p+y.p; wyn.k:= x.k+y.k end else begin wyn.p:= (x.p+y.p)+1; wyn.k:= x.k+y.k - 1000000000; end; end; { dodaj } function zeroQ(d :dlc) : boolean; begin zeroQ:= (d.p=0) and (d.k= 0) end; { zeroQ } procedure zero(var wyn :dlc); begin wyn.p:= 0; wyn.k:= 0 end; { zero } procedure jeden(var wyn :dlc); begin wyn.p:= 0; wyn.k:= 1 end; { zero } function fib(m : integer) : dlc; var fi1,fi2,pom : dlc; i : integer; begin zero(fi1); jeden(fi2); if m=0 then fi2:=fi1 else for i:= 2 to m do begin pom := fi2; dodaj(fi2,fi1, fi2); fi1 := pom end; fib:=fi2 end; { fib } procedure druk(t : tablica); var i : integer; procedure drukdlc(d : dlc); begin if d.p=0 then write(' ') else write(d.p:10); write(d.k:9) end; { drukdlc } procedure drukdlcnl(d : dlc); begin if d.p=0 then write(' ') else write(d.p:10); writeln(d.k:9) end; { drukdlc } begin for i:= 1 to rozmiar do if i mod 6 = 0 then drukdlcnl(t[i]) else drukdlc(t[i]) end; { druk } begin for j:= 1 to rozmiar do tab[j]:=fib(j); writeln('Kolejne wartosci funkcji Fibonacciego od 1 do ',rozmiar:2); druk(tab) end.