СДАМ ГИА: РЕШУ ЕГЭ
Образовательный портал для подготовки к экзаменам
Информатика
≡ информатика
сайты - меню - вход - новости




Задания
Версия для печати и копирования в MS Word
Задание 24 № 15146

Факториалом натурального числа n (обозначается n!) называется произведение всех натуральных чисел от 1 до n. Например, 4! = 1 · 2 · 3 · 4 = 24.

Дано целое положительное число A.

Необходимо вывести минимальное натуральное число K, для которого 1! + 2! + … + K! > A.

Для решения этой задачи ученик написал программу, но, к сожалению, его программа неправильная.

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

 

 

БейсикPython

DIM A, K, F, S AS INTEGER

INPUT A

K = 1

F = 1

S = 1

WHILE S <= A

    F = F * K

    K = K + 1

    S = S + F

WEND

PRINT K

END

a = int(input())

    k = 1

    f = 1

    s = 1

while s <= a:

    f *= k

    k += 1

    s += f

print(k)

ПаскальАлгоритмический язык

var a, k, f, s: integer;

begin

    read(a);

    k := 1;

    f := 1;

    s := 1;

    while s <= a do begin

        f := f * k;

        k := k + 1;

        s := s + f

    end;

    writeln(k)

end.

алг

нач

    цел a, k, f, s

    ввод a

     k := 1

     f := 1

     s := 1

     нц пока s <= a

         f := f * k;

         k := k + 1;

         s := s + f

     кц

     вывод k

кон

С++

#include <iostream>

using namespace std;

int main(){

     int a, k, f, s;

     cin >> a;

     k = 1;

     f = 1;

     s = 1;

     while (s <= a) {

        f *= k;

        ++k;

        s += f;

    }

    cout << k;

    return 0;

}

 

 

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

1. Напишите, что выведет эта программа при вводе A = 6.

2. Назовите минимальное A, большее 10, при котором программа выведет верный ответ.

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

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

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

Решение.

1. При вводе программа выведет число 4.

2. Минимальное при котором программа выдаёт верный ответ, равно 33. Программа выдаёт верный ответ 5. При вводе чисел от 11 до 32 программа выдаёт ответ 5 вместо верного ответа 4.

3. Программа содержит две ошибки.

1) Неверная инициализация. Значения переменных K и S не согласованы: эти переменные могут быть равны 1 и 0 или 2 и 1, но не 1 и 1. В результате этой ошибки текущее значение суммы всегда оказывается на 1 больше правильного.

2) Неверный порядок действий в цикле. В результате факториал и сумма факториалов вычисляются для предыдущего значения K. Поскольку менять строки местами не разрешается, для исправления ошибки нужно внести коррективы при выводе ответа.

 

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

 

Первая ошибка, способ 1:

k := 1;

Исправленная строка:

k := 2;

 

Первая ошибка, способ 2:

s := 1;

Исправленная строка:

s := 0;

 

Вторая ошибка:

writeln(k)

Исправленная строка:

writeln(k-1)

 

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

Незначительной опиской, не влияющей на оценку, следует считать отсутствие служебных слов и знаков после содержательной части исправления.