Найти тему

ЕГЭ 13 информатика: как решать?

Оглавление

Согласно спецификации тематика тринадцатого задания из ЕГЭ по информатике 2024 затрагивает организацию компьютерных сетей, адресацию, протоколы передачи данных.

Рассмотрим как решать 13 задание ЕГЭ (информатика на Python).

Разберём задания, аналогичные заданиям из сборника С.С. Крылова 2024 года.

Типаж № 1: Количество адресов/узлов, удовлетворяющих условию

(№ 7040 с сайта К.Ю. Пoлякoвa) (M. Ишимoв) В терминологии сетей TCP/IP маской сети называют двоичное число, которое показывает, какая часть IP-адреса узла сети относится к адресу сети, а какая - к адресу узла в этой сети. Адрес сети получается в результате применения поразрядной конъюнкции к заданному адресу узла и маске сети. Сеть задана IP-адресом 186.135.80.0 и маской сети 255.255.252.0. Сколько в этой сети IP-адресов, для которых в двоичной записи IP-адреса суммарное количество единиц в левых двух байтах больше суммарного количества единиц в правых двух байтах?

С помощью функции ip_network по IP-адресу и маске создадим сеть, после чего переберём в ней все возможные IP-адреса.

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

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

При решении задач этого типа надо хорошо понимать какие индексы у того или иного символа. В упорядоченных коллекциях, к которым относятся строки, каждое значение автоматически получает свой номер — индекс. Индексация в коллекциях Python начинается со значения 0.

Индексация строк в Python
Индексация строк в Python

Значит для подсчёта количества единиц в левых двух байтах необходимо взять в расчёт символы с индексами от 0 до 15 включительно. Обращаю ваше внимание на то, что срез нужно делать до 16 индекса, так как в срезах правая сторона не учитывается.

-3

Рядом с IP-адресом вывел количество единиц в левых и правых байтах, чтобы убедиться, что условие записано верно.

Теперь можно добавить счётчик подходящих адресов.

Итоговый код выглядит так:

Ответ на задачу № 1: 848.
Ответ на задачу № 1: 848.

(№ 7029 с сайта К.Ю. Пoлякoвa) (M. Ишимoв) В терминологии сетей TCP/IP маской сети называют двоичное число, которое показывает, какая часть IP-адреса узла сети относится к адресу сети, а какая - к адресу узла в этой сети. Адрес сети получается в результате применения поразрядной конъюнкции к заданному адресу узла и маске сети. Сеть задана IP-адресом 99.64.0.0 и маской сети 255.192.0.0. Сколько в этой сети IP-адресов, двоичная запись которых оканчивается на две единицы?

Первая часть программы ничем не отличается от предыдущей задачи: создаём сеть и перебираем в ней адреса.

-5

Вспомним, что индексировать элементы можно с конца, тогда они имеют отрицательные индексы.

Индексация строк в Python с конца
Индексация строк в Python с конца

Чтобы проверить последние два символа сделаем соответствующий срез.

Итоговый код выглядит так:

Ответ на задачу № 2: 1048576.
Ответ на задачу № 2: 1048576.

(№ 6844 с сайта К.Ю. Пoлякoвa) (K. Бaгдaсapян) В терминологии сетей TCP/IP маской сети называют двоичное число, которое показывает, какая часть IP-адреса узла сети относится к адресу сети, а какая - к адресу узла в этой сети. Адрес сети получается в результате применения поразрядной конъюнкции к заданному адресу узла и маске сети. Сеть задана IP-адресом 202.75.38.176 и маской сети 255.255.255.240. Сколько в этой сети IP-адресов, у которых в двоичной записи IP-адреса никакие три единицы или три нуля не стоят рядом?

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

Ответ на задачу № 3: 5.
Ответ на задачу № 3: 5.

Обратите внимание на нюанс, который может повлечь за собой ошибку: «никакие три единицы ИЛИ три нуля не стоят рядом». Нельзя бездумно переписывать условие, его обязательно нужно осмысливать. Здесь с точки зрения русского языка имеется ввиду, что и трёх единиц быть не может и трёх нулей, поэтому используем логический оператор and.

Типаж № 2: Поиск неизвестного значения байта

(№ 7048 с сайта К.Ю. Пoлякoвa) (M. Ишимoв) В терминологии сетей TCP/IP маской сети называют двоичное число, которое показывает, какая часть IP-адреса узла сети относится к адресу сети, а какая - к адресу узла в этой сети. Адрес сети получается в результате применения поразрядной конъюнкции к заданному адресу узла и маске сети. Сеть, в которой содержится узел с IP-адресом 159.242.A.223, задана маской сети 255.255.254.0, где A – некоторое допустимое для записи IP-адреса число. Определите максимальное значение A, для которого для всех IP-адресов этой сети в двоичной записи IP-адреса суммарное количество нулей в левых двух байтах меньше суммарного количества нулей в правых двух байтах.

Когда нам что-то неизвестно, мы чаще всего ищем это перебором. Тогда будем перебирать все возможные значения А от 0 до 255 включительно.

Когда мы видим формулировку "для всех ..." сразу приходит в голову, что здесь будет уместно решение с помощью функции all() для генератора списка.

-9

Программа выдаёт ошибку. Дело в том, что для создания сети нам нужен адрес сети, а у нас есть только IP-адрес узла, который согласно условию находится в необходимой сети.

Но мы можем создать сеть и по данному узлу и маске. Для этого в функцию ip_network() передаём строку, содержащую IP-адрес узла, маску, а через запятую вторым аргументом 0. Этот ноль говорит о том, что если в адресе узла есть единицы, то их следует обнулить и создать сеть.

Добавим 0 в код нашей программы и убедимся, что теперь всё работает.

Ответ на задачу № 4: 129.
Ответ на задачу № 4: 129.

(№ 7045 с сайта К.Ю. Пoлякoвa) (M. Ишимoв) В терминологии сетей TCP/IP маской сети называют двоичное число, которое показывает, какая часть IP-адреса узла сети относится к адресу сети, а какая - к адресу узла в этой сети. Адрес сети получается в результате применения поразрядной конъюнкции к заданному адресу узла и маске сети. Сеть, в которой содержится узел с IP-адресом 250.113.A.197, задана маской сети 255.255.255.192, где A – некоторое допустимое для записи IP-адреса число. Определите максимальное значение A, для которого для всех IP-адресов этой сети в двоичной записи IP-адреса суммарное количество единиц в левых двух байтах не менее суммарного количества единиц в правых двух байтах.

Аналогичная задача, просто ещё раз потренируемся. Заодно вспомним, что "не менее" означает "больше или равно". Решение задачи сделаю через список.

Ответ на задачу № 5: 192.
Ответ на задачу № 5: 192.

(№ 7042 с сайта К.Ю. Пoлякoвa) (M. Ишимoв) В терминологии сетей TCP/IP маской сети называют двоичное число, которое показывает, какая часть IP-адреса узла сети относится к адресу сети, а какая - к адресу узла в этой сети. Адрес сети получается в результате применения поразрядной конъюнкции к заданному адресу узла и маске сети. Сеть, в которой содержится узел с IP-адресом 108.8.190.123, задана маской сети 255.255.A.0, где A – некоторое допустимое для записи маски число. Определите минимальное значение A, для которого для всех IP-адресов этой сети в двоичной записи IP-адреса суммарное количество единиц в левых двух байтах не более суммарного количества единиц в правых двух байтах.

Делаем всё как и в предыдущей задаче и получаем ошибку.

-12

Дело в том, что маска представляет собой последовательность из единиц и следующих за ними нулей (1111111.......0000...0000), поэтому не каждое число из диапазона подойдёт под этот формат. Чтобы вручную не проверять корректность создаваемой маски, воспользуемся конструкцией try-except.

В блоке try мы пробуем создать сеть. Если операция успешно выполняется, то продолжают выполняться команды из блока. А если происходит ошибка, то блок try прерывается и программа переходит в блок except.

Рассмотрим на простом примере.

Конструкция try except в Python
Конструкция try except в Python

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

Ответ на задачу № 6: 252.
Ответ на задачу № 6: 252.

Типаж № 3: Работа с маской: определение количества единиц/нулей и наибольших значений байта

(№ 7018 с сайта К.Ю. Пoлякoвa) (M. Ишимoв) В терминологии сетей TCP/IP маской сети называют двоичное число, которое показывает, какая часть IP-адреса узла сети относится к адресу сети, а какая - к адресу узла в этой сети. Адрес сети получается в результате применения поразрядной конъюнкции к заданному адресу узла и маске сети. Для узла с IP-адресом 151.168.147.193 адрес сети равен 151.168.147.128. Каково наибольшее возможное количество единиц в двоичной записи маски?

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

Не забываем выполнять проверку возможности создания сети с помощью конструкции try-except.

Ответ на задачу № 7: 25.
Ответ на задачу № 7: 25.

Так как в цикле мы перебираем количество единиц в маске (от 0 до 32), то и для вывода нам достаточно только переменной mask.

(№ 7020 с сайта К.Ю. Пoлякoвa) (M. Ишимoв) В терминологии сетей TCP/IP маской сети называют двоичное число, которое показывает, какая часть IP-адреса узла сети относится к адресу сети, а какая - к адресу узла в этой сети. Адрес сети получается в результате применения поразрядной конъюнкции к заданному адресу узла и маске сети. Для узла с IP-адресом 193.22.209.132 адрес сети равен 193.22.209.128. Каково наименьшее возможное количество нулей в двоичной записи маски?

Задание решается аналогичным образом, только в выводе мы будем указывать 32-mask. Так как всего в маске 32 символа, включающие только нули и единицы, то если из тридцати двух вычесть количество единиц, то получим количество нулей. Среди найденных чисел выберем наименьшее.

Ответ на задачу № 8: 3.
Ответ на задачу № 8: 3.

(№ 255 с сайта К.Ю. Пoлякoвa) Для узла с IP-адресом 215.181.200.27 адрес сети равен 215.181.192.0. Чему равно наибольшее возможное значение третьего слева байта маски? Ответ запишите в виде десятичного числа.

Если мы будем выводить маску способом из предыдущей задачи, то находить ответ на вопрос из условия нам придётся аналитически.

-17

Получить маску в виде десятичного числа поможет метод netmask.

Ответ на задачу № 9: 240.
Ответ на задачу № 9: 240.

Таким образом мы видим, что наибольшее значение третьего слева байта 240. Это число и дадим в ответ.

(№ 7037 с сайта К.Ю. Пoлякoвa) (M. Ишимoв) В терминологии сетей TCP/IP маской сети называют двоичное число, которое показывает, какая часть IP-адреса узла сети относится к адресу сети, а какая - к адресу узла в этой сети. Адрес сети получается в результате применения поразрядной конъюнкции к заданному адресу узла и маске сети. Для узла с IP-адресом 111.7.92.52 адрес сети равен 111.7.92.32. Чему равно наименьшее возможное значение последнего (самого правого) байта маски?

Для закрепления рассмотрим ещё одну задачу.

Ответ на задачу № 10: 224.
Ответ на задачу № 10: 224.

Вот такими задачами представлено задание 13 ЕГЭ информатика 2024.

Успешной подготовки!

Наука
7 млн интересуются