Examis Информатика 24


Дано натуральное число A, в записи которого нет нулей. Требуется найти минимальное двузначное число, которое можно увидеть в записи числа A. Например, для числа 815943 ответом будет число 15. Для решения этой задачи ученик написал программу, но, к сожалению, его программа неправильная.
Pascal
var A, n2: integer;
begin
read(A);
n2 := 10;
while A > 100 do begin
if A mod 100 < n2 then
n2 := A mod 100;
A := A div 100;
end;
writeln(n2);
end.
Последовательно выполните следующее.
1. Напишите, что выведет эта программа при вводе числа 1245.
2. Укажите одно значение A, при вводе которого программа выведет правильный ответ. Укажите это ответ.
3. Найдите в программе все ошибки (их может быть одна или несколько). Для каждой ошибки выпишите строку, в которой она допущена, и приведите эту же строку в исправленном виде.
Решение:
Смотрим, что происходит в программе, что означают конкретные переменные.А – число , которое пользователь вводит.
n2 – наименьшее двузначное число.Смотрим цикл в программе : while A > 100 do begin
if A mod 100 < n2 then
n2 := A mod 100;
A := A div 100;
end;
Пока введенное число больше 100, если две последние цифры больше, чем наименьшее двузначное число, то обновляем n2. И в конце забираем у исходного числа 2 последние цифры.
Так как в программе допущены ошибки, мы замечаем, что изначально наименьшее двузначное число – 10. И при любом значении введенной переменной на выходе мы получим 10.
10
По условию задачи в введенном числе нет нулей. А значит наименьшее двузначное число, которое мы могли бы получить – 11. А значит нет такого числа, чтобы мы могли увидеть в записи числа 10.
Нет таких чисел
При анализе данной программы мы заметили первую ошибку. Чтобы программа работала правильно, необходимо, чтобы граничное значение n2 было больше или равно минимальному возможному числу(99).
Вторую ошибку мы можем обнаружить также при анализе цикла: исходное число мы укорачиваем на две последние цифры, а не на одну. Таким образом, из тройки 199 мы сразу же получим 1(исключая 19).
Но если мы ввели 1199999, то мы ни разу не сравним первые две цифры с минимальным двузначным, а значит, мы нашли 3ю ошибку: число, получаемое на вход в цикл должно быть больше 10.

4 строка n2:=10; n2:=100;
5 строка while A > 100 do begin while A > 10 do begin
8 строка A := A div 100; A := A div 10;
Ответ: 1) 102) нет таких чисел
3)
4 строка n2:=10; n2:=100;
5 строка while A > 100 do begin while A > 10 do begin
8 строка A := A div 100; A := A div 10;
Примечания: в данном задании обычно 2 ошибки, но случаются ситуации, когда их 1-3. Следует быть внимательным с граничными значениями и с тем, что программа выводит. Алгоритм решения 24 задачи всегда такой: разбираемся в условии и алгоритме, делаем ручную трассировку числа. И отсюда в 90% случаях видны ошибки.
©EXAMIS 2018

Приложенные файлы

  • docx 19054292
    Размер файла: 19 kB Загрузок: 12

Добавить комментарий