поиск чисел Фибоначчи в массиве

  • Автор темы Guest
  • Дата начала
G

Guest

#1
Переменной T присвоить значение true, если среди элементов массива х есть хотя бы одно число Фибоначчи, и значение false иначе
Pascal

Код:
uses crt;

function fib(k:byte):real;
begin
if (k=1) then begin fib:=0;exit;end;
if (k=2) then begin fib:=1;exit;end;

fib:=fib(k-1)+fib(k-2);
end;


const n=10;

var x:array[1..n] of integer;
i,k:byte;
t:boolean;
begin
clrscr;
writeln('введите ',n,' элементов массива');
for i:=1 to n do
read(x[i]);
readln;
t:=false;
for i:=1 to n do
if x[i]=fib(k) then
begin
t:=true;

end;
writeln(t);
readln
end.
помогите, разлобраться. Вот что есть уже.
 

nayke

Well-known member
04.08.2010
310
0
#2
во первых советую числа фибоначи определить в массиве вначале а не определять число рекусивно для каждого x.
например
Код:
fib: array[1..20] of integer;
fib[1]:=1;
fib[2]:=2;
for i:=3 to 20 do
fib[i]:=fib[i-1]+fib[i-2];
ну а сравнить есть ли число в массиве можно как
Код:
for i:=1 to n do
begin
for j:=1 to 20 do
if x[i]=fib[j] then begin t:=true;break;end;
if t then break;
end;
так как последовательность фибоначи будет отсортирована то можно всячески оптимизировать алгоритм, например используя дихотомический поиск, но для лабы с маленькими значениями и так пойдет.