Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Центр помощи > [Pascal] Найти n-ое число Фибоначчи


Автор: Ангел 29.1.2007, 11:51
Надо написать подпрограмму, которая находит n-ое число Фибаначи.)

Автор: Romikgy 29.1.2007, 12:02
http://forum.vingrad.ru/topic-131103/view-all.html

Автор: Strannik 29.1.2007, 12:04
Это - коряво и итерационно
Код

function fib(k: integer): int64;
var i: integer; 
      f1,f2: int64;
begin
 if k=1 then
  fib:=1
 else if k=2 then
   fib:=2
 else
   begin
    f1:=1;
    f2:=2;
    for i:=3 to k do
     begin
       k:=f1;
       f1:=f2;
       f2:=k+f2;
     end;
    fib:=f2;
   end;
end;
Это - красиво и рекурсивно

Код

function fib(k: integer): int64;
begin
 case k of 
 1: fib:=1;
 2: fib:=2;
 else  fib:=fib(k-1)+fib(k-2);
 end;
end;



Автор: Ангел 29.1.2007, 12:37
Цитата(Strannik @ 29.1.2007,  12:04)
Это - коряво и итерационно
Код

function fib(k: integer): int64;
var i: integer; 
      f1,f2: int64;
begin
 if k=1 then
  fib:=1
 else if k=2 then
   fib:=2
 else
   begin
    f1:=1;
    f2:=2;
    for i:=3 to k do
     begin
       k:=f1;
       f1:=f2;
       f2:=k+f2;
     end;
    fib:=f2;
   end;
end;
Это - красиво и рекурсивно

Код

function fib(k: integer): int64;
begin
 case k of 
 1: fib:=1;
 2: fib:=2;
 else  fib:=fib(k-1)+fib(k-2);
 end;
end;

Искомое число - это fib?

Добавлено @ 12:44 
Это правильно?
И ещё одно... там, короче, после последнего енд паскаль хочет, дабы была точка с запятой... бред какой-то)
Код

Program fibo;
function fib(k: integer): integer;
var i: integer;
      f1,f2: integer;
begin
 writeln('k=');
 readln(k);
 if k=1 then
  fib:=1
 else if k=2 then
  fib:=2
 else
   begin
    f1:=1;
    f2:=2;
    for i:=3 to k do
     begin
       k:=f1;
       f1:=f2;
       f2:=k+f2;
       end;
    fib:=f2;
writeln (fib);
   end;
   end.




Автор: Rodman 29.1.2007, 12:47
Ангел, конечно просит... веди ты описала функцию, и не описала главную программу

Добавлено @ 12:49 
Код

Program fibo;
function fib(k: integer): integer;
var i: integer;
      f1,f2: integer;
begin
 writeln('k=');
 readln(k);
 if k=1 then
  fib:=1
 else if k=2 then
  fib:=2
 else
   begin
    f1:=1;
    f2:=2;
    for i:=3 to k do
     begin
       k:=f1;
       f1:=f2;
       f2:=k+f2;
       end;
    fib:=f2;
   end;

var ch:integer;
 begin
   writeln('Enter number for find');
   readln(ch);
   writeln('Fibonachi number = ',fib(ch));
   readkey;
   end.


вот так не должно спрашивать

Добавлено @ 12:50 
Strannik, не факт что уже ей можно использовать рекурсию...

Автор: Ангел 29.1.2007, 14:55
Ребят, спасибо всем большое  smile 

Автор: Strannik 29.1.2007, 14:56
Rodman, если мы реализуем поиск числа как функцию и передаём в неё аргумент, то функция не должна ничего читать или выводить, её дело - искать...

Angel,  код основной программы:

Код

program Fibon; {кстати эта строчка совсем не обязательна}
var n: integer;

{Сюда вставлена любая из функций которые я предлагал.}

begin
 readln(n);
 writeln(fib(n));
end;


Angel,  Не за что, обращайся, поможем. Но если тема тривиальная - лучше поискать сначала через поиск на форуме...

Автор: volvo877 29.1.2007, 15:12
С каких пор Паскаль стал понимать Int64 ? Нужно в Дельфи - так надо и писать [Дельфи], в Паскале этот номер с длинным типом не пройдет...

Ангел, даже не пытайся искать предложенной программой числа Фибоначчи для N > 45 (банальное переполнение типа LongInt)...

Автор: Rodman 29.1.2007, 15:24
Strannik, не сразу понял о чем ты (я просто немного видоизменил прогу Ангел), теперь отредактировал...

Цитата(volvo877 @  29.1.2007,  14:12 Найти цитируемый пост)
Ангел, даже не пытайся искать предложенной программой числа Фибоначчи для N > 45

 smile  smile  smile 

Автор: Strannik 29.1.2007, 20:40
Цитата

С каких пор Паскаль стал понимать Int64 ? Нужно в Дельфи - так надо и писать [Дельфи], в Паскале этот номер с длинным типом не пройдет...


Во первых ПАСКАЛь "Понимает" тип инт64.
Во вторых Делфи - это не язык, это среда разработки. 
В третьих есть FreePascal 2.0.4. Внешне почти не отличается от ТП7, но он 32-битный. 
В четвёртых: 
Цитата

Ангел, даже не пытайся искать предложенной программой числа Фибоначчи для N > 45 (банальное переполнение типа LongInt)... 

Учитывая уровень вопроса эффективные алгоритмы и длинная арифметика явно не требовались...

В пятых: давайте не будем флудить в теме помеченной как "решенная".

Автор: Romikgy 29.1.2007, 20:49
Цитата(Strannik @  29.1.2007,  19:40 Найти цитируемый пост)
Во вторых Делфи - это не язык, это среда разработки. 

Эт те кто такое сказал , открой хелп по дельфи и почитай smile 

Автор: Strannik 29.1.2007, 21:16
Из википедии:
Цитата

Delphi (язык программирования) — язык программирования, впервые реализованный в среде разработки Delphi. 


Да, согласен. Тут я дезу написал. Имелось ввиду что при создании консольных приложений в дельфи код мало чем отличается от набранного во FreePascal.

Цитата

В пятых: давайте не будем флудить в теме помеченной как "решенная".

Автор: Romikgy 29.1.2007, 22:52
Цитата(Strannik @  29.1.2007,  20:16 Найти цитируемый пост)

В пятых: давайте не будем флудить в теме помеченной как "решенная".

во первых ты написал неточность и тебя поправили
во вторых кто тебе сказал что здесь флудили?
в третих кто запрещает обсуждать в теме вопрос если тема помечена как решеная?

Автор: Strannik 29.1.2007, 22:57
Всё-всё-всё, виноват, посыпаю голову пеплом и т.д. и т.п. За поправку спасибо, с остальным действительно виноват.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)