Найти тему
Стив Май

Разбор ЕГЭ. Информатика. Задача №4

Оглавление

+Оглавление

Разбираем задачу №4 в ЕГЭ по информатике.

Обратите внимание, здесь будет не только пример решения, но и разбор задания по существу.

Для примера я беру демоверсию 2020 года (актуальная на момент написания статьи) с сайта fipi.ru.

Задание №4
Задание №4

Прежде чем приступать к решению этого примера, посмотрим в спецификацию к демоверсии.

Спецификация
Спецификация

Задание, как нам сообщается, требует знаний о файловых системах или о базах данных. Справедливости ради отмечу, что файловая система сама по себе является одной из разновидностей баз данных. Последние несколько лет, однако, встречаются только задания на базы данных, поэтому я буду разбирать именно эту теорию, но не стоит забывать и о файловой системе.

В кодификаторе придётся искать по нескольку строк из таблиц содержания и уровня подготовки:

Кодификатор
Кодификатор
Кодификатор
Кодификатор

Всё и тут крутится вокруг СУБД (систем управления базами данных). От этого будем отталкиваться.

Когда-то давно я сам изучал базы данных, начав с СУБД под названием MySQL от ORACLE. Изучать пришлось самостоятельно, поэтому я копнул слишком глубоко (в школах этому не учат) и наткнулся на отличную статью о реляционной алгебре. Конечно, написана она довольно серьёзным языком, поэтому без хорошей подготовки прочитать её будет тяжело.

Реляционная алгебра

Учебников по этому чуду дискретной математики полно, я в свободной форме попытаюсь изложить только нужные для работы с ЕГЭ тезисы.

Мы будем рассматривать таблицы, которые состоят из столбцов. Именно из столбцов, ибо столбцы являются неизменными для всех данных в таблице. Данные организованы в строки: каждая строка соответствует какому-то факту или объекту. Например, в таблице "Таблица 1" в каждой строке содержатся данные об одном человеке. А колонки (опять они) указывают, какая именно информация должна быть.Про каждого мы знаем его код (ID), фамилию и инициалы, дату рождения и пол (порядок не важен, важно, что эти данные есть и нет других). В таблицах может осуществляться сортировка по любой колонке (или нескольким), может проводиться выборка.

Выборка строится так: машина проверяет КАЖДУЮ строку на определённое условие, и, если условие истинно для строки, то эта строка останется в выборке, а нет - значит, нет.

Например, сделаем выборку по условию "Пол = 'М'" из "Таблицы 1":

Выборка по условию "Пол = 'М'" из "Таблицы 1"
Выборка по условию "Пол = 'М'" из "Таблицы 1"

Условие может быть, например, сложным, типа "Пол='М' ИЛИ Год_рождения > 1990", здесь при определении истинности этого условия для каждой строки будет использоваться алгебра логики, с которой мы уже сталкивались в задании №2.

Связи между таблицами

Каждая таблица может иметь связь с другой или даже с самой собой. При наличии связей из двух таблиц можно сделать одну, если выбрать строки, в которых значения связных столбцов совпадают. (Например, столбец "ID" из таблицы 1 и столбец "ID_родителя" из таблицы 2)

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

Использование связей между таблицами
Использование связей между таблицами

Такая конструкция выглядит довольно громоздкой, не так ли? Особенно, если посмотреть, что данные в таблице теперь будут повторяться.

Зато теперь, если построить таблицу до конца, можно будет что-то предпринимать:

Полная таблица из двух (трёх) таблиц
Полная таблица из двух (трёх) таблиц

Решение

Нам надо определить количество строк "полной" таблицы, которые подходят под очень сложное условие: у скольких детей на момент их рождения отцам было больше 25 полных лет.

Возраст отца (это, наверное, самое сложное) на момент рождения определяется как (год рождения ребёнка - год рождения родителя)

Условие будет выглядеть примерно так:

(год_рождения_ребёнка - год_рождения_родителя >25) И (Пол_родителя = 'М')

Выборка по условию из задачи
Выборка по условию из задачи

Для удобства я создал новый столбец в этой "полной" таблице. И теперь отлично видно, что правильный ответ "2"

Заключение

Разумеется, машина обрабатывает эти таблицы гораздо быстрее людей (я сделал автоматом), а на работу с этим заданием рекомендуется отводить всего 3 минуты. Да одно только написать такую громоздкую таблицу - это минут 20 надо. Такой метод, конечно, не подойдёт для решения "на скорость", но для тренировки именно так делать полезно. Вы (опять) сможете обнаружить закономерности, которые подойдут именно Вам, где-то после третьей задачи такого типа.

Обратите внимание, что не возбраняется создавать новые - вычисляемые столбцы (как у нас возраст_родителя).

На языке SQL наш запрос выглядел бы так:

SELECT Count(*) AS Ответ
FROM Таблица1 AS Таблица1_1 INNER JOIN (Таблица1 INNER JOIN Таблица2 ON Таблица1.Код = Таблица2.ID_родителя) ON Таблица1_1.Код = Таблица2.ID_ребенка
WHERE ((([Таблица1_1].[Год_рождения]-[Таблица1].[Год_рождения])>25) AND ((Таблица1.Пол)="М"));

*Здесь 2 операции INNER JOIN как раз создают присоединяют к Таблице2 слева и справа Таблицу1, а после WHERE указано условие.

PS

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