Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Object Pascal: кроссплатформенные технологии > Помогите с Фибоначи


Автор: APD 13.12.2005, 22:20
Пытался сделать на паскале последовательность Фибоначи, не получается, помогите. Я так думаю первые два члена надо самому ввести это 1 и 1, а остальные по формуле уже.

Автор: darkart 13.12.2005, 23:05
Прога выводит n-ое число Фибоначи
Код

program Fibonach;
var
  fibPred,fibNow,tmp:longint;
  i,n:integer;
begin
  fibPred:=1;{предыдущее}
  fibNow:=1;{нынешнее}
  writeln('Please enter number n:');
  repeat
    readln(n);
    if n<=0 then writeln('Invalid data. Please reenter n:');
  until n>0;{номер - натуральный}
  for i:=3 to n do
  begin
    tmp:=fibNow;
    fibNow:=fibNow+fibPred;
    fibPred:=tmp;
  end;
  writeln(n,' number of Fibonachi is ',fibNow);
  readln;
end.

Автор: APD 13.12.2005, 23:10
Спасибо, но мне нужно, чтобы они подря выводились, начиная спервого и так...

Автор: darkart 13.12.2005, 23:19
Лови
Код

program Fibonach;
var
  fibPred,fibNow,tmp:longint;
  i,n:integer;
begin
  fibPred:=1;
  fibNow:=1;
  writeln('Please enter number n:');
  repeat
    readln(n);
    if n<=0 then writeln('Invalid data. Please reenter n:');
  until n>0;
  writeln(n,' numbers:');
  write(fibNow,' ');
  if n>1 then write(fibNow,' ');
  for i:=3 to n do
  begin
    tmp:=fibNow;
    fibNow:=fibNow+fibPred;
    fibPred:=tmp;
    write(fibNow,' ');
  end;
  writeln;
  readln;
end.

P.S. Задание нужно уточнять, уточнять и уточнять, как говорил великий...

Автор: APD 13.12.2005, 23:53
гг) Спасибо.
Добавлено @ 23:56
Да вроди тоже не то) Нужно, чтобы автоматом: включил программу и она начал выводить подряд эти члены последовательности Фибоначи))
Добавлено @ 00:02
А, всё правльно, ошибся)))

Автор: APD 14.12.2005, 00:09
Только одна проблема: где-то сороковой элемент выдаёт с минусом, это почему так?

Автор: DeadSoul 14.12.2005, 00:19
Цитата(APD @ 14.12.2005, 00:09)
Только одна проблема: где-то сороковой элемент выдаёт с минусом, это почему так?

КАкое было 39? int не переполнился?

Автор: darkart 14.12.2005, 00:32
Цитата
Только одна проблема: где-то сороковой элемент выдаёт с минусом, это почему так?

Где-то 47 элемент.
longint:
-2147483648..2147483647
Просто происходит переполнение, как уже заметил DeadSoul

Автор: APD 14.12.2005, 00:36
А как-нибудь этого избежать нельзя другим типом?

Автор: DeadSoul 14.12.2005, 00:37
Цитата(APD @ 14.12.2005, 00:36)
А как-нибудь этого избежать нельзя другим типом?

Какой бы тип ты не использовал - переполнение будет всегда. Весь вопрос когдаsmile

Автор: Wowa 14.12.2005, 00:48
Цитата(APD @ 13.12.2005, 22:36)
А как-нибудь этого избежать нельзя другим типом?

их никто не высчитывает все smile Тебе вполне хватит и первых 40, чтобы получить пятерку smile)))

Автор: APD 14.12.2005, 00:49
=)
Да это я как бы сам хотел. Но вдруг потом, там училка например скажет, чтобы 47 вывел)

Автор: Fighter 14.12.2005, 02:09
Цитата(APD @ 14.12.2005, 00:49)
=)
Да это я как бы сам хотел. Но вдруг потом, там училка например скажет, чтобы 47 вывел)


Тогда объяснишь ей про переполнение

Автор: APD 14.12.2005, 14:42
Ага, в общем всем спасибо.

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