Перейти к содержимому

Задание 3 ЕГЭ по информатике 2027: поиск в базе данных

Задание 3до 1 баллапоиск в базе данных
Раздел
Информационные технологии
Максимальный балл
1 балл
Уровень
базовый
Что проверяет
Умение поиска информации в реляционных базах данных
Что нужно сделать
В файле электронной таблицы — база данных из нескольких связанных таблиц. Отобрать записи по условию и посчитать сумму или количество.
Как записать ответ
только число: целое, без пробелов и единиц измерения
Время
Около 3 минут по обобщённому плану ФИПИ
Элемент кодификатора
4.5
Компьютер
Нужна программа или электронная таблица: на станции КЕГЭ — среды программирования на C#, C++, Pascal, Java, Python и редактор таблиц
Файл к заданию
электронная таблица .ods; на сайте рядом — копия .xlsx, и CSV для Python
В 2026 году
Тоже задание 3

Задание 3 ЕГЭ по информатике 2027 года проверяет, по формулировке обобщённого плана ФИПИ, «Умение поиска информации в реляционных базах данных». В КИМ 2026 года под этим номером было то же задание: «Изменения структуры КИМ отсутствуют», среди новых тем 2027 года задание 3 не названо.

К заданию приложен файл — база данных из трёх связанных таблиц: движение товаров (дата, ID магазина, артикул, количество упаковок, тип операции) и два справочника — товаров и магазинов. Связи заданы ключами: по ID магазина строка ссылается на магазин, по артикулу — на товар. Нужно отобрать записи по нескольким условиям сразу и посчитать итог: массу в килограммах, выручку в рублях или изменение остатка в упаковках.

Уровень базовый, по обобщённому плану — около 3 минут, за верный ответ 1 балл. Это одно из заданий, где нужен компьютер. В 2026 году с заданием справились 67,8 % участников, в 2025 году — 75,6 %. Методические рекомендации по итогам 2026 года советуют «уделить особое внимание» «организации вычислений в электронных таблицах».

Ниже — три типа задания с разбором, решением на Python и формулами. Разбор демоверсии 2027 года и типичные ошибки — в конце, тренажёр — сразу под этим текстом.

Тренажёр задания 3

Десять заданий номера 3 из банка тренажёра — с файлами, как на станции КЕГЭ. Решайте в песочнице Python прямо на странице или у себя; ответ проверяется по ключу, после проверки — верный ответ, разбор и решение на Python, а при ошибке — разбор от ИИ. Кнопка «Ещё 5 таких» у типа задания ниже даёт задания одного типа.

Загружаем задание…

Задание 3 вместе с остальными — в вариантах целиком.

Типы задания 3 с решением

Масса или количество товара за период в магазинах на улице

Пример условия

Условие этого типа: сколько килограммов (или упаковок) товара одного вида получили магазины с заданным адресом за период. Своими словами: сколько килограммов пряников получили магазины на Заречной улице с 7 по 13 октября 2025 года включительно?

Лист «Движение товаров» (3_moves.csv):

ID операции,Дата,ID магазина,Артикул,"Количество упаковок, шт.",Тип операции
1,08.10.2025,M1,401,2,Поступление
2,10.10.2025,M2,402,3,Поступление
3,06.10.2025,M2,402,4,Поступление
4,12.10.2025,M3,401,5,Продажа
5,14.10.2025,M2,403,1,Поступление

Лист «Товар» (3_goods.csv):

Артикул,Отдел,Наименование товара,Ед_изм,Количество в упаковке,Цена за упаковку
401,Кондитерские изделия,Пряники медовые,грамм,2000,150
402,Кондитерские изделия,Пряники тульские,грамм,3000,180
403,Кондитерские изделия,Печенье овсяное,грамм,1000,90

Лист «Магазин» (3_shops.csv):

ID магазина,Район,Адрес
M1,Заречный,"ул. Заречная, д. 5"
M2,Заречный,"ул. Заречная, д. 12"
M3,Центральный,"ул. Центральная, д. 7"

Для этого примера ответ — 13.

Задание выполняется с использованием прилагаемого файла

3.ods60 КБ3.xlsx107 КБкопия для Excel — на экзамене будет .ods3_moves.csv161 КБкак после «Сохранить как CSV» — для решения на Python3_goods.csv3,4 КБкак после «Сохранить как CSV» — для решения на Python3_shops.csv1 КБкак после «Сохранить как CSV» — для решения на Python

1. Прочитайте три листа. 2. Соберите словарь «артикул → масса упаковки в граммах», оставив только пряники, и список ID магазинов, в адресе которых есть «Заречная». 3. Оставьте строки «Поступление» с нужным магазином, артикулом и датой внутри периода. 4. Для каждой такой строки прибавьте «количество упаковок × масса упаковки». 5. Разделите итог на 1000 нацело.

На примере: подходят строки 1 (2 × 2000 = 4000 г) и 2 (3 × 3000 = 9000 г); строка 3 раньше периода, строка 4 — продажа, строка 5 — не пряники. Ответ 13.

Решение на Python
import csv
from datetime import date


def read(name):
    # CSV-копия листа: первая строка — заголовки столбцов
    with open(name, encoding='utf-8') as f:
        return list(csv.DictReader(f))


def day(text):
    # «08.10.2025» -> дата; сравнивать даты как строки нельзя
    d, m, y = (int(x) for x in text.split('.'))
    return date(y, m, d)


goods = read('3_goods.csv')
shops = read('3_shops.csv')
moves = read('3_moves.csv')

# артикул -> масса одной упаковки в граммах: нужны только пряники
gramm = {g['Артикул']: int(g['Количество в упаковке'])
         for g in goods if g['Наименование товара'].startswith('Пряники')}
# ID магазинов на Заречной улице
street = {s['ID магазина'] for s in shops if 'Заречная' in s['Адрес']}

total = 0  # масса в граммах
for row in moves:
    if row['Тип операции'] != 'Поступление':
        continue  # проданный товар в массу поступления не входит
    if row['ID магазина'] not in street or row['Артикул'] not in gramm:
        continue
    if date(2025, 10, 7) <= day(row['Дата']) <= date(2025, 10, 13):
        total += int(row['Количество упаковок, шт.']) * gramm[row['Артикул']]

print(total // 1000)  # граммы -> килограммы

Ответ на приложенном файле: 67

В электронной таблице

В свободных столбцах G, H, I — наименование товара, масса упаковки и адрес магазина:

=ВПР(D2;$Товар.$A$2:$F$1000;3;0)
=ВПР(D2;$Товар.$A$2:$F$1000;5;0)
=ВПР(C2;$Магазин.$A$2:$C$1000;3;0)

В J2 — масса подошедшего поступления, иначе 0:

=ЕСЛИ(И(F2="Поступление";ЛЕВСИМВ(G2;ДЛСТР("Пряники"))="Пряники";ЕЧИСЛО(ПОИСК("Заречная";I2));B2>=ДАТА(2025;10;7);B2<=ДАТА(2025;10;13));E2*H2;0)

Протяните G2:J2 вниз: =СУММ(J:J)/1000 даёт 13. В Excel ссылка на лист пишется Товар!$A$2:$F$1000.

Выручка магазинов района за период

Пример условия

Условие этого типа: на какую сумму (в руб.) продан товар одного вида в магазинах заданного района за период. Своими словами: на какую сумму продали конфет в магазинах Заречного района с 6 по 14 марта 2024 года включительно?

Лист «Движение товаров» (3_moves.csv):

ID операции,Дата,ID магазина,Артикул,"Количество упаковок, шт.",Тип операции
1,07.03.2024,M1,101,2,Продажа
2,07.03.2024,M2,102,3,Продажа
3,05.03.2024,M1,101,4,Продажа
4,10.03.2024,M3,101,5,Продажа
5,12.03.2024,M1,103,6,Продажа

Лист «Товар» (3_goods.csv):

Артикул,Отдел,Наименование товара,Ед_изм,Количество в упаковке,Цена за упаковку
101,Кондитерские изделия,Конфеты шоколадные,грамм,250,132
102,Кондитерские изделия,Конфеты карамель,шт,1,299
103,Кондитерские изделия,Печенье овсяное,грамм,1000,90

Лист «Магазин» (3_shops.csv):

ID магазина,Район,Адрес
M1,Заречный,"ул. Заречная, д. 5"
M2,Заречный,"ул. Заречная, д. 12"
M3,Центральный,"ул. Центральная, д. 7"

Для этого примера ответ — 1161.

Задание выполняется с использованием прилагаемого файла

3.ods89 КБ3.xlsx158 КБкопия для Excel — на экзамене будет .ods3_moves.csv242 КБкак после «Сохранить как CSV» — для решения на Python3_goods.csv3,4 КБкак после «Сохранить как CSV» — для решения на Python3_shops.csv916 байткак после «Сохранить как CSV» — для решения на Python

1. Прочитайте листы движения, товаров и магазинов. 2. Соберите словарь «артикул → цена за упаковку» только по конфетам и список ID магазинов нужного района. 3. Оставьте строки «Продажа» с магазином из списка, артикулом из словаря и датой внутри периода. 4. Для каждой строки прибавьте «количество упаковок × цена за упаковку»; делить не на что — цена дана за упаковку.

На примере: подходят строки 1 (2 × 132 = 264 руб.) и 2 (3 × 299 = 897 руб.); строка 3 раньше периода, строка 4 — не Заречный район, строка 5 — печенье. Ответ 1161 руб.

Решение на Python
import csv
from datetime import date


def read(name):
    with open(name, encoding='utf-8') as f:
        return list(csv.DictReader(f))


def day(text):
    d, m, y = (int(x) for x in text.split('.'))
    return date(y, m, d)


goods = read('3_goods.csv')
shops = read('3_shops.csv')
moves = read('3_moves.csv')

# артикул -> цена за упаковку: берём только конфеты
price = {g['Артикул']: int(g['Цена за упаковку'])
         for g in goods if g['Наименование товара'].startswith('Конфеты')}
# ID магазинов Заречного района
district = {s['ID магазина'] for s in shops if s['Район'] == 'Заречный'}

total = 0  # выручка в рублях
for row in moves:
    if row['Тип операции'] != 'Продажа':
        continue  # выручка — это только проданный товар
    if row['ID магазина'] not in district or row['Артикул'] not in price:
        continue
    if date(2024, 3, 6) <= day(row['Дата']) <= date(2024, 3, 14):
        total += int(row['Количество упаковок, шт.']) * price[row['Артикул']]

print(total)

Ответ на приложенном файле: 21740

В электронной таблице

В свободных столбцах G, H, I — наименование товара, цена упаковки и район магазина:

=ВПР(D2;$Товар.$A$2:$F$1000;3;0)
=ВПР(D2;$Товар.$A$2:$F$1000;6;0)
=ВПР(C2;$Магазин.$A$2:$C$1000;2;0)

В J2 — выручка по строке, если она подошла, иначе 0:

=ЕСЛИ(И(F2="Продажа";ЛЕВСИМВ(G2;ДЛСТР("Конфеты"))="Конфеты";I2="Заречный";B2>=ДАТА(2024;3;6);B2<=ДАТА(2024;3;14));E2*H2;0)

Протяните G2:J2 вниз: =СУММ(J:J) даёт 1161 руб. Район сравнивается целиком, а улица в первом типе — как часть адреса.

Изменение остатка товара в магазине за период

Пример условия

Условие этого типа: как изменился остаток одного товара в одном магазине за период; поступления увеличивают остаток, продажи уменьшают. Своими словами: как изменился остаток товара «Зефир сливочный» в магазине M8 с 6 по 12 сентября 2025 года включительно?

Лист «Движение товаров» (3_moves.csv):

ID операции,Дата,ID магазина,Артикул,"Количество упаковок, шт.",Тип операции
1,07.09.2025,M8,201,5,Поступление
2,09.09.2025,M8,201,3,Продажа
3,05.09.2025,M8,201,4,Поступление
4,10.09.2025,M1,201,7,Продажа
5,11.09.2025,M8,202,2,Поступление

Лист «Товар» (3_goods.csv):

Артикул,Отдел,Наименование товара,Ед_изм,Количество в упаковке,Цена за упаковку
201,Кондитерские изделия,Зефир сливочный,грамм,3000,330
202,Кондитерские изделия,Зефир ванильный,грамм,3000,160

Лист «Магазин» (3_shops.csv):

ID магазина,Район,Адрес
M1,Заречный,"ул. Заречная, д. 5"
M8,Луговой,"ул. Луговая, д. 8"
M15,Центральный,"ул. Центральная, д. 3"

Для этого примера ответ — 2.

Задание выполняется с использованием прилагаемого файла

3.ods64 КБ3.xlsx113 КБкопия для Excel — на экзамене будет .ods3_moves.csv171 КБкак после «Сохранить как CSV» — для решения на Python3_goods.csv3,4 КБкак после «Сохранить как CSV» — для решения на Python3_shops.csv915 байткак после «Сохранить как CSV» — для решения на Python

1. Прочитайте лист движения и справочник товаров: адрес и район здесь не нужны, магазин назван в условии. 2. Найдите артикул по точному наименованию «Зефир сливочный». 3. Оставьте строки нужного магазина и артикула с датами внутри периода. 4. Поступление прибавляет количество упаковок, продажа вычитает; ответ может быть отрицательным.

На примере: подходят строка 1 (+5) и строка 2 (−3); строка 3 раньше периода, строка 4 — другой магазин, строка 5 — другой товар. Ответ 2.

Решение на Python
import csv
from datetime import date


def read(name):
    with open(name, encoding='utf-8') as f:
        return list(csv.DictReader(f))


def day(text):
    d, m, y = (int(x) for x in text.split('.'))
    return date(y, m, d)


goods = read('3_goods.csv')
moves = read('3_moves.csv')

# артикул нужного товара: наименование берём из условия дословно
article = next(g['Артикул'] for g in goods if g['Наименование товара'] == 'Зефир сливочный')

change = 0  # изменение остатка в упаковках
for row in moves:
    if row['ID магазина'] != 'M8' or row['Артикул'] != article:
        continue
    if not date(2025, 9, 6) <= day(row['Дата']) <= date(2025, 9, 12):
        continue
    if row['Тип операции'] == 'Поступление':
        change += int(row['Количество упаковок, шт.'])
    else:
        change -= int(row['Количество упаковок, шт.'])  # продажа уменьшает остаток

print(change)

Ответ на приложенном файле: 14

В электронной таблице

Артикул в столбце D записан числом, поэтому в условии он без кавычек: 201. Если артикул неизвестен, его находят по наименованию: =ВПР("Зефир сливочный";$Товар.$A$2:$F$1000;1;0). В J2 — вклад строки в изменение остатка:

=ЕСЛИ(И(C2="M8";D2=201;B2>=ДАТА(2025;9;6);B2<=ДАТА(2025;9;12));ЕСЛИ(F2="Поступление";E2;-E2);0)

Внутренняя ЕСЛИ ставит знак: поступление прибавляет упаковки, продажа вычитает. Протяните J2 вниз: =СУММ(J:J) даёт 2.

Как выполнять задание

  1. Откройте файл и посмотрите имена листов: в демоверсии 2027 года это «Движение_товаров», «Товар» и «Магазин»; в каждом варианте имена свои.
  2. Разберитесь в связях: строка движения ссылается на магазин через ID магазина и на товар через артикул, других связей нет.
  3. Выпишите из условия все ограничения — тип операции, диапазон дат, вид товара, улица или район; выполняться они должны одновременно.
  4. Выберите инструмент: в электронной таблице подтяните поля справочников функцией ВПР, посчитайте вклад каждой строки в отдельном столбце и сложите; если удобнее программировать, сохраните лист в CSV и читайте из Python.
  5. Запишите ответ — только целое число, без пробелов и единиц измерения.

Что нужно знать

  • Реляционная база данных. Данные разложены по таблицам, связи заданы ключами: ID магазина и артикул в таблице движения ссылаются на справочники. Названий улиц, районов и товаров в главной таблице нет.
  • Поиск по ключу — ВПР. =ВПР(ключ; диапазон справочника; номер столбца; 0): 0 — точное совпадение, диапазон фиксируют знаками $. Иначе формула подставляет чужую строку.
  • Итог — СУММ. Вклад строки считают в отдельном столбце, потом складывают: =СУММ(J:J). Так видно, сколько строк отобралось.
  • Единицы. Для товаров с единицей «грамм» в поле «Количество в упаковке» дана масса упаковки, ответ в килограммах получают делением суммы на 1000.
  • Даты. Границы периода сравнивают через ДАТА(2025;6;5), а не как текст.

Демоверсию 2027 года с этим файлом можно открыть на странице вариантов КЕГЭ.

Как оценивается

Проверка автоматическая, по ключу: ответ должен быть записан в форме из условия и полностью совпасть с эталоном. Код и черновики не проверяют — значение имеет только ответ. За верный ответ — 1 балл, частичного балла нет.

Критерии всех заданий экзамена — на странице критериев ЕГЭ.

Разбор задания демоверсии 2027

В демоверсии 2027 года приложен файл demo_3.ods — база «Кондитерские изделия». Спрашивают общую массу (в кг) всех видов зефира, полученного магазинами на Прибрежной улице, с 5 по 19 июня включительно.

В условии четыре ограничения сразу: тип операции «Поступление», дата внутри периода, адрес магазина содержит «Прибрежную», наименование начинается со слова «Зефир». Для подошедшей строки нужны два поля из справочников: по артикулу — масса упаковки, по ID магазина — адрес. Единица измерения «грамм» означает, что в поле «Количество в упаковке» стоит масса упаковки: у артикула 5 («Зефир ванильный») это 800 г. Масса поступления — «количество упаковок × масса упаковки»; сумму в граммах делят на 1000.

Строк несколько тысяч, вручную их не перебрать. Тот же алгоритм, что в первом типе ниже, применённый к файлам демоверсии, даёт 1630 — это ключ ФИПИ.

Типичные ошибки

Складывают и поступления, и продажи

Для массы берут строки «Поступление», для выручки — «Продажа», для изменения остатка — те и другие со своим знаком. Сумма по всем строкам подряд ответ искажает.

ВПР без последнего аргумента

=ВПР(D2;$Товар.$A$2:$F$1000;3) ищет не точное совпадение и подставляет данные соседнего артикула. Пишите 0: иначе ошибка не видна, а ответ неверный.

Диапазон справочника не зафиксирован

Без знаков $ диапазон при протягивании съезжает вниз, и последние строки ищут товар в пустоте. Нужно $Товар.$A$2:$F$1000.

Дата сравнивается как текст

Как текст «10.06.2025» больше, чем «09.07.2025»: первый символ «1» больше «0», — хотя 10 июня раньше 9 июля. Границы периода задают через ДАТА(2025;6;5); в Python дату разбирают, а не сравнивают строки.

Граммы и килограммы

Масса строки — «количество упаковок × масса упаковки в граммах», а делят на 1000 один раз, уже готовую сумму.

Вопросы и ответы

Что изменилось в задании 3 в 2027 году?

Ничего: тема и номер сохранились. В документе ФИПИ об изменениях сказано «Изменения структуры КИМ отсутствуют», перечислены только новые темы заданий 10, 13 и 23.

Как решать: через ВПР или через СУММЕСЛИМН?

ВПР нужна в любом случае: она подтягивает поля справочников по ключу — наименование, массу или цену, адрес или район. Итог по строкам, прошедшим все условия, считает СУММ или СУММЕСЛИМН с парами «диапазон; условие».

Сколько баллов и времени отведено на задание 3?

1 балл, частичного балла нет. По обобщённому плану ФИПИ — около 3 минут, уровень базовый. Это задание с использованием специализированного программного обеспечения: файл открывают в редакторе электронных таблиц или обрабатывают программой.

Можно ли решить задание 3 программой на Python?

Да. Файл задания — электронная таблица (.ods), поэтому лист сохраняют в CSV и читают обычным open(name). Код на этой странице работает с CSV-копиями листов, модули csv и datetime входят в стандартную библиотеку.

Другие задания раздела «Информационные технологии»

По демоверсии, спецификации и кодификатору ФИПИ 2027
Обновлено:

Все задания ЕГЭ по информатике →