Блог репетитора по информатике
Задание 5 ЕГЭ по информатике
Задание 5 ЕГЭ по информатике отнсится к базовым. Предполгает проверку знаний систем счисления и базовых алгоритмов. В данный момент задание решается программно.
В этой статье я разберу старое базовое задание из досрочного варианта давно минувшего 2018 года.
(Досрочный ЕГЭ-2018) На вход алгоритма подаётся натуральное число N. Алгоритм строит по нему новое число следующим образом.
- Строится двоичная запись числа N.
- К этой записи дописываются справа ещё два разряда по следующему правилу: если 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
Программа на данном этапе будет выглядеть так:
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 ответ не изменяется.
Задача решена.
Есть вопросы?
Пишите и подписывайтесь на мой канал в "Репетитор по информатике Анна Воробьева"