Конспект лекций по программированию для начинающих. Гладков В.П. - 110 стр.

UptoLike

Составители: 

112
u
5
=u
4
+u
3
=2+3=5;
u
6
=u
5
+u
4
=3+5=8 и т.д.
Отсюда следует, что для получения очередного числа достаточно хранить два
предыдущих. Таким образом, в программе постоянно используются три соседних
числа Фибоначчи. Для их хранения достаточно ввести три переменные: А хранит
u
k
, B хранит u
k-1
, C хранит u
k-2
. Для вычисления следующего числа Фибоначчи
необходимо провести сдвиг, т.е. переписать содержимое B в C, а содержимое A в
B. Исходя из этого, получаем фрагмент 28.
{ фрагмент 28 }
c:=1; { значение первого числа известно }
b:=1; { значение второго числа тоже известно }
k:=3; { начинаем вычисление с третьего числа }
while k<=n do { цикл, пока не найдено n-е число }
begin a:=b+c;{вычисляем следующее число как сумму
двух предыдущих }
c:=b; { сдвигаем b в c для нахождения следующего числа }
b:=a; { сдвигаем a в b для нахождения следующего числа }
k:=k+1 { увеличиваем счетчик найденных чисел }
end;
write(a); { печатаем найденное число }
Упражнения:
1. Выполните трассировку фрагмента 28 для n=2,3,4.
2. Дополните фрагмент 28 так, чтобы он правильно выдавал числа Фибоначчи
для любого n>=1.
Пример 10.32. Пусть необходимо разработать фрагмент программы для
вычисления n-го члена последовательности, заданной формулой примера 10.26.
Решение. Первые элементы этой последовательности будут иметь вид: u
1
=1;
u
2
=2; u
3
=u
2
=1; u
4
=u
2
=2; u
5
=u
3
=1 и т.д. Хотя в формуле используется два члена,
хранить нужно три соседних члена, поэтому используем следующие переменные:
А хранит u
k
, B хранит u
k-1
, C хранит u
k-2
. Программа представлена в фрагменте 29.
{ фрагмент 29 }
c:=1;
b:=2;
k:=3;
while k<=n do
begin a:=c;
c:=b;
b:=a;
k:=k+1
end;
write(a);
Упражнение. Решает ли фрагмент 29а ту же задачу, что и фрагмент 29?
Почему?
{ фрагмент 29а }
if n mod 2 =0
then a:=2
else a:=1;
                                      112

               u5=u4+u3=2+3=5;
               u6=u5+u4=3+5=8 и т.д.
    Отсюда следует, что для получения очередного числа достаточно хранить два
предыдущих. Таким образом, в программе постоянно используются три соседних
числа Фибоначчи. Для их хранения достаточно ввести три переменные: А хранит
uk, B хранит uk-1, C хранит uk-2. Для вычисления следующего числа Фибоначчи
необходимо провести сдвиг, т.е. переписать содержимое B в C, а содержимое A в
B. Исходя из этого, получаем фрагмент 28.
    { фрагмент 28 }
    c:=1; { значение первого числа известно }
    b:=1; { значение второго числа тоже известно }
    k:=3; { начинаем вычисление с третьего числа }
    while k<=n do { цикл, пока не найдено n-е число }
    begin      a:=b+c;{вычисляем следующее число как сумму двух предыдущих }
               c:=b; { сдвигаем b в c для нахождения следующего числа }
               b:=a; { сдвигаем a в b для нахождения следующего числа }
               k:=k+1 { увеличиваем счетчик найденных чисел }
    end;
    write(a); { печатаем найденное число }
    Упражнения:
    1. Выполните трассировку фрагмента 28 для n=2,3,4.
    2. Дополните фрагмент 28 так, чтобы он правильно выдавал числа Фибоначчи
для любого n>=1.
    Пример 10.32. Пусть необходимо разработать фрагмент программы для
вычисления n-го члена последовательности, заданной формулой примера 10.26.
    Решение. Первые элементы этой последовательности будут иметь вид: u1=1;
u2=2; u3=u2=1; u4=u2=2; u5=u3=1 и т.д. Хотя в формуле используется два члена,
хранить нужно три соседних члена, поэтому используем следующие переменные:
А хранит uk, B хранит uk-1, C хранит uk-2. Программа представлена в фрагменте 29.
    { фрагмент 29 }
    c:=1;
    b:=2;
    k:=3;
    while k<=n do
    begin      a:=c;
               c:=b;
               b:=a;
               k:=k+1
    end;
    write(a);
    Упражнение. Решает ли фрагмент 29а ту же задачу, что и фрагмент 29?
Почему?
    { фрагмент 29а }
    if n mod 2 =0
    then a:=2
    else a:=1;