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

