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

 
 
 

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

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

Код программы:

var
    a, s : longint;
begin
    writeln(‘Введите число:);
    readln(a);
    s := 0;
    while a ≥ 10 do
        a := a div 10;
    s := s + 1;
    writeln(s);
end.

 

Найти:
последовательно  выполните  следующее:

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

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

 

Решение

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

Существует несколько алгоритмов для определения количества цифр (разрядов) заданного натурального числа. Воспользуемся самым распространенным из них (кстати, программист, пытавшийся решить эту задачу, именно этим алгоритмом и хотел воспользоваться).

Алгоритм заключается в следующем:

ЦИКЛ < до тех пор, пока исследуемое число больше нуля (или пока не будет равным нулю) выполняются действия >
начало цикла
    1. увеличивается счетчик цифр на единицу;
    2. от числа отсекается самая правая цифра (младший разряд числа).
конец цикла

Основную сложность вызывает тот факт, как отсечение самой правой цифры и, собственно, почему отсекается самая правая, а, например не самая левая цифра. Принято отсекать самую левую цифру, так как выполнить данную операцию достаточно просто, необходимо рассматриваемое число нацело разделить на 10 и взять целую часть от деления:

4561 : 10 = 456.1, берем целую часть и получаем число 456, то есть самый младший разряд, равный единице отброшен.

 

II этап: подбор входных данных для детерминации неточностей, допущенный программистом при написании программы

Детально разберем каждую строку предложенного фрагмента программы:

{раздел описания переменных}
var
{хранит входное число, количество цифр которого необходимо рассчитать}
    a : longInt;
{хранит количество цифр входного числа}
    s : longInt;
{начало главного блока программы}
begin
{диалог пользователю о предстоящем вводе информации}
    writeln(‘Введите число:);
{вводим натуральное число с клавиатуры для анализа}
    readln(a);
{обнуляем счетчик, отвечающий за количество цифр в числе}
    s := 0;
{пока анализируемое число не меньше 10}
    while a ≥ 10 do
{отбрасываем самую правую цифру у числа}
        a := a div 10;
{увеличиваем значение счетчика на единицу}
    s := s + 1;
{выпечатываем количество цифр числа на экран пользователя}
    writeln(s);
{финализирующий оператор программы}
end.

Очевидны становятся ошибки, допущенные разработчиком данной программы:

  1. цикл должен выполняться до тех пор, пока анализируемое число является положительным, то есть (a > 0);

  2. увеличение счетчика, отвечающего за количество цифр анализируемого числа вынесено за пределы цикла, то есть, оператор s := s + 1 будет выполняться лишь один раз, независимо от того, сколько цифр в исходном числе.

 

III этап: доработка исходной программы, используя язык программирования Turbo Pascal 7.0.

{раздел описания переменных}
var
{хранит входное число, количество цифр которого необходимо рассчитать}
    a : longInt;
{хранит количество цифр входного числа}
    s : longInt;
{начало главного блока программы}
begin
{диалог пользователю о предстоящем вводе информации}
    writeln(‘Введите число:);
{вводим натуральное число с клавиатуры для анализа}
    readln(a);
{обнуляем счетчик, отвечающий за количество цифр в числе}
    s := 0;
{пока анализируемое число является положительным}
    while a > 0 do
    begin
{отбрасываем самую правую цифру у числа}
        a := a div 10;
{увеличиваем значение счетчика на единицу}
        s := s + 1;
    end;
{выпечатываем количество цифр числа на экран пользователя}
    writeln(s);
{финализирующий оператор программы}
end.

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

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

 

Комментарии

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

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

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