ЕГЭ информатика

Курс «Подготовка к ЕГЭ по информатике»
1 сентября 2020, 08:00 - 31 декабря 2020, 00:00, В разработке
Соснина Тамара Петровна

Анализ программы с циклами и условными операторами

ЕГЭ 22. Анализ программы, содержащей циклы и ветвления

Для решения данного задания необходимо понимать, как работают циклические алгоритмы, содержащие условия.

Задачи содержат готовые алгоритмы:

  • перевод чисел в другие системы счисления;
  • нахождение суммы цифр числа;
  • поиск минимальной и максимальной цифры целого числа;
  • поиск НОД двух чисел и другие

    В алгоритмах часто используются операции целочисленного деления (div) и взятия остатка (mod).

 

Задание 1. (работа с цифрами числа)

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

Рассмотрим алгоритм на языке Паскаль:

var x, M, L: integer;

begin

    readln(x);

    M := 0; L := 0;

    while x > 0 do

    begin

        M := M + x mod 10;

        if x mod 10 > L then

            L := x mod 10;

        x := x div 10

    end;

    writeln(L); write(M)

end.

Проанализируем программу, учитывая, что операция:

 x mod 10 выделяет последнюю цифру в числе,

x div 10 отбрасывает последнюю цифру в числе.

Попробуем понять основную идею данной программы.  

В начале с клавиатуры ввели какое-то число в переменную x.

Затем начинается ЦИКЛ while.

Пока x > 0, будет выполняться тело ЦИКЛА.

Внутри ЦИКЛА к переменной M прибавляется с каждой итерацией ЦИКЛА последняя цифра введённого числа x.

Далее идёт условие. Если последняя цифра x больше, чем предыдущее значение переменной L, то эта цифра становится новым значением переменной L. Таким образом, в переменной L окажется самая большая цифра числа x.

Следующая и последняя команда внутри тела ЦИКЛА: x := x div 10, просто отбрасывает последнюю цифру числа x.

Таким образом, мы берём последнюю цифру, прибавляем её к переменной M, а затем отбрасываем эту цифру. И так будет происходить, пока x > 0 (пока у числа будут цифры).

Переменная  L будет содержать  самую большую цифра числа x.

По условии задачи L = 8, а M =13. Т.е. самая большая цифра числа x должна быть 8, а сумма всех цифр числа x должна быть 13.

Наименьшее число x получается 58.

Ответ: 58

Задача 2. (перевод в позиционных системах счисления)
Ниже на четырёх языках записан алгоритм. Получив на вход число x, этот алгоритм печатает два числа: a и b. Укажите наименьшее из таких чисел x, при вводе которого алгоритм печатает сначала 3, а потом 2

var x, a, b: integer;

    begin

    readln(x);

    a:=0; b:=0;

    while x>0 do

    begin

        a:=a + 1;

        if b < (x mod 8)

        then

            b:=x mod 8;

        x:=x div 8;

    end;

    writeln(a); write(b);

end.

Решение:
В этой задаче внутри ЦИКЛа while к переменной a прибавляется 1 с каждой итерацией.

Так же есть условие, благодаря которому, в переменной b будет наибольший остаток от деления числа x на 8. Причём с каждой итерацией число x уменьшается в 8 раз, при этом используется команда целочисленного деления  x:=x div 8.

Вспоминаем, как мы переводим число в восьмеричную систему из десятичной системы? Мы делим число  на 8 и собираем остатки! Здесь та же самая картина! Получается, что выражение x mod 8 будет по очереди находить все цифры восьмеричной записи числа x.   А в переменной b окажется самая большая цифра числа x в восьмеричной системе.

Значит, мы должны получить значение переменной x сначала в восьмеричной системе, где самая большая цифра будет 2, а количество цифр в восьмеричной записи будет 3 (переменная a).

Это  число x = 1028.

Переводим число в десятичную систему и записываем ответ. 1028 -> 6610.

Ответ: 66


Форма отчёта обучающегося: Нет работы

Работы не принимаются в цифровой форме

Для отправки работы необходимо авторизоваться на сайте!