Тема 15. Алгебра логики – преобразование логических выражений
15.03 Плоскость/прямая
Вспоминай формулы по каждой теме
Решай новые задачи каждый день
Вдумчиво разбирай решения
ШКОЛКОВО.
Готовиться с нами - ЛЕГКО!
Подтемы раздела алгебра логики – преобразование логических выражений
Решаем задачи

Ошибка.
Попробуйте повторить позже

Задача 1#49372

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

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

истинна, т.е. принимает значение 1 при любом значении переменной x  .

Показать ответ и решение

В начале для удобства заменим некоторые выражения:

x ∈ Q = Q
x ∈ P = P
x ∈ A = A

Тогда выражение примет такой вид:

P  =⇒  ((Q ∧ ¬A ) =⇒  ¬P)

Заменим импликацию на отрицание первого или второе. Выражение будет выглядеть следующим образом:

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

Раскроем отрицание в скобке. Теперь выражение имеет такой вид:

¬P ∨ (¬Q ∨ A ∨¬P )

Избавимся от повторяющейся Р под отрицанием и получим окончательное упрощенное выражение:

¬P ∨ ¬Q ∨ A

Как можем заметить, нам нужно найти значения x когда выражение равно истине, при этом только А должна равняться единице, а все остальные – 0. Не P и Не Q будут равны 0, когда х будут находиться в пределах отрезков P и Q. Получается, нас интересует отрезок, который находится как в отрезке P,так и в отрезке Q. Это отрезок: [66;100]  . Ответ:34.

Ответ: 34

Ошибка.
Попробуйте повторить позже

Задача 2#87946

Для какого наименьшего целого числа А выражение

(y+ 10⋅x < A) ∨(5⋅x + 2⋅y > 102)

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

Показать ответ и решение

Отрицаем известную часть: 5⋅x + y ≤ 101  . Так как х и у – целые натуральные, то минимальное значение y равно 1. Тогда 5⋅x ≤ 100  , то есть xmax = 20  .

Значит, A > 1 + 10⋅20 → A > 201 → A = 202  .

for a in range(-1000, 1000):
    c = 0 #флаг
    for x in range(1, 1000):
        for y in range(1, 1000):
            if ((y + 10*x < a) or (5*x + 2*y > 102)) == False:
                c = 1
                break #выход из цикла, если флаг изменился
        if c == 1:
            break
    if c == 0:
        print(a) #если флаг не изменился, выводим А
        break

Ответ: 202

Ошибка.
Попробуйте повторить позже

Задача 3#87944

На числовой прямой даны два отрезка: P = [10,40]  и Q = [18,56]  . Отрезок A таков, что формула

¬(¬((x ∕∈ A) → ((x ∈ P) → (x ∈ Q ))))

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

Показать ответ и решение

Раскроем скобки:

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

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

Отрицаем известную часть:

(x ∈ P )∧ (x ∕∈ Q)

Получаем, что нам подходит отрезок: [10; 17]. Его длина 17− 10 = 7  .

Ответ: 7

Ошибка.
Попробуйте повторить позже

Задача 4#87943

На числовой прямой даны два отрезка: P = [15,44]  и Q = [20,46]  . Отрезок A таков, что формула

(x ∈ P) −→ ((¬(x ∈ Q )∧ ¬(x ∈ A)) → ¬(x ∈ P ))

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

Показать ответ и решение

Руками:

Раскроем скобки:

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

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

Отрицаем известную часть:

(x ∈ P )∧ (x ∕∈ Q)

Получаем, что нам подходит отрезок: [15; 19]. Его длина 19− 15 = 4  .

Прогой:

p = [i for i in range(15, 45)]
q = [i for i in range(20, 47)]
mn = 10**10
for a1 in range(1, 500):
    for a2 in range(a1+1, 501):
        c = 0
        a = [i for i in range(a1, a2)]
        for x in range(1, 500):
            if ((x in p) <= ((not(x in q) and not(x in a)) <= (not(x in p)))) == False:
                c = 1
                break
        if c == 0:
            mn = min(len(a)-1, mn)
print(mn)

Ответ: 4

Ошибка.
Попробуйте повторить позже

Задача 5#87939

Для какого наименьшего целого числа А выражение

(x > 80) ∨(y > 70)∨(3⋅x − 5⋅y < A)

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

Показать ответ и решение

Отрицаем известную часть и получаем, что:

(x ≤ 80)∧ (y ≤ 70)

То есть x ∈ [0;80],y ∈ [0,70]  . Нам необходимо, чтобы A > 3 ⋅x− 5⋅y  .

Наименьшее значение А, при котором будет выполнено равенство, достигается в точке (80, 0). A > 3 ⋅80 − 5⋅0 → A > 240 → A = 241  .

Прогой:

for a in range(-1000, 1000):
    c = 0 #флаг
    for x in range(0, 1000):
        for y in range(0, 1000):
            if ((x > 80) or (y > 70) or (3*x - 5*y < a)) == False:
                c = 1
                break #выход из цикла, если флаг изменился
        if c == 1:
            break
    if c == 0:
        print(a) #если флаг не изменился, выводим А
        break

Ответ: 241

Ошибка.
Попробуйте повторить позже

Задача 6#72581

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

(2⋅x < y)∨(x > 13)∨ (x ⋅y < A )

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

Показать ответ и решение
for a in range(1000):
    f = 0
    for x in range(1000):
        for y in range(1000):
            if ((2*x < y) or (x > 13) or (x*y < a)) == False:
                f = 1
                break
        if f == 1:
            break
    if f == 0:
        print(a)
        break

Ответ: 339

Ошибка.
Попробуйте повторить позже

Задача 7#72580

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

(x ⋅y < A )∨ (x < y)∨ (x > 5)

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

Показать ответ и решение
for a in range(1000):
    f = 0
    for x in range(1000):
        for y in range(1000):
            if ((x*y < a) or (x < y) or (x > 5)) == False:
                f = 1
                break
        if f == 1:
            break
    if f == 0:
        print(a)
        break

Ответ: 26

Ошибка.
Попробуйте повторить позже

Задача 8#72578

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

(2⋅x + y > A )∨ (y < x)∨ (x < 28)

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

Показать ответ и решение

Решение руками:

(2⋅x+ y > A)∨ (y < x) ∨(x < 28)

Нам нужно, чтобы это выражение всегда было истинно; так как между скобками стоит ИЛИ, то достаточно чтобы хотя бы одна скобка давала истину. Известная часть (y < x)∨ (x < 28)  дает ложь когда y ≥ x  и x ≥ 28  . Получаем, что первая скобка обязательно должна давать истину когда x ∈ [28;+∞ ]  и y ∈ [28;+∞ ]  , то есть должно выполняться неравенство A < 2⋅28+ 28 = 84  . Наибольшее A  , которое подходит под условие это 83.

Решение программой:

for a in range(1000):
    f = 0
    for x in range(1000):
        for y in range(1000):
            if ((2*x+y > a) or (y < x) or (x < 28)) == False:
                f = 1
                break
        if f == 1:
            break
    if f == 0:
        print(a)

Ответ: 83

Ошибка.
Попробуйте повторить позже

Задача 9#72508

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

(3 ⋅x+ 5⋅y < A) ∨(y > x)∨(x > 15)

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

Показать ответ и решение

Решение руками:

(3 ⋅x+ 5⋅y < A) ∨(y > x)∨(x > 15)

Нам нужно, чтобы это выражение всегда было истинно; так как между скобками стоит ИЛИ, то достаточно чтобы хотя бы одна скобка давала истину. Известная часть (y > x )∨(x > 15)  дает ложь когда x ≤ 15  и y ≤ x  . Получаем, что первая скобка обязательно должна давать истину когда x ∈ [0;15]  и y ∈ [0;15]  , то есть должно выполняться неравенство A > 3 ⋅15+ 5⋅15 = 120  . Наименьшее A  , которое подходит под условие это 121.

Решение программой:

for a in range(1000):
    f = 0
    for x in range(1000):
        for y in range(1000):
            if ((3*x+5*y < a) or (y > x) or (x > 15)) == False:
                f = 1
                break
        if f == 1:
            break
    if f == 0:
        print(a)
        break

Ответ: 121

Ошибка.
Попробуйте повторить позже

Задача 10#64022

На числовой прямой даны два отрезка: P = [5, 17] и Q = [13, 23]. Найдите наибольшую возможную длину отрезка A, при котором формула

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

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

Показать ответ и решение

Решение программой 1:

p = {i for i in range(5, 18)}
q = {i for i in range(13, 24)}
ans = []
for a1 in range(1,50):
    for a2 in range(a1 + 1,51):
        f = 0
        for x in range(1,51):
            if (((a1 <= x <= a2) <= (x in p)) or (x in q)) == False:
                f=1
                break
        if f == 0:
            ans += [a2 - a1]
print (max(ans))

Решение программой 2:

# функция, которая проверяет, принадлежит ли x отрезку
def F(start, end, x):
    if start <= x <= end:
        return True
    else:
        return False

lens = []
# левая граница искомого отрезка
for a in range(1, 500+1):
    # правая граница искомого отрезка
    for b in range(a, 500+1):
        f = 0
        for x in range(1, 1000):
            if ((F(a, b, x) <= F(5, 17, x)) or F(13, 23, x)) == False:
                f = 1
                break
        if f == 0:
            # добавляем длину отрезка в массив
            lens.append(b-a)
print(max(lens))

Ответ: 18

Ошибка.
Попробуйте повторить позже

Задача 11#63924

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

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

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

Показать ответ и решение

Преобразуем выражение раскрыв импликацию:

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

Построим известную часть на числовой прямой:

PIC

По рисунку видно, что "перекрыта"только часть прямой на отрезке [10, 35], тогда чтобы НЕ A "перекрывала"остальную часть, необходимо чтобы отрезок A полностью лежал внутри этого отрезка. Тогда наибольшая возможная длина отрезка A это 35 - 10 = 25.

Ответ: 25

Ошибка.
Попробуйте повторить позже

Задача 12#63531

Укажите наименьшее целое значение A, при котором выражение

(3y+ x < A)∨ (x > 12)∨ (y > 15)

истинно для любых целых и положительных значений x и y.

Показать ответ и решение
for a in range(300):
    # Переменная-флаг,
    # которой присваивается 1, если хотя бы одно выражение выдаёт ложь
    flag = True
    for x in range(1, 500):
        for y in range(1, 500):
         # Если выражение ложно(нам нужны только истинные),
            # то приостанавливаем цикл
            if (((3*y + x) < a) or (x > 12) or (y > 15)) == False:
                flag = False
                break
    if flag == True:
        print(a)
        break

Ответ: 58

Ошибка.
Попробуйте повторить позже

Задача 13#63014

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

(x ≥ 7) ∨(2x < y)∨(xy < A)

тождественно истинно при любых целых неотрицательных X и Y ?

Показать ответ и решение
for a in range(100):
    f = 0
    for x in range(101):
        for y in range(100):
            if ((x >= 7) or (2 * x < y) or (x * y < a)) == False:
                f = 1
                break
    if f == 0:
        print(a)
        break



Ответ: 73

Ошибка.
Попробуйте повторить позже

Задача 14#63000

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

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

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

Показать ответ и решение

Решение руками:

Упростим выражение, раскрыв импликацию:

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

Тогда получается, что отрезок A  должен перекрыть как минимум отрезок [18,32]  . Его длина 32 − 18 = 14  .

Решение программой:

# функция, которая проверяет, принадлежит ли x отрезку
def F(start, end, x):
    if start <= x <= end:
        return True
    else:
        return False

lens = []
# левая граница искомого отрезка
for a in range(1, 500+1):
    # правая граница искомого отрезка
    for b in range(a, 500+1):
        f = 0
        for x in range(1, 1000):
            if ((F(10, 32, x) and not(F(a, b, x))) <= (not(F(18, 45, x)))) == False:
                f = 1
                break
        if f == 0:
            # добавляем длину отрезка в массив
            lens.append(b-a)
print(min(lens))

Ответ: 14

Ошибка.
Попробуйте повторить позже

Задача 15#62999

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

((x − 20 < A )∧ (10 − y < A))∨ ((x+ 4)⋅y > 45)

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

Показать ответ и решение

Преобразуем выражение

((x < A+ 20)∧ (y > 10 − A))∨ (y >--45--)
                                (x+ 4)

y > --45--
    (x+ 4)  - это гипербола, под неравенство подходят все точки, которые находятся выше нее. Так как x  и y  целые и положительных, то нам остается перекрыть область под гиперболой, где x ∈ [1;41]  , а y ∈ [1;12]  .

Нераенство x < A + 20  перекрывает все что левее A+ 20  , тогда всдствив максимальный x− 41  в него мы перекроем все точки по x  . Отсюда 21 < A  .

Нераенство y > 10 − A  перекрывает все что выше 10− A  , тогда всдствив минимальный y − 1  в него мы перекроем все точки по y  . Отсюда 9 < A  .

Так как необходимо, чтобы оба эти неравенства оба выполнялись, то наименьшее A  , которое походит - 22.

Ответ: 22

Ошибка.
Попробуйте повторить позже

Задача 16#62997

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

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

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

Показать ответ и решение

Решение руками:

Упростим выражение, раскрыв импликацию:

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

Тогда получается, множество не A  должно перекрывать следующие участки прямой: (− ∞; 15)∪ (39;44) ∪(57;∞ )  . Для того чтобы этого добиться. отрезок A  должен содержаться в одном из отрезков P  или Q  . Наибольшая длина отрезка A  будет достигаться, когда он равен P  , то есть [15;39]  . Его длина 39− 15 = 24  .

Решение программой:

# функция, которая проверяет, принадлежит ли x отрезку
def F(start, end, x):
    if start <= x <= end:
        return True
    else:
        return False

lens = []
# левая граница искомого отрезка
for a in range(1, 500+1):
    # правая граница искомого отрезка
    for b in range(a, 500+1):
        f = 0
        for x in range(1, 1000):
            if ((F(a, b, x) <= F(15, 39, x)) or F(44, 57, x)) == False:
                f = 1
                break
        if f == 0:
            # добавляем длину отрезка в массив
            lens.append(b-a)
print(max(lens))

Ответ: 24

Ошибка.
Попробуйте повторить позже

Задача 17#62996

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

((y ⋅y ≤ A) → (y ≤ 10))∧ ((x ≤ 9) → (x ⋅x < A))

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

Показать ответ и решение

Решение руками:

Упростим выражение, раскрыв импликацию:

((y2 > A) ∨(y ≤ 10))∧ ((x > 9)∨ (x2 < A ))

Из известной части мы получаем что √A--> 9  и √A--≤ 10  . Отсюда получаем двойное неравентсво 81 < A ≤ 100  . Наименьшее A  удовлетворяющее этому неравенству – 82.

Решение программой:

for a in range(1000):
    flag = True
    for x in range(1000):
        for y in range(1000):
            if (((y * y <= a) <= (y <= 10)) and ((x <= 9) <= (x * x < a))) == False:
                flag = False
                break
    if flag:
        print(a)
        break

Ответ: 82

Ошибка.
Попробуйте повторить позже

Задача 18#62995

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

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

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

Показать ответ и решение

Решение руками:

Упростим выражение, раскрыв импликацию:

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

Тогда получается, множество не A  должно перекрывать следующие участки прямой: (− ∞; 13)∪ (22;25) ∪(30;∞ )  . Для того чтобы этого добиться отрезок A  должен содержаться в одном из отрезков P  или Q  . Наибольшая длина отрезка A  будет достигаться, когда он равен Q  , то есть [13,22]  . Его длина 22− 13 = 9  .

Решение программой:

# функция, которая проверяет, принадлежит ли x отрезку
def F(start, end, x):
    if start <= x <= end:
        return True
    else:
        return False

lens = []
# левая граница искомого отрезка
for a in range(1, 500+1):
    # правая граница искомого отрезка
    for b in range(a, 500+1):
        f = 0
        for x in range(1, 1000):
            if ((F(a, b, x) <= F(25, 30, x)) or F(13, 22, x)) == False:
                f = 1
                break
        if f == 0:
            # добавляем длину отрезка в массив
            lens.append(b-a)
print(max(lens))

Ответ: 9

Ошибка.
Попробуйте повторить позже

Задача 19#62994

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

(2x+ 3y < A)∨ (x > y)∨ (y > 24)

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

Показать ответ и решение

Построим на плоскости графики известной части (зеленым отмечена область, которая удовлетворяет неравенству y > 24  , а голубым – неравенству x > y  ). Так как оба неравенства строгие, то сама прямая не подходит под неравенство. Не перекрытой останется только область, отмеченая красным.

PIC

Если преобразовать третье неравенство, то получается y < A−-2x-
      3  – это убывающая прямая. Коэффициент A  влияет на то, где эта прямая будет пересекать ось y  .

Для того чтобы перекрыть красный треугольник, нам нужно чтобы прямая проходила чуть выше точки пересечения прямых x = y  и y = 24  . Для этого подставим координты x = 24,y = 24  в уравнение     A − 2x
y = ---3--  , а затем к полученному A  прибавим 1, чтобы эта прямая была чуть выше точки пересечения двух других прямых.

Ответ: 121

Ошибка.
Попробуйте повторить позже

Задача 20#62830

Сколько существует натуральных значений числа A, при которых выражение

((x2 ≤ A) → (x ≤ 5))∨ ((y2 ≤ A) → (y < 2))

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

Показать ответ и решение
# Инициализируем счетчик найденных значений
c = 0

# Итерируемся по диапазону значений от 1 до 99
for a in range(1, 100):

    # Инициализируем флаг, который будет сигнализировать о нахождении неудовлетворяющего условию значения
    f = 0

    # Двойной цикл для перебора всех возможных пар (x, y) в заданном диапазоне
    for x in range(400):
        for y in range(400):

            # Проверяем, удовлетворяют ли пары (x, y) заданному условию
            # Если условие не выполняется, то устанавливаем флаг f в 1 и прерываем цикл
            if (((x**2 <= a) <= (x <= 5)) or ((y**2 <= a) <= (y < 2))) == 0:
                f = 1
                break

    # Если после завершения цикла флаг f остался равным 0, то увеличиваем счетчик c
    if f == 0:
        c += 1

# Выводим значение счетчика c, которое представляет собой количество значений a, удовлетворяющих заданному условию
print(c)

Ответ: 35
Рулетка
Вы можете получить скидку в рулетке!