Даны целые числа A и B, 0 ≤ B ≤ A. Последовательно вычисляются значения A – 1, A – 1 – 2, A – 1 – 2 – 3 и т. д. Необходимо вывести наибольшее из этих значений, которое меньше B.
Для решения этой задачи ученик написал программу, но, к сожалению, его программа неправильная.
Ниже эта программа для Вашего удобства приведена на пяти языках программирования.
| Бейсик | Python |
|---|---|
DIM A,B,S,K AS INTEGER INPUT A, B IF NOT (0<=B AND B<=A) THEN PRINT "Неверные данные" ELSE S = A K = 0 WHILE S > B S = S - K K = K + 1 WEND PRINT K END IF END
| a = int(input()) b = int(input()) if not 0<=b<=a: print("Неверные данные") else: s = a k = 0 while s > b: s = s-k k = k+1 print(k)
|
| Паскаль | Алгоритмический язык |
var a, b, s, k: integer; begin read(a,b); if not ((0<=b) and (b<=a)) then writeln('Неверные данные') else begin s := a; k := 0; while s > b do begin s := s-k; k := k+1; end; writeln(k) end end.
| алг нач цел a, b, s, k ввод a, b если не 0<=b<=a то вывод "Неверные данные" иначе s := a k := 0 нц пока s > b s := s-k k := k+1 кц вывод k все кон |
| Си++ | |
#include <iostream> using namespace std; int main(){ int a, b, s, k; cin >> a >> b; if (!(0<=b && b<=a)) cout << "Неверные данные"; else { s = a; k = 0; while (s > b) { s = s-k; k = k+1; } cout << k; } return 0; }
| |
Последовательно выполните следующее.
1. Напишите, что выведет эта программа при вводе чисел 6 и 2.
2. Приведите пример таких значений A и B, при вводе которых программа выведет правильный числовой ответ.
3. Найдите в программе все ошибки (их может быть одна или несколько).
Для каждой ошибки выпишите строку, в которой она допущена, и приведите эту же строку в исправленном виде.
Достаточно указать ошибки и способ их исправления для одного языка программирования.
Обратите внимание: Вам нужно исправить приведённую программу, а не написать свою. Вы можете только заменять ошибочные строки, но не можете удалять строки или добавлять новые. Заменять следует только ошибочные строки: за исправления, внесённые в строки, не содержащие ошибок, баллы будут снижаться
1. При вводе указанных чисел программа выведет число 4.
2. Примеры значений A и B, при вводе которых программа выведет правильный числовой ответ: 6 и 4, 10 и 5, 15 и 6.
Комментарий для экспертов. Программа выводит значение K вместо S, при этом S =A – (1 + 2 + … (K – 1)). Отсюда понятно, как получить требуемые значения. Можно выбрать произвольное K > 2, взять A = 1 + 2 + … + K, и любое B из интервала K < B < 2K – 1. Ученик не обязан приводить это рассуждение, ему достаточно указать правильную пару A и B.
3. Программа содержит две ошибки: неверное условие цикла и неверный вывод результата
Пример исправления для языка Паскаль:
Первая ошибка:
while s > b do begin
Исправленная строка:
while s >= b do begin
Вторая ошибка:
writeln(k)
Исправленная строка:
writeln(s)
В программах на других языках ошибочные строки и их исправления аналогичны.
Незначительной опиской, не влияющей на оценку, следует считать отсутствие знаков и служебных слов после содержательной части исправления.

