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




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

Для заданного положительного вещественного числа A необходимо найти максимальное целое число K, при котором выполняется неравенство

(при K = 0 сумма считается равной 0).

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

 

Бейсик Python

DIM A, S AS DOUBLE

DIM K AS INTEGER

INPUT A

K = 0

S = 1

WHILE S < A

    K = K + 1

    S = S + 1.0/K

WEND

PRINT K

END

a = float(input())

k = 0

s = 1

while s < a:

    k = k + 1

    s = s + 1.0/k

print(k)

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

алг

нач

    вещ a, s

    цел k

    ввод a

    k := 0

    s := 1

    нц пока s<a

        k := k + 1

        s := s + 1.0/k

    кц

    вывод k

кон

var a, s: real;

k: integer;

begin

    read(a);

    k := 0;

    s := 1;

    while s<a do begin

        k := k + 1;

        s := s + 1.0/k;

    end;

    write(k);

end.

Си++

#include <iostream>

using namespace std;

int main(){

    double a, s;

    int k;

    cin >> a;

    k = 0;

    s = 1;

    while (s<a) {

        k = k + 1;

        s = s + 1.0/k;

    }

    cout « k « endl;

    return 0;

}

 

 

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

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

2. Приведите пример числа, при вводе которого программа даст верный ответ.

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

Для каждой ошибки выпишите строку, в которой она допущена, и приведите эту же строку в исправленном виде.

Обратите внимание: вам нужно исправить приведённую программу, а не написать свою. Вы можете только исправлять ошибочные строки; удалять строки или добавлять новые строки нельзя. Постарайтесь также не внести новые ошибки – за это оценка снижается.

Решение.

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

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

2. Примеры чисел, при вводе которых программа выводит верный ответ: 0.6, 1.4.

Примечание для проверяющего. Программа содержит две ошибки, одна из которых приводит к увеличению ответа, другая – к уменьшению.

В некоторых случаях эти ошибки компенсируют друг друга, и ответ оказывается правильным. Это происходит, если 0 < A ≤ 1.5.

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

1) Неверная инициализация. Начальные значения S и K должны быть одинаковы: оба равны нулю или оба равны единице. В приведённом варианте вычисленная сумма оказывается на 1 больше правильного значения. Эту ошибку можно исправить двумя способами.

Первый способ исправления:

Строка с ошибкой:

s := 1;

Правильная строка:

s := 0;

Второй способ исправления:

Строка с ошибкой:

k := 0;

Правильная строка:

k := 1;

 

2) Неверное определение ответа. Приведённая программа находит не максимальное K, при котором выполняется неравенство, а минимальное, при котором оно не выполняется, то есть увеличивает верное значение на 1. Эту ошибку можно исправить двумя способами: скорректировать значение при выводе или использовать «предварительное вычисление» в условии цикла.

Первый способ исправления:

Строка с ошибкой:

write(k);

Правильная строка:

write(k-1);

Второй способ исправления:

Строка с ошибкой:

while s < a do begin

Правильная строка:

while s+1/(k+1) < a do begin

Второй способ исправления возможен, только если первая ошибка была исправлена первым способом, то есть использована инициализация нулями.

При инициализации единицами минимально возможный ответ оказывается равным 1, в то время как при A < 1 правильный ответ 0. Первый способ исправления работает независимо от того, как исправлена первая ошибка.

В программах на других языках ошибочные строки и их исправления аналогичны. При использовании второго способа исправления второй ошибки на языке Си следует обратить внимание на типы данных при делении: чтобы результат получился правильного типа (вещественный), необходимо обеспечить, чтобы хотя бы один из операндов деления был

вещественным.

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