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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 26.02.2009, 22:45   #1
Настенька..Блонди
Пользователь
 
Регистрация: 25.12.2008
Сообщений: 37
По умолчанию Нужно объяснение задачки(((

Товарисчи форумчане помогите плз с задачей , друг написал код на паскале ничего не объяснив, я и не поняла((( вод условие задачки напишите каму несложно подробные комментарий к каждой строчке...


Вод код:
Цитата:
var
N: Integer;

procedure Rec(A, B, N: Integer);
var
NA, NB: Integer;
begin
NA := A + B;
NB := A;
Dec(N);
if N <> 0 then
Rec(NA, NB, N)
else
Writeln(A + B);
end;

begin
Write('N=');
Readln(N);
Rec(1, 1, N - 1);
end.
Настенька..Блонди вне форума Ответить с цитированием
Старый 26.02.2009, 23:08   #2
Jean-Esther
Пользователь
 
Аватар для Jean-Esther
 
Регистрация: 15.01.2009
Сообщений: 69
По умолчанию

Ну, если рассмитривать процедуру, то ее можно записать в виде
Код:
procedure Rec(A, B, N: Integer);
begin
Dec(N);
if N <> 0 then Rec(A+B, A, N)
else Writeln(A + B);
end;
Это равносильно нерекурсивной процедуре
Код:
procedure Rec(A, B, N: Integer);
var C:integer;
begin
repeat
dec(N);
if N>0 then begin C:=A; A:=A+B; B:=C; end;
until N=0;
writeln(A+B)
end;
То есть после первой итерации имеем A=A0+B0; B=A0.
После второй A=2A0+B0; B=A0+B0
После третей A=3A0+2B0; B=2A0+B0;
тут A0 и B0 — первоначальные аргументы.
Как несложно догадаться, далее идут ряды Фибоначчи-подобной последовательности с базой A0 и B0. Процедура выводит (N+2)-й член этой последовательности.
Silence is of great value...
Jean-Esther вне форума Ответить с цитированием
Старый 26.02.2009, 23:10   #3
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

Условия я что-то не вижу. Ну да ладно. И так понятно, что это программа для подсчета N-ого числа Фибоначчи.
Только вот есть здесь ошибка:
Вызов должен быть таким:
Код:
Rec(0, 1, N);
Иначе она считает не N-ое число, а (N+1)-ое и вылетает, если N=1.
Такую простую задачу могли бы и сами разобрать.

Код:
procedure Rec(A, B, N: Integer); 
var
NA, NB: Integer;
begin
NA := A + B;  { NA = сумма переданных процедуре параметров }
NB := A;   { в NB сохраняем предыдущее число }
Dec(N);   { уменьшаем  N }
if N <> 0 then  { если N >0, то продолжаем считать }
Rec(NA, NB, N)   { вызываем себя рекурсивно }
else
Writeln(A + B);   {иначе, если дошли до нуля, выводим результат }
end;
На примере: нужно найти 5-е число Фибоначчи.
Вызываем процедуру: Rec(0,1,5);
В ней снова вызываем Rec(1,0,4);
Далее Rec(1,1,3);
Потом Rec(2,1,2);
Rec(3,2,1);
Теперь снова уменьшаем N. Он становится равным 0. Значит, дошли до нужного числа. Это будет 3+2 = 5.

Как тут еще можно объяснить, даже не знаю.
Почитайте это -> Числа Фибоначчи

ps немного не успел
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума Ответить с цитированием
Старый 26.02.2009, 23:13   #4
roach1967
Пользователь
 
Регистрация: 21.02.2009
Сообщений: 28
По умолчанию

Это процедура поиска N-го числа Фибоначчи. Так как по определению используется рекурентный способ нахождения, то в данной программе используется рекурсивный вызов процедуры до достижения числа N = 0.
Т.е. с каждым вызовом процедуры число N уменьшается, но при этом в NA и в NB поочерёдно прописываются все эти числа.
В споре рождается истина.
roach1967 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Нарисуйте пожалуйста блок-схему лёгкой задачки, не знаю как,очень нужно... prikolist Паскаль, Turbo Pascal, PascalABC.NET 2 28.11.2008 15:27
Задачки на Си Cyn4uk Помощь студентам 3 06.12.2007 23:51
Объяснение к задаче коммивояжер. enik pi Помощь студентам 2 14.06.2007 00:54