Категория C1 • задача №4

 
 
 

Условие задачи

Дано:
из заданного натурального числа А получить число В, поменяв порядок цифр на обратный. Программист торопился и написал программу неправильно:

var
    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.

 

Найти:

  1. приведите    пример    таких    исходных    данных,   при которых программа работает неправильно;

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

 

Решение

I этап: алгоритмическая часть

Рассмотрим решение данной задачи графико-аналитическим способом. Предположим, что пользователь ввел с клавиатуры число 8403, то есть А = 8403. Необходимо получить на выходе число В равное 3048. Построим и заполним процессинговую таблицу получения из числа А числа В:

№ операцииЗначение АЗначение В
184030
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.

 
 
Рейтинг:
 
Проголосовало: 0
Количество просмотров: 1490
 
 
 

Категория C1 • задача №4

 

Комментарии

Для комментирования или зарегистрируйтесь
 

Остальные решения из билета №4 для подготовки к ЕГЭ по информатике 2013

 
Условие задачи
(наведите курсор мыши на ссылку)
Аудиовизуальное
решение
Мультимедийная
видеопрезентация
Решение в формате
слайд-шоу
Текстовое
решение
 
© 2011-2024 ООО "СтадиМен". Все права сохранены.
Перепечатка и использование материалов с данного сайта, разрешена только по согласию с владельцем.
Владелец оставляет за собой право воспользоваться 146 статьей УК РФ при нарушении авторских и смежных прав.
 
 
 
 
Авторизация на сайте
 
 
 
Обнаружили
ошибку на сайте?