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

Тема в разделе "Pascal and Delphi", создана пользователем -, 7 дек 2010.

  1. Гость

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

    Код (Delphi):
    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.
    помогите, разлобраться. Вот что есть уже.
     
  2. nayke

    nayke Well-Known Member

    Регистрация:
    4 авг 2010
    Сообщения:
    310
    Симпатии:
    0
    во первых советую числа фибоначи определить в массиве вначале а не определять число рекусивно для каждого x.
    например
    Код (Text):
    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];
    ну а сравнить есть ли число в массиве можно как
    Код (Text):
    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;
    так как последовательность фибоначи будет отсортирована то можно всячески оптимизировать алгоритм, например используя дихотомический поиск, но для лабы с маленькими значениями и так пойдет.
     
Загрузка...

Поделиться этой страницей