Пример 4.4.
Числа Фибоначчи ( Fi ) определяются
по формулам F0 =
F1 = 1; Fi
= Fi –1 + Fi –2
при i = 2, 3, ... (каждое очередное число равно сумме двух предыдущих).
Вычислить сумму всех чисел Фибоначчи, которые не превосходят
заданного натурального числа М.
Тест
Номер теста
|
Данные
|
Результат
|
1
|
M=10
|
S=1+1+2+3+5+8=20
|
2
|
M=1
|
S=1+1=2
|
Демонстрация
Школьный АЯ
алг Фибоначчи (арг цел М, рез цел S)
дано | M>0
нач цел F0, F1, F2
F0:=1; F1:=1; F2:=2
S:=4 | 4 – сумма первых трех чисел Фибоначчи
нц пока F2<=M
F0:=F1; F1:=F2; F2:=F0+F1 | серия переприсваиваний
S:=S+F2;
кц
S:=S–F2 | из S вычитается последнее значение F2, превосходящее M
кон
Исполнение алгоритма
F0
|
F1
|
F2
|
S
|
F2<M
|
1
1
2
3
5
|
1
2
3
5
8
|
2
3
5
8
13
|
4
4+3=7
7+5=12
12+8=20
20+13=33
|
+
+
+
+
-(кц)
|
|
|
|
33-13=20
|
|
|
Блок-схема
|
Turbo Pascal
Program SummaFib;
Uses Crt;
Var M, {заданное число }
F0, F1, F2, {три последовательных числа Фибоначчи}
S : Integer; {сумма чисел Фибоначчи}
BEGIN
ClrScr;
Write(’Введите натуральное М : ’);
ReadLn(M);
F0:=1; F1:=1; F2:=2;
S:=4; {4 – сумма первых трех чисел Фибоначчи}
Write(’Числа Фибоначчи, не превосходящие ’, M, ’ :’, F0:4, F1:4);
While F2<=M do
begin
F0:=F1; F1:=F2; Write(F1 : 4);
F2:=F0+F1; S:=S+F2;
end;
S:=S–F2; {вычитание из суммы последнего числа, которое превосходит М}
WriteLn; WriteLn;
WriteLn(’О т в е т : Сумма этих чисел равна ’, S); ReadLn
END.
Результаты работы Pascal-программы
Введите натуральное M>0 : 10
<Enter>
Числа Фибоначчи, не превосходящие 10 :
1 1 2 3 5 8
О т в е т : Сумма этих чисел равна 20 |
QBasic
CLS
INPUT "Введите натуральное М : " , M
F0 = 1 : F1 = 1 : F2 = 2
S = 4 ’4 – сумма первых трех чисел Фибоначчи
PRINT "Числа Фибоначчи, не превосходящие "; M ; " : " ; F0 ; F1 ;
WHILE F2 <= M
F0=F1 : F1=F2 : PRINT F1;
F2=F0+F1 : S=S+F2
WEND
S=S–F2 ’вычитание из суммы последнего числа, которое превосходит М
PRINT : PRINT : PRINT "О т в е т : Сумма этих чисел равна "; S
END