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

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

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 02.03.2013, 21:15   #1
PavelDD
Пользователь
 
Регистрация: 15.02.2013
Сообщений: 35
По умолчанию Функция с числами Фибоначи

Доброго времени суток.Обращаюсь с просьбой помочь.
У меня есть функция для вывода номера числа(которое я задаю),которое состоит в порядке чисел Фибоначи. Если нет заданного числа в порядке, то функция возвращает -1.
Помогите сделать так, чтобы выводило число,меньшее(которое есть в порядке Фибоначи) заданного. И выводило большее и меньшее(которые состоят в порядке Фибоначи), если заданное число не входило бы в порядок чисел Фибоначи. То есть
например я ввожу 6. Тогда должно вывести 5 и 8.Если ввел 5, то должно вывести 3.
Вот моя функция:

Код:
type
    mas=array[0..100]of integer;
    int=integer;
var
   a:mas;
   j,i,k,x,n,p:int;
function bsearch(a:mas; x,n:int):integer;
var i,j,k:int;
begin
     i := 1;
     j := n;
     while i <= j do begin
           k := i + (j - i) div 2;
           if x > a[k] then
              i := k + 1
           else if x < a[k] then
                j := k - 1
           else
               break;
     end;
     if a[k]=x then bsearch:=k;
     if a[k]<>x then bsearch:=-1;
end;
Заранее благодарен.

Последний раз редактировалось PavelDD; 02.03.2013 в 21:52.
PavelDD вне форума Ответить с цитированием
Старый 02.03.2013, 21:53   #2
Poma][a
Новичок
Джуниор
 
Регистрация: 11.10.2011
Сообщений: 3,882
По умолчанию

Код:
Код:
var
   n, i, f1, f2 : LongInt;

begin
     ReadLn (n);
     f1 := 0;
     f2 := 1;
     i := 1;

     while f2 < n do begin
           f2 := f1+f2;
           f1 := f2-f1;
           Inc (i)
     end;
     Write (f1);
     if f2 <> n then
          WriteLn (' ',f2)
end.
Poma][a вне форума Ответить с цитированием
Старый 02.03.2013, 21:56   #3
PavelDD
Пользователь
 
Регистрация: 15.02.2013
Сообщений: 35
По умолчанию

Спасибо большое. Все работает!
PavelDD вне форума Ответить с цитированием
Старый 02.03.2013, 22:05   #4
PavelDD
Пользователь
 
Регистрация: 15.02.2013
Сообщений: 35
По умолчанию

Еще хотел спросить. Как написать двоичный поиск плавающих чисел?

Последний раз редактировалось PavelDD; 02.03.2013 в 22:18.
PavelDD вне форума Ответить с цитированием
Старый 02.03.2013, 22:19   #5
Poma][a
Новичок
Джуниор
 
Регистрация: 11.10.2011
Сообщений: 3,882
По умолчанию

Цитата:
Как сделать двоичный поиск плавающих чисел?
Чаво?
Тоесть : Вещественные числа отсортированы. Вам нужно найти какое-то число. Так ?
Poma][a вне форума Ответить с цитированием
Старый 02.03.2013, 22:24   #6
Mad_Cat
Made In USSR!
Старожил
 
Аватар для Mad_Cat
 
Регистрация: 01.09.2010
Сообщений: 3,657
По умолчанию

Цитата:
Как написать двоичный поиск плавающих чисел
так же как и не плавающих
"...В жизни я встречал друзей и врагов.В жизни много всего перевидал.Солнце тело мое жгло, ветер волосы трепал,но я смысла жизни так и не узнал..."
(c) Юрий Клинских aka "Хой"
Mad_Cat вне форума Ответить с цитированием
Старый 02.03.2013, 23:06   #7
PavelDD
Пользователь
 
Регистрация: 15.02.2013
Сообщений: 35
По умолчанию

Цитата:
Сообщение от Poma][a Посмотреть сообщение
Чаво?
Тоесть : Вещественные числа отсортированы. Вам нужно найти какое-то число. Так ?
Да. Мы делим весь массив пополам и сравниваем заданное число с серединой массива - это с целыми числами . Так же надо с плавающими. Только у меня не получается с плавающими.
PavelDD вне форума Ответить с цитированием
Старый 02.03.2013, 23:12   #8
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Так же надо с плавающими.
С ними точно так же и делается. Если конечно они отсортированны.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 02.03.2013, 23:25   #9
PavelDD
Пользователь
 
Регистрация: 15.02.2013
Сообщений: 35
По умолчанию

А правильно, что выводит например 1.0Е+000(и в каждом числе присутствует Е+000)?
PavelDD вне форума Ответить с цитированием
Старый 03.03.2013, 09:29   #10
Poma][a
Новичок
Джуниор
 
Регистрация: 11.10.2011
Сообщений: 3,882
По умолчанию

НУ если так вообще не нравится, то можно выводить так :
Код:
WriteLn (a[i] : 0 : 0)
Где последний нолик - кол-во знаков после запятой.

Кстати, в моем решении убери переменную i и всё что с ней связанно. Просто задача оказалась очень похожей на задачу, уже решенную мной ранее, поэтому я скопипастил и слегка изменил кое-что.

Последний раз редактировалось Poma][a; 03.03.2013 в 10:13.
Poma][a вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Функция заполнения динамического массива случайными числами Beren42 Помощь студентам 3 16.10.2012 10:40
Вектор. чет/нечет+фибоначи Март Помощь студентам 1 20.11.2010 17:50
числа фибоначи newgener Помощь студентам 2 24.05.2010 17:26
Оптимизация програмы по поиску чисел Фибоначи whatever Помощь студентам 3 17.11.2009 17:41
Плз помогите срочно! Числа Фибоначи Elme Помощь студентам 1 15.06.2009 21:54