Задание 20

ТЕМА 20

"Анализ алгоритма, содержащего цикл и ветвление"

Пример 1

Ниже записана программа. Получив на вход некоторое число x , эта программа печатает последовательно два числа, L и M. Укажите наименьшее из таких чисел x, при вводе которых программа напечатает сначала 6, а потом 8.

Решение

(на примере языка Паскаль)

Программа в результате обработки числа x выводит на печать два значения: L и M. Причем необходимо определить наименьшее x, при котором L = 6 и M = 8.

В программе реализован цикл пока, внутри которого размещено ветвление. Цикл работает пока введенное вначале программы число x > 0.

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

Так как в результате L = 6, а в цикле эта переменная каждый раз увеличивается на 2 (L := L + 2), то значит цикл срабатывает 3 раза. Это означает, что введенное число x – трехзначное.

Условие записанное в цикле: if M < x then M := x mod 10 – сработает 2 раза. В нем определяется остаток от деления числа x на 10 (последняя цифра числа x). В результате первой проверки условия переменная M может быть любой цифрой (соответствует третей цифре в записи искомого числа). Во время второго выполнения условия переменная M должна получить значение равное 8 (по условию задачи M = 8), так как это последнее значение переменной выводимое на экран. Поэтому вторая цифра искомого числа должна быть равна 8.

Так как число должно быть наименьшим из искомых, значит на первом месте должна быть цифра 1, а на последнем 0.

Следовательно, таким наименьшим трехзначным числом является число 180.

Ответ: 180

Пример 2

Ниже на пяти языках программирования записан алгоритм, который вводит натуральное число x, выполняет преобразования, а затем печатает числа: L и M. Укажите наибольшее из таких чисел x, при вводе которого после выполнения алгоритма будет напечатано сначала 3, а потом 6

Решение

(на примере языка Паскаль)

Программа в результате обработки числа x выводит на печать два значения: L и M. Причем необходимо определить наименьшее x, при котором L = 3 и M = 6. В программе реализован цикл пока, внутри которого размещено ветвление. Цикл работает пока введенное вначале программы число x > 0.

Так как M = 6, значит цикл работает 6 раз. Поэтому необходимо определить шестизначное двоичное число, так как в цикле с каждым шагом происходит деление исходного числа на 2 (x := x div 2).

Условие в цикле: if x mod 2 <> 0 then L := L + 1 – выполнится 3 раза, так как L = 3.

x mod 2 <> 0 – означает остаток от деления числа x на 2 не равен нулю, значит 3 цифры «1» присутствует в двоичной записи искомого числа. В задаче требуется определить наибольшее такое число, значит, эти три единицы должны стоять в старших разрядах, а остальные разряды будут равны нулю.

Значит это число равно 1110002 = 5610

Ответ: 56

Комментарии, отзывы и предложения Вы можете направить на e-mail, указанный в контактах или оставить в гостевой книге, указав тему вопроса: перейти в гостевую книгу