Блог репетитора по информатике

Задание 5 ЕГЭ по информатике

Задание 5 ЕГЭ по информатике отнсится к базовым. Предполгает проверку знаний систем счисления и базовых алгоритмов. В данный момент задание решается программно.

В этой статье я разберу старое базовое задание из досрочного варианта давно минувшего 2018 года.

 (Досрочный ЕГЭ-2018) На вход алгоритма подаётся натуральное число N. Алгоритм строит по нему новое число следующим образом.

  1.  Строится двоичная запись числа N.
  2. К этой записи дописываются справа ещё два разряда по следующему правилу: если N чётное, в конец числа (справа) дописываются два нуля, в противном случае справа дописываются две единицы. Например, двоичная запись 1001 числа 9 будет преобразована в 100111.

Полученная таким образом запись (в ней на два разряда больше, чем в записи исходного числа N) является двоичной записью числа – результата работы данного алгоритма. Укажите минимальное число N, для которого результат работы алгоритма будет больше 115. В ответе это число запишите в десятичной системе счисления.

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

  • первый - реализуем часть описанного алгоритма, где идёт преобразование числа;
  • второй - тестирование и отладка программы, созданной на первой этап
  • треитй -  поиск по условию задачи ответа (в данной задачи определение минимального r).

Первый этап

Сначала реализуем блок алгоритма, который описан в пунктах 1, 2 для одного КОНКРЕТНОГО числа. Это нужно, чтобы отследить ошибки, если они будут. Назовём этот блок "БЛОК ПРЕОБРАЗОВАНИЯ числа N в R "

Пункт 1. Строится двоичная запись числа. Это действие можно выполнить двумя способами.

Вариант 1. Форматная строка Вариант 2. Функция
d=f'{n:b}' d=bin(n)[2]

В любом случае в результате в переменную d запишется строка с двоичным представлением числа n

Пункт 2. К этой записи дописываются справа ещё два разряда по следующему правилу: если N чётное, в конец числа (справа) дописываются два нуля, в противном случае справа дописываются две единицы.

❗Читаем  условие очень внимательно!!! Большая доля ошибок в 5 задании из-за неправильного понимания и чтения именно этой части задачи.

"К этой записи" - значит нужно работать с переменной d, в которую записали двоичное представление исходно числа.

"Дописывается справа" - значит к строке d приписываем требуемую комбинацию символов.

Справа от строки Cлева от строки
d = d+'###' d =  '###'+d

"Если число N четное" - N -исходное десятичное число. Проверяем на чётность значение перменной n. Видим во фразе слово ЕСЛИ, значит нужно использовать оператор ветвления if

Блок-схема первого этапа БЛОК ПРЕОБРАЗОВАНИЯ числа N в R 

bloc_if_5

Программа на данном этапе будет выглядеть так:

n=25 #задаём исходное число для проверки алгоритма
d=f'{n:b}'  #пункт 1. Перевод в двоичнудю с.с, d - строка
if n%2==0:  #пункт 2. Если число n - четное
    d=d+'00'  #если условие истинно, то справа к d приписываем '00'
else:        #иначе, то есть когда условие n%2==0 ложно 
    d=d+'11' # иначе дописываем к d '11
r =int(d,2) #переводим в 10с.с
print(r)  #выводим на экран r для тестирования  

 

Второй этап

Выплняем тестирование программы с данными, которые приведены в условии задачи или выбиаем значения для проверки самостоятельно, выполнив описанные в задачи пункты в ручную.

Так как  по условию данной задачи n  может быть чётным и нечётным, значит для проверки нужно взять два значения и выполнить действия вручную (на калькуляторе) и сравнить со значениями, которые выведет программа.

n 25 28
r вычислено вручную 100 163
r выведено программой 100 163

Если результаты совпали, значит переходим к выполнению третьего этапа. Если значения отличаются, но нужно проверить: правильность понимания условия задачи, правильность ручного вычисления и, конечно, проверяем код программы.

Третий этап

В программе нужно убрать строки, в которых в n записывается число и выводится значение r.

По условию задачи нужно перебрать какое-то количество натуральных чисел N. Перебор значений n от a до b выполняется в цикле for. Значение a,b - зависят от условия задачи. В нашем случае так как n- натуральное число, то a=1, b =1000. В ходе тестирования программы b - можно увеличивать или уменьшать.

В цикл сначала ставим наш блок, созданный ранее. После вычисления r в цикле, значение r нужно сначала сравнить с пороговым значением (в нашем случае r должно быть больше 115).

if r>115:

Если это условие выполняется, то r сравниваем с текущим минимальным значением r_min на минимум (определяем минимальное): если г<r_min, то r_min станет равен r, иначе r_min сохранит старое значение

r_min=min(r_min, r)

После завершения работы цикла выводим на экран r_min

r_min=10_000 # инициализация r_min. Записываем значение, которе превосходит r обязательно.
for n in range(1,1000): #n изменяется от a=1 до b=1000-1
  d=f'{n:b}'  #пункт 1. Перевод в двоичнудю с.с, d - строка
  if n%2==0:  #пункт 2. Если число n - четное
      d=d+'00'  #если условие истинно, то справа к d приписываем '00'
  else:        #иначе, то есть когда условие n%2==0 ложно 
      d=d+'11' # иначе дописываем к d '11
  r =int(d,2) #переводим в 10с.с
  if r>115:  #фильтруем r. Нужны только те, которые >115
    r_min=min(r_min, r) #определяем текущий минимум 
print(r_min)  #выводим на экран r_min за циклом!!! Внимательно к отступам

Выполняем отладку программы, проверяем правильность записанных условий. Запускаем программу и получем ответ. Если программа ответ не выдала, то возможно нужно измениь диапазон входных значений n.

❗Убедитесь, что при увеличении n ответ не изменяется.

Задача решена.
Есть вопросы?

Пишите и подписывайтесь на мой канал в "Репетитор по информатике Анна Воробьева"