• Добро пожаловать на компьютерный форум Tehnari.ru. Здесь разбираемся с проблемами ПК и ноутбуков: Windows, драйверы, «железо», сборка и апгрейд, софт и безопасность. Форум работает много лет, сейчас он переехал на новый движок, но старые темы и аккаунты мы постарались сохранить максимально аккуратно.

    Форум не связан с магазинами и сервисами – мы ничего не продаём и не даём «рекламу под видом совета». Отвечают обычные участники и модераторы, которые следят за порядком и качеством подсказок.

    Если вы у нас впервые, загляните на страницу о форуме и правила – там коротко описано, как задать вопрос так, чтобы быстро получить ответ. Чтобы создавать темы и писать сообщения, сначала зарегистрируйтесь, а затем войдите под своим логином.

    Не знаете, с чего начать? Создайте тему с описанием проблемы – подскажем и при необходимости перенесём её в подходящий раздел.
    Задать вопрос Новые сообщения Как правильно спросить
    Если пришли по старой ссылке со старого Tehnari.ru – вы на нужном месте, просто продолжайте обсуждение.

Помогите с нахождением числа Фибоначчи через циклы

  • Автор темы Автор темы SGE
  • Дата начала Дата начала

SGE

Новые
Регистрация
4 Июн 2009
Сообщения
75
Реакции
1
Баллы
0
Помогите с нахождением числа Фибоначчи через циклы

Уважаемые программисты, помогите пожалуйста написать программку (с помощью циклов) для нахождения n-ого числа Фибоначчи (a1=1, a2=1, a3=a2+a1,...,un=un-1+un-2, где n - это номер числа последовательности).
 
Уважаемые программисты, помогите пожалуйста написать программку (с помощью циклов) для нахождения n-ого числа Фибоначчи (a1=1, a2=1, a3=a2+a1,...,un=un-1+un-2, где n - это номер числа последовательности).

VAR
i,n,u,un1,un2:INTEGER;
BEGIN
un1:=1;
un2:=1;
Write('Enter n (n>2) '); ReadLn(n);
FOR i:=3 TO n DO
BEGIN
u:=un1+un2;
un2:=un1;
un1:=u;
END;
WriteLn('n= ',n,' ','u= ',u);
ReadLn;
END.
 
Спасибо большое. Вот мой вариант:
Program fib;
Uses crt;
Var a,a1,a2,p,q,k,n:longint;
Begin
Clrscr;
a1:=1;
a2:=1;
p:=2;
q:=1;
n:=3;
Gotoxy(10,10);
Textcolor(yellow);
Writeln('Нахождение n-ого числа Фибоначчи');
Gotoxy(10,11);
Write('Введите номер числа Фибоначчи: ');Readln(k);
If (k=1) or (k=2) then writeln('n-ое число Фибоначчи = ',a1)
else if k=3 then writeln('n-ое число Фибоначчи = ',a1+a2)
else begin
While k>n do
begin
a:=a1*p+a2*q;
p:=p+q;
q:=p-q;
n:=n+1;
end;
Gotoxy(10,12);
Writeln('n-ое число Фибоначчи = ',a);
end;
Readkey;
End.
 
Можно и так. Мне, правда, кажется, что несколько излишне витиевато, но работает, а это главное.
Пара косметических замечаний.
1. Непонятно, зачем нужно вводить переменные а1 и а2, если это константы, причем равные 1, и их значение в ходе программы не меняется. Можно ведь так:

Вместо
...
If (k=1) or (k=2) then writeln('n-ое число Фибоначчи = ',a1)
else if k=3 then writeln('n-ое число Фибоначчи = ',a1+a2)
else begin
While k>n do
begin
a:=a1*p+a2*q;
...

записать

...
If (k=1) or (k=2) then writeln('n-ое число Фибоначчи = 1')
else if k=3 then writeln('n-ое число Фибоначчи = 2')
else begin
While k>n do
begin
a:=p+q;
...

2. В выводе лучше показывать значение n - приятнее смотрится.

Вместо

Writeln('n-ое число Фибоначчи = ',a);

надо

Writeln(n,'-ое число Фибоначчи = ',a);

Ну и в остальных выводах аналогично.
Тогда вывод будет выглядеть так (например):

6-ое число Фибоначчи = 8
 
Спасибо за помощь. Потихоньку буду избавляться от недочётов.
 
Назад
Сверху