Сайт Богданова Дмитрия Валериевича

Задание №1701/24

Задание

Числа Фибоначчи задаются рекуррентным соотношением \(f\left(0\right)=0\), \(f\left(1\right)=1\) и \(f\left(n\right)=f\left(n-2\right)+f\left(n-1\right)\) для всех целых \(n\geq 0\). Требовалось написать программу, которая по входному целому неотрицательному значению \(n\), не превосходящему 20, определяет соответствующее число Фибоначчи \(f\left(n\right)\). Приведённая ниже программа содержит ошибки.

  • Копировать
    var
      n, i, f, fn : integer;
    begin
      read(n);
      fn := 1;
      f := 1;
      for i := 1 to n do begin
        f := f + fn;
        fn := f - fn
      end;
      write(fn - 5)
    end.
    
  • Копировать
    #include <stdio.h>
    
    void main() {
      int n, i, fn, f;
      scanf("%d", &n);
      fn = 1;
      f = 1;
      for (i = 1; i <= n; i++) {
        f = f + fn;
        fn = f - fn;
      }
      printf("%d", fn - 5);
    }
    
  • Копировать
    DIM N, I, F, FN AS INTEGER
    INPUT N
    FN = 1
    F = 1
    FOR I = 1 TO N
      F = F + FN
      FN = F - FN
    NEXT I
    PRINT FN - 5
    
  • Копировать
    n = int(input())
    fn = 1
    f = 1
    for i in range(1, n + 1) :
      f = f + fn
      fn = f - fn
    print(fn - 5)
    

Последовательно выполните следующее.

1) Напишите, что выведет эта программа при вводе числа 4.

2) Укажите значение входной переменной \(n\), при котором программа выведет верный ответ.

3) Найдите в программе все ошибки (их может быть одна или несколько). Для каждой ошибки выпишите строку, в которой она допущена, и приведите эту же строку в исправленном виде.

Достаточно указать ошибки и способ их исправления для одного языка программирования. Обратите внимание: необходимо исправить приведённую программу, а не написать свою. Требуется заменить только ошибочные строки, но нельзя удалять строки или добавлять новые. За исправления, внесённые в строки, не содержащие ошибок, баллы будут снижаться.

Решение

Подробнее...

Ответ

1) При входном значении \(n=4\) программа выведет число 0.

2) Программа выведет правильный ответ, равный 8, только при входном значении \(n=6\).

3) Программа содержит две ошибки: неверную инициализацию переменной \(f\) и неверный вывод результата.

Пример исправления на языке Паскаль

Первая ошибка
Строка, содержащая ошибкуИсправленная строка
f := 1;
f := 0;
Вторая ошибка
Строка, содержащая ошибкуИсправленная строка
write(fn - 5)
write(f)

Другой вариант исправления на языке Паскаль

Первая ошибка
Строка, содержащая ошибкуИсправленная строка
fn := 1;
fn := 0;
Вторая ошибка
Строка, содержащая ошибкуИсправленная строка
write(fn - 5)
write(fn)

В программах на других языках ошибочные строки и их исправления аналогичны.

Подробнее...
Добавить комментарий
Комментарии (0)