Данил Душистов: «Решение 50 типовых задач по программированию на языке Pascal»
62
readln(n);
fib0 := 0;
fib1 := 1;
for i := 2
to n do begin
fib := fib1 + fib0;
fib0 := fib1;
fib1 := fib
end;
if n = 0 then fib1 := 0;
writeln(fib1);
Чтобы переделать этот код по текущему назначению, мы должны добавить в цикл прибавле-
ние найденного числа Фибоначчи к переменной
sum. Например, так:
for i := 2 to n do begin
fib := fib1 + fib0;
sum := sum + fib;
fib0 := fib1;
fib1 := fib
end;
Кроме того, следует исправить вывод ответа, так как нам необходимо вывести не последнее
найденное число Фибоначчи, а сумму найденных чисел:
writeln(sum);
Очевидно, что вход в цикл не происходит при
n = 0 и
n = 1. Следовательно, правильную обра-
ботку этих случаев мы должны обеспечить инициализацией значений переменной
sum, как мы это
делали в предыдущей задаче.
Так как сумма нулевого и 1-го чисел Фибоначчи равна 1, то
sum можно инициализировать
значением 1. При входе в цикл первые два числа уже обработаны,
поэтому при вводе n >= 2 накоп-
ление суммы также будет верным. Но очевидно, что в случае
n = 0 необходимо инициализировать
переменную
sum значением 0. Реализовать эти два варианта можно так:
if n = 0 then sum := 0 else sum := 1;
Код:
1.
program FibonacciNumbersSum;
2.
3.
var
4.
fib0, fib1, fib, sum: integer;
5.
i, n: byte;
6.
7.
begin
8.
readln(n);
9.
fib0 := 0;
10.
fib1 := 1;
11.
if n = 0 then sum := 0 else sum := 1;
12.
for i := 2 to n do begin
13.
fib := fib1 + fib0;
14.
sum := sum + fib;
15.
fib0 := fib1;
16.
fib1 := fib
17.
end;
18.
writeln(sum)
19.
end.