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


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

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

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

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

 

Бейсик Python

DIM A, S AS DOUBLE

DIM K AS INTEGER

INPUT A

K = 1

S = 1

WHILE S < A

    S = S + 1.0/K

    K = K + 1

WEND

PRINT K

END

a = float(input())

k = 1

s = 1

while s < a:

    s = s + 1.0/k

    k = k + 1

print(k)

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

алг

нач

    вещ a, s

    цел k

    ввод a

    k := 1

    s := 1

    нц пока s<a

        s := s + 1.0/k

        k := k + 1

    кц

    вывод k

кон

var a, s: real;

k: integer;

begin

    read(a);

    k := 1;

    s := 1;

    while s<a do begin

        s := s + 1.0/k;

        k := k + 1;

    end;

    write(k);

end.

Си++

#include <iostream>

using namespace std;

int main(){

    double a, s;

    int k;

    cin >> a;

    k = 1;

    s = 1;

    while (s<a) {

        s = s + 1.0/k;

        k = k + 1;

    }

    cout « k « endl;

    return 0;

}

 

 

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

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

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

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

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

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

Решение.

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

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

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

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

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

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

1) Неверная инициализация. Начальное значение S должно быть равно нулю.

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

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

        s := 1;

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

        s := 0;

2) Неверное определение ответа. Приведённая программа находит не максимальное K, при котором выполняется неравенство, а минимальное, при котором оно не выполняется, то есть увеличивает верное значение на 1.

Кроме того, использованный порядок действий в цикле (увеличение K после увеличения S) приводит к увеличению ещё на 1. Это можно было бы исправить, изменив порядок действий в цикле и уменьшив K после завершения цикла, но эти действия не разрешены по условию задачи.

Поэтому для исправления ошибки можно просто скорректировать значение при выводе.

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

        write(k);

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

        write(k-2);