Категория C1 • задача №4
Условие задачи
Дано:
из заданного натурального числа А получить число В, поменяв порядок цифр на обратный. Программист торопился и написал программу неправильно:
a, b: integer;
begin
write(‘Введите натуральное число‘);
read(a);
b := a mod 10;
if a > 10 then
while a > 10 do
begin
a := a div 10;
b := b*10 + a mod 10;
end;
write(‘Новое число ‘, b);
end.
Найти:
приведите пример таких исходных данных, при которых программа работает неправильно;
укажите, как нужно доработать программу, чтобы не было случаев ее неправильной работы.
Решение
I этап: алгоритмическая часть
Рассмотрим решение данной задачи графико-аналитическим способом. Предположим, что пользователь ввел с клавиатуры число 8403, то есть А = 8403. Необходимо получить на выходе число В равное 3048. Построим и заполним процессинговую таблицу получения из числа А числа В:
№ операции | Значение А | Значение В |
1 | 8403 | 0 |
2 | = 8403 / 10 = 840 | = 0 · 10 + 3 = 3 |
3 | = 840 / 10 = 84 | = 3 · 10 + 0 = 30 |
4 | = 84 / 10 = 8 | = 30 · 10 + 4 = 304 |
5 | = 8 / 10 = 0 | = 304 · 10 + 8 = 3048 |
Расчет завершен, так как переменная А приняла значение равное 0, а переменная В имеет значение, состоящее из цифр начального значения переменной А, но идущих в обратном порядке.
То есть алгоритм заключается в том, чтобы получить у значения переменной А последнюю цифру и текущее значение переменной В умножить на десять и добавить последнюю цифру числа А. Затем физически устранить последнюю цифру из значения числа А. Данные действия повторять до тех пор, пока значение переменной не станет равным нулю.
II этап: отвечаем на вопросы, поставленные в условии задачи
Если подставить значение переменной А равное 109, то в итоге переменная В примет значение равное 90, что является некорректным результатом. Подобное легко объяснить. Цикл работает по условию (a > 10), а не по условию (a > 0), следовательно, самая левая цифра у значения переменной А не будет обработана.
В целом, любое натуральное число, начинающееся с "10" приведет к неправильному результату.
III этап: доработка исходной программы, используя язык программирования Pascal 7.0.
var
{хранит значение входного числа}
a : integer;
{хранит значение выходного числа}
b : integer;
{начало главного блока программы}
begin
{диалог пользователю о предстоящем вводе}
write('Введите натуральное число: ');
{считывание с клавиатуры входного числа}
readln(a);
{изначально значение выходной переменной должно быть равно 0}
b := 0;
{пока значение переменной А "не выродилось" в ноль начинается цикл}
while(a > 0) do
begin
{текущее значение переменной В умножается на десять и добавляется значение самой правой цифры переменной А}
b := b * 10 + a mod 10;
{отбрасывается самая правая цифра у значения переменной А}
a := a div 10;
end;
{вывод на экран полученного значения}
write('Новое число: ', b);
{финализирующий оператор программы}
end.
Категория C1 • задача №4
Остальные решения из билета №4 для подготовки к ЕГЭ по информатике 2013
Условие задачи (наведите курсор мыши на ссылку) |
Аудиовизуальное решение |
Мультимедийная видеопрезентация |
Решение в формате слайд-шоу |
Текстовое решение |
---|
Комментарии