Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 07.04.2011, 00:52   #11
Spickard
 
Аватар для Spickard
 
Регистрация: 20.11.2010
Сообщений: 3
По умолчанию

Код:
Фибоначчиев поиск наименьшего индекса заданного элемента одномерного "случайного" строго упорядоченного по величине числового массива (рекурсивный вариант).


int N = 10000000; // Количество элементов в массиве
zap A[10000000]; // Массив, отсортированный по возрастанию
int SKey; // Искомый элемент
int Search; // Индекс найденного элемента. 0, если элемент не найден
int Mid; // Индекс внутреннего элемента
int j,i;
int F1,F2,t;
int Finish;

int SFib (int N)
{
   int F1,F2;
   if ((N == 0) || (N == 1))
      return (N);
      else
        if (N >= 2)
	{
		F1 = SFib (N-1);
		F2 = SFib (N-2);
		return (F1+F2);
	}
   return -1;
}


void main ()
{
        Generation ();  //Генерирую упорядоченный массив

        SKey = StrToInt (Edit1->Text);
        j=1;
	while (SFib(j)<(N+1))
          { j=j+1; }
	Mid = N-SFib(j-2)+1;
	F1=SFib(j-2);
	F2=SFib(j-3);
	Finish = 0;
        for (;;)
         {
           if (Finish == 1)
             break;
           if (Mid > 0)
             if (SKey == A[Mid].age)
               break;
           if ((Mid<=0) || (SKey>A[Mid].age))
             {
               if (F1==1)
                  {
                    Finish = 1;
                  }
               else
	          {
                    Mid=Mid+F2;
                    F1=F1-F2;
                    F2=F2-F1;
          	  }
             }
	   else
             {
               if (F2==0)
                 {
                   Finish=1;
                 }
               else
		 {
		   Mid=Mid-F2;
                   t=F1-F2;
                   F1=F2;
                   F2=t;
		 }
             }
         }
	if (Finish) Search=0; else Search=Mid;
        if ((!Search) || (Search == N)) ShowMessage ("Не найден");
        else ShowMessage (IntToStr(Search));
}
У меня работает прекрасно. Переписано с алгоритма на Паскале.
Spickard вне форума Ответить с цитированием
Старый 18.04.2015, 15:49   #12
Rilifer
Новичок
Джуниор
 
Регистрация: 18.04.2015
Сообщений: 1
По умолчанию помогите пожалуйста

немного исправил исходные данные и программа перестала работать((
Код:
{ Фибоначчиев поиск наименьшего индекса заданного элемента }
{ одномерного "случайного" строго упорядоченного по возрас- }
{ танию числового массива (рекурсивный вариант) }
const N=10000; { Количество элементов в массиве }
type Massiv=Array [1..N] of Integer;
var A : Massiv; { Массив, отсортированный по возрастанию }
Key : Integer; { Искомый элемент }
Search: 0..N; { Индекс найденного элемента }
{ 0, если элемент не найден }
Mid : Integer; { Индекс внутреннего элемента }
j,i,p : Integer;
F1,F2,t: Integer;
Finish : Boolean;
{ —--------------------------------— }
FUNCTION F_i_b (p: Integer): Integer;
var F1,F2: Integer;
BEGIN
If (p=0) OR (p=1) then F_i_b:=p else If p>=2 then
begin
F1:=F_i_b (p-1);
F2:=F_i_b (p-2);
F_i_b:=F1+F2
end
END;
{ —- }
BEGIN
Writeln('Введите количество элементов в массиве:');
Readln(p);
for i:=1 to p do 
A[i]:=5*i+random(5)-5;
for i:=1 to p do
write(A[i],' ');
Writeln('Искомый элемент: ');
Read(Key); j:=1;
While F_i_b(j)<p+1 do j:=j+1;
Mid:=p-F_i_b(j-2)+1;
F1:=F_i_b(j-2);
F2:=F_i_b(j-3);
Finish:=FALSE;
While (Key<>A[Mid]) AND (Finish=FALSE) do If (Mid<=0) OR (Key>A[Mid]) then If F1=1 then Finish:=TRUE else
begin
Mid:=Mid+F2;
F1:=F1-F2;
F2:=F2-F1
end
else If F2=0 then Finish:=TRUE else
begin
Mid:=Mid-F2;
t:=F1-F2;
F1:=F2;
F2:=t
end;
If Finish then Search:=0 else Search:=Mid;
WriteLn('Индекс искомого элемента в массиве: ',Search)
END.
Rilifer вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
поиск - ? Evgenii БД в Delphi 11 22.07.2009 19:41
Поиск в БД Karinka БД в Delphi 9 07.12.2008 16:25
Поиск в бд KAKTYC SQL, базы данных 3 25.07.2008 13:21
ПОИСК FIIR БД в Delphi 3 16.06.2008 16:06
Поиск Volkogriz Общие вопросы Delphi 5 22.04.2008 10:59