вентилятор
Хороших каникул!

ЕГЭ по информатике 2025 - Задание 15 (Простым языком)



Сегодняшний урок посвящён 15 заданию из ЕГЭ по информатике 2025.


Темой этого урока связана с преобразованием логических выражений.


Теорию для преобразования логических выражений Вы можете посмотреть в этой статье. Как можно работать с логическими выражениями на питоне, можно прочитать в этой статье.





Перейдём к практике решения задач 15 задания из ЕГЭ по информатике 2025.


Задача (Неравенство, одна переменная)

Какое количество натуральных чисел удовлетворяет логическому условию:


¬(X2 ≥ 9) ∨ ¬((X < 7) ∨ (X ≥ 10)) ?

Решение:
k=0
for x in range(1, 1000):
    if not(x**2 >= 9) or not((x < 7) or (x>=10)):
        k = k + 1
        
print(k)

Здесь перебираем с помощью цикла for натуральные числа от 1 до 1000.


Если логическое выражение выдаёт истину, то мы подсчитываем такой вариант.


Программа напечатает число 5.


Ответ: 5



Разберём ещё одну разминочную задачу для подготовки к ЕГЭ по информатике 2025.


Задача (Неравенство, две переменные)

Для какого наибольшего целого неотрицательного числа A выражение


(x ≥ A) ∨ (y ≥ A) ∨ (x * y ≤ 205)

тождественно истинно, т.е. принимает значение 1 при любых целых положительных x и y ?


Решение:
for A in range(0, 300):
    k=0
    for x in range(1, 301):
        for y in range(1, 301):
            if (x >= A) or (y >= A) or (x * y <= 205):
                k=k+1
    if k==300*300:
        print(A)

В первом цикле перебираем значения для A. Здесь мы пытаемся подобрать ответ в диапазоне от 0 до 300. Этот диапазон меньше, чем в прошлой задаче. Потому что здесь три вложенных цикла, и если перебирать числа от 0 до 1000, то программа может работать очень долго. При необходимости можно указать другой диапазон.


Так же в этот раз диапазон начинается с нуля, т.к. в условии сказано, что A - это неотрицательное целое число.


Для каждого A устанавливаем счётчик k в ноль.


Затем перебираем все числа в диапазоне от 1 до 300 (включительно) для переменных x и y, тем самым имитируем фразу "для любых x и y". Эти переменные целые и положительные, поэтому начинаем их перебирать с 1.


Если логическое выражение сработает при каждом значении x и y, то считается, что значение A нам подходит, и в счётчике, по окончанию вложенных циклов, будет значение 90000 (300 * 300 = 90000).


Наибольшее число, которое напечатает программа равно 15.


Ответ: 15



Задача (Функция ДЕЛ)

Обозначим через ДЕЛ(n, m) утверждение «натуральное число n делится без остатка на натуральное число m». Для какого наибольшего натурального числа А формула


¬ДЕЛ(x, А) → (ДЕЛ(x, 6) → ¬ДЕЛ(x, 9))

тождественно истинна (то есть принимает значение 1 при любом натуральном значении переменной x)?



Решение:
def D(n, m):
    if n%m==0:
        return True
    else:
        return False

for A in range(1, 1000):
    k=0
    for x in range(1, 1001):
        if D(x, A) or (not(D(x, 6)) or not(D(x, 9))):
            k=k+1
    if k==1000:
        print(A)

Здесь мы формируем функцию ДЕЛ (функцию D). Если n делится на m, то функция возвращает Истину, в противном случае функция возвращает Ложь.


Далее решаем примерно так же, как и в прошлых задачах: для каждого числа A перебираем все значения x. Следование расписываем по формуле A ⟶ B = ¬A ∨ B.


Наибольшее число здесь получается равно 18.


Ответ: 18



Ещё один важный тип задач 15 задания ЕГЭ по информатике 2025


Задача (Поразрядная конъюнкция)

Обозначим через m&n поразрядную конъюнкцию неотрицательных целых чисел m и n. Так, например, 14&5 = 11102 & 01012 = 4

Для какого наименьшего неотрицательного целого числа A формула


x&51 ≠ 0 → (x&A = 0 → x&25 ≠ 0)

тождественно истинна (то есть принимает значение 1 при любом неотрицательном целом значении переменной x)?


Решение:
for A in range(0, 1000):
    k=0
    for x in range(0, 1000):
        if x&51==0 or (x&A!=0 or x&25!=0):
            k=k+1

    if k==1000:
        print(A)

Здесь следование преобразовываем по формуле: A ⟶ B = ¬A ∨ B. Так же и A, и x - неотрицательные числа. Поэтому перебираем их диапазон, начиная с нуля. Из-за этого в цикле, который перебирает переменную x, устанавливаем верхнюю границу в 1000, а не в 1001. Тогда так же будет 1000 повторений в этом цикле.


Наименьшее число равно 34.


Ответ: 34



Ещё один тип задач 15 задания ЕГЭ по информатике


Задача (Отрезки, минимальная длина)

На числовой прямой даны отрезки P=[5, 13] и Q=[8, 19]. Укажите наименьшую возможную длину такого отрезка A, что формула (¬(x ∈ P) → (x ∈ Q)) → (x ∈ A ) верна при любых значениях x.


Решение:
def F(a, b, x):
    if a <= x <= b:
        return True
    else:
        return False

mn=10**9

for a in  range(0, 100):
    for b in  range(a, 100):
        k=0
        for i in  range(2, 200):
            x = i / 2
            if not((F(5, 13, x) or F(8, 19, x))) or F(a, b, x):
                k=k+1

        if k==198:
            mn= min(mn, b-a)

print(mn)

Заводим вспомогательную функцию F(). Она проверяет: находится ли точка x в отрезке [a;b]. Если да, возвращает Истину, иначе Ложь.


Здесь A - это отрезок. У отрезка есть начало и конец. Поэтому перебираем в начале два вложенных цикла: начало отрезка a и конец отрезка b. Для каждого отрезка A заводим счётчик k (аналогично предыдущим задачам).


В задачах на отрезки нужно, чтобы переменная x перебиралась, как дробное число. Для этого используем вспомогательный цикл i.


Т.к. отрезок A перебираем с нуля, цикл i начинаем перебирать с 2. Это связано с некоторыми исключительными ситуациями.

Диапазон цикла i делаем примерно в два раза больше по сравнению с циклом a. И внутри этого цикла получаем переменную x = i/2. Здесь нужно использовать обычное деление, ведь мы хотим получить именно дробные числа для x. Таким образом, диапазон для переменной x будет примерно таким же, как и для переменной a, только шаг у переменной x - 0,5.


Затем, как и в предыдущих задачах, подсчитываем в счётчик k, сколько раз выполнится логическая функция.


После цикла i, проверяем счёт k. Если при каждом проходе цикла, логическая функция выдавала истину, то нам подходит этот отрезок A, при котором это произошло.


В ответе нужно написать минимальную длину отрезка. Используем приём "Царь горы", чтобы среди подходящих отрезков, найти минимальный отрезок.


Получается ответ 14. Так же, как решать задачи на ОТРЕЗКИ, можете посмотреть в этой статье.


Ответ: 14



Задача (Отрезки, максимальная длина)

На числовой прямой даны два отрезка: P = [43; 49] и Q = [44; 53]. Укажите наибольшую возможную длину такого отрезка A, что формула


((x ∈ A) → (x ∈ P)) ∨ (x ∈ Q)

тождественно истинна, то есть принимает значение 1 при любых x.


Решение:
def F(a, b, x):
    if a <= x <= b:
        return True
    else:
        return False

def F2(a, b, x):
    if a < x < b:
        return True
    else:
        return False

mx=0

for a in range(0, 100):
    for b in range(a, 100):
        k=0
        for i in range(2, 200):
            x=i/2
            if (not(F2(a, b, x)) or F(43, 49, x)) or F(44, 53, x):
                k=k+1

        if k==198:
            mx=max(mx, b-a)
print(mx)

Ответ получается 10. Здесь ищем максимальный отрезок A. При поиске отрезка максимальной длины, нужно создать функцию F2 со строгим неравенством и её применять только к отрезку A.


Ответ: 10



Задача (Гибрид, ЕГЭ по информатике 2024)

Обозначим через ДЕЛ(n, m) утверждение «натуральное число n делится без остатка на натуральное число m». Пусть на числовой прямой дан отрезок B = [70, 90]. Для какого наибольшего натурального числа А логическое выражение ДЕЛ(x, А) \/ ((x ∈ B) → ¬ДЕЛ(x, 22)) истинно (т.е. принимает значение 1) при любом целом положительном значении переменной х?


Решение:
def D(n, m):
    if n%m==0:
        return True
    else:
        return False

def F(a, b, x):
    if a<=x<=b:
        return True
    else:
        return False

for A in range(1, 1000):
    k=0
    for x in range(1, 1001):
        if D(x, A) or (not(F(70, 90, x)) or not(D(x, 22))):
            k=k+1
    if k==1000:
        print(A)

Это задача гибрид. Больше эта задача про деление, но есть элементы задания на отрезки. Искомая переменная A - это обычное число, не отрезок. В остальном решаем так же, как в прошлых задачах.


Ответ: 88



Задачи для закрепления


Задача (Неравенство, две переменные, закрепление)

Для какого наибольшего целого неотрицательного числа A выражение


(x < A) ∧ (y < A) ∧ (x * y > 603)

тождественно ложно, т.е. принимает значение 0 при любых целых положительных x и y ?


Решение:
for A in range(0, 300):
    k=0
    for x in range(1, 301):
        for y in range(1, 301):
            if not( (x < A) and (y < A) and (x * y > 603) ):
                k=k+1
    if k==300*300:
        print(A)

Т.к. выражение должно быть ЛОЖНО, то обернём логическое выражение в функцию not(). Видим, что программа не сильно отличается от прошлой задачи. Данный шаблон подходит для большинства задач подобного типа.


Наибольшее число получается равно 25.


Ответ: 25



Ещё одна задачка подобного типа из тренировочных упражнений 15 задания ЕГЭ по информатике.


Задача (Неравенство, две переменные, закрепление)

Для какого наименьшего целого числа A формула


(3 * x + y < A) ∨ (x < y) ∨ (16 ≤ x)

тождественно истинна, т.е. принимает значение 1 при любых целых неотрицательных x и y ?


Решение:
for A in range(-300, 300):
    k=0
    for x in range(0, 300):
        for y in range(0, 300):
            if (3*x + y < A) or (x < y) or (16 <= x):
                k=k+1
    if k==300*300:
        print(A)

Наименьшее число равно 61. Здесь сказали, что A принимает целые значения, поэтому включили в диапазон A отрицательные числа. Из-за этого увеличилось время выполнения программы, но ответ получим за приемлемое время.


Ответ: 61



Задача (ЕГЭ по информатике, Москва, 2020)

Для какого наибольшего целого неотрицательного числа A выражение


(x > A) ∨ (y > x) ∨ (2 * y + x < 110)

тождественно истинно, то есть принимает значение 1 при любых целых неотрицательных x и y ?


Решение:
for A in range(0, 300):
    k=0
    for x in range(0, 300):
        for y in range(0, 300):
            if (x > A) or (y > x) or (2 * y + x < 110):
                k=k+1
    if k==300*300:
        print(A)

Максимальное число получается равно 36.


Ответ: 36



Следующий тип задач часто можно встретить в тренировочных вариантах ЕГЭ по информатике 2025.


Задача (С функцией ДЕЛ, закрепление)

Обозначим через ДЕЛ(n, m) утверждение «натуральное число n делится без остатка на натуральное число m». Для какого наибольшего натурального числа A формула


ДЕЛ(120, A) ∧ ((ДЕЛ(x, 70) ∧ ДЕЛ(x, 30)) → ДЕЛ(x, A))

тождественно истинна (то есть принимает значение 1 при любом натуральном значении переменной х)?



Решение:
def D(n, m):
    if n%m==0:
        return True
    else:
        return False

for A in range(1, 1000):
    k=0
    for x in range(1, 1001):
        if D(120, A) and (not(D(x, 70) and D(x, 30)) or D(x, A)):
            k=k+1
    if k==1000:
        print(A)

Наибольшее число получается равно 30.


Ответ: 30



Задача (Поразрядная конъюнкция, закрепление)

Введём выражение M & K, обозначающее поразрядную конъюнкцию M и K (логическое «И» между соответствующими битами двоичной записи). Определите наименьшее натуральное число A, такое что выражение


(X & 49 ≠ 0) → ((X & 33 = 0) → (X & A ≠ 0))

тождественно истинно (то есть принимает значение 1 при любом натуральном значении переменной X)?



Решение:
for A in range(1, 1000):
    k=0
    for x in range(1, 1001):
        if (x&49==0) or ((x&33!=0) or (x&A!=0)):
            k=k+1

    if k==1000:
        print(A)

Наименьшее число равно 16.


Ответ: 16



Задача (Отрезки, закрепление)

На числовой прямой даны два отрезка: P = [20, 30] и Q = [35, 60]. Найдите наименьшую возможную длину отрезка A, при котором формула


¬(x ∈ A) ∧ ((x ∈ P) ∨ (x ∈ Q))

тождественно ложна, то есть принимает значение 0 при любых x.



Решение:
def F(a, b, x):
    if a <= x <= b:
        return True
    else:
        return False

mn=10**9

for a in range(0, 100):
    for b in range(a, 100):
        k=0
        for i in range(2, 200):
            x = i / 2
            if not(not(F(a, b, x)) and (F(20, 30, x) or F(35, 60, x))):
                k=k+1

        if k==198:
            mn=min(mn, b-a)

print(mn)


Ответ будет 40.


Ответ: 40

На этом всё! Увидимся в новых уроках по подготовке к ЕГЭ по информатике!








15-12-2021 в 17:51:30






Поддержать сайт:


Похожая статья:

ЕГЭ по информатике - Задание 10 (Супер-разбор!)

Сегодня на повестке дня 10 задание из ЕГЭ по информатике...

Категория: Информатика  Подкатегория: ЕГЭ
Дата: 16-06-2020 в 16:07:41 0


Комментарии:

В первой задаче код выводит 5, а не 8
Maksking 16-12-2021 в 06:58:22

Спасибо, поправил!
Калужский Александр 16-12-2021 в 07:03:07

Большое спасибо, очень интересное и понятное объяснение
Павел 26-12-2021 в 09:40:59

Добрый день! А как в 5 задаче (про числовую прямую) получился ответ 14? В конце же получается, что A принадлежит [5, 19], то есть длина отрезка 15. 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 - 15 штук Или я что-то неправильно понял?
Владимир 02-02-2022 в 12:45:32

Считается количество единиц, а не сколько целых чисел в этом отрезке.
Калужский Александр 02-02-2022 в 13:32:50

И в самой последней задаче на закрепление, у вас, видимо, та же ошибка. Не 40, а 41 должно быть?
Владимир 02-02-2022 в 13:52:40

Ааа, количество единииц считается! Всё, тогда понял, спасибо! :)
Владимир 02-02-2022 в 13:54:11

Почему во второй задаче ответ 15, а не 14, ведь 225>205, а не меньше
Андрей 04-04-2022 в 17:58:10

Как решать 15 задание с "~" тильдой на питоне? Как например это задание: На числовой прямой даны два отрезка: P = [7, 14] и Q = [9, 11]. Укажите наибольшую возможную длину промежутка A, для которого формула ((x ∈ P) ~ (x ∈ Q)) → ¬(x ∈ A)
Иван 25-04-2022 в 11:45:25

Грамотное объяснение. Безумно здорово, что есть объяснения как на питон (перебором) так и чисто в математической форме, потому что в информатике оба подхода, мне кажется, равносильны. Спасибо
Пингвинист 12-01-2023 в 02:31:26

Почему k == 90000 в примере (x > A) ∨ (y > x) ∨ (2 * y + x < 110)
Леонид 20-09-2023 в 11:15:25

Леонид, цикл x повториться 300 раз, цикл y тоже 300 раз. Когда циклы вложенные, то количества повторений перемножаются 300*300
Калужский Александр 20-09-2023 в 11:19:21

Спасибо
Леонид 20-09-2023 в 13:05:51



Оставить коментарий:



Напишите email, чтобы получать сообщения о новых комментариях (необязательно):


Задача против робота. Расположите картинки горизонтально:




Нажимая кнопку Отправить, Вы соглашаетесь с политикой конфиденциальности сайта.