Статья Автор: Лебедев Дмитрий

Разбор Статграда от 2024-12-17. Часть 2( 2, 5, 12, 15)

Задание 2

Логическая функция F задаётся выражением: (x ≡ (y → z)) ∧ (y ≡ ¬(z → w)) 
Дан частично заполненный фрагмент, содержащий неповторяющиеся
строки таблицы истинности функции F. 

???
???
???
???
F
0
0
 
0
1
 
0
 
0
1
1
0
1
 
0

Определите, какому столбцу таблицы истинности соответствует каждая из переменных w, x, y, z.

Стандартное (для Статграда) задание. Решаем также стандарнтным образом
  1. Дополняем в таблице значение 1 в позицию (3 строка, 4 столбец), так как
    "одинаковых столбцов быть не должно"
  2. Пишем функцию для вычисления формулы и программу для полной таблицы
  3. Выводим строки с тремя 1 и значением функцмм 0:
    определяем переменную на второй позиции
  4. Выводим строки с тремя и более 0 и значением функцмм 1:
    определяем переменную на третьей позиции
  5.  Затем разбираемся с 1 и 4 позициями


Реализация пункта 3 дала два варианта: на позиции 2 стоит x или z 
Проверяем пункт 4 для 'позиция 2' ='x' 


Получаем противоречие, что х должен стоять и на позиции 3.
Ставим на вторую позицию 'z' и запускаем для пункта 4


Получили, что на позиции 3 стоит x и ..... так как выведена только ОДНА строка, что в строке 2 не более двух нулей 
Запускаем с этим условием и выбираем те, в которых 0 на позиции 2 


Такая строчка ОДНА (1010) и она соответствует указанному порядку.
Следовательно ответ wzxy

Задание 5
Алгоритм получает на вход натуральное число N и строит по нему новое число R следующим образом.
1. Строится двоичная запись числа N без ведущих нулей.
2. Подсчитывается количество единиц и количество нулей в полученной двоичной записи.
    Эти числа переводятся в двоичную систему и записываются друг за другом без использования ведущих нулей:
    сначала количество единиц, затем количество нулей.
3. Результатом работы алгоритма становится десятичная запись полученного числа R.

Определите минимальное число N, для которого результатом работы данного алгоритма будет R = 214.

Задача смотриться как стандартная: небольшое R, несложный алгоритм. 
Реализуем функцию,  проверим на тесте и некоторых числах, выведем двоичное представление числа 214. 


Результат работы (небольшое значение получаемого результата) и вид 214 дают понять, что решение "в лоб" не лучший результат
214='11010110' = ... цифр 1 цифр 0 всего цифр
'1' +'1010110' 1 86 87
'110'+'10110' 6 22 28
'11010'+'110' 26 6 32
'110101'+'10' 53 2 55
'1101011'+'0' 107 0 107
  в таблице представлено разбиени двоичной записи числа 214 на две части
(учитывалось отсутствие ведущих нулей)
Самым лучшим надо признать '110'+'10110'  и тогда число N = 227+25-1
(в этом числе 22 нуля, и 6 единиц)
Проверим
 


Получилось, что задание выполнено (почти полностью) аналитически. 
Зачем тогда писать программу? 
  • для понимания того, что нет "переборного"решения
  • для проверки результата

Задание 15
На числовой прямой даны три отрезка: P = [153697; 780411], Q = [275071; 904082], R = [722050; 984086].
Укажите наименьшую возможную длину такого отрезка A, для которого логическое выражение
(¬(x ∈ A)) → (((x ∈ P) ≡ (x ∈ Q)) → ((x ∈ R) ≡ (x ∈ Q)))
истинно (т.е. принимает значение 1) при любом значении переменной x.
Решать задание можно разными способами, но решим "методом прочтения задания"
  1. Надо найти минимальную длину для A, значит входит в формулу без отрицания
  2. Составим новую формулу, заменив условие x ∈ A на False
    (True) → (((x ∈ P) ≡ (x ∈ Q)) → ((x ∈ R) ≡ (x ∈ Q))) = (((x ∈ P) ≡ (x ∈ Q)) → ((x ∈ R) ≡ (x ∈ Q))) 
  3. Выпишем границы всех отрезков по возрастанию 
  4. 153697; 275071; 722050; 780411; 904082;  984086
  5. Из каждого отрезка/луча возмем по представителю (любой из интервала)
    100000; 150000; 250000; 700000; 750000; 900000;  950000; 1000000
  6.  Вычислим для них значение новой функции
Пишем функцию и программу 


Ответ False получим для 700000 и 950000, а это значит
  • A должно покрыть промежуток от 275071 до 984086 
  • длина отрезка A равна 984086 - 275071 = 709015
Для "сомневающихся" приведем формульное решение (заменив принадлежность просто на букву)
(¬A) → ((P ≡ Q) → ( R ≡ Q)) = A or  ¬(P≡Q) or ( R ≡ Q)  = A or P(¬Q) or (¬P)Q or RQ or (¬R)(¬Q) =
= A or [153697; 275071] or [780411; 904082] or [722050; 904082] or [-inf; 275071] or [ 984086; inf] =
= A or [-inf; 275041] or [722050; 904082] or [984086; inf]

значит A = (275041; 722050) U (904082; 984086) и так как A - единый отрезок, то A = [275041; 984086]

Из решения видно, насколько  "метод прочтения задания" проще и удобнее devil
Сомневающиеся могут ещё проверить точки 275041.0001 и 984085.9999 
 

Задание 12
Дана программа для Редактора:
НАЧАЛО
     ПОКА нашлось (111) ИЛИ нашлось (22)
заменить (111, 2)
заменить (222, 1)
заменить (221, 1)
заменить (122, 1)
заменить (22, 2)
    КОНЕЦ ПОКА
КОНЕЦ

Определите, сколько различных строк, содержащих ровно 9 двоек,
может получиться в результате применения этой программы к строкам,
состоящим только из единиц и двоек.
Очень интересное задание. Для решения нужно проанализировать условие
  1.  Финальная последовательность не может содержать двух 2  подряд и трех 1 подряд,
    то есть сответствует одной из масок (* это одна или две цифры 1) :
    1. 2*2*2*2*2*2*2*2*2
    2. 2*2*2*2*2*2*2*2*2*
    3. *2*2*2*2*2*2*2*2*2
    4. *2*2*2*2*2*2*2*2*2*
  2. "Беглый взгляд" на программу убеждает, что ни одна из таких последовательностей не будет изменена,
    а значит надо просто подсчитать их количество
 Для * есть два варианта, значит масок будет
  1.  28 (8 звездочек)
  2. 29 (9 звездочек)
  3. 29 (9 звездочек)
  4. 210 (10 звездочек)
всего 256+512+512+1024 = 2304

Надо ли писать программу? Наверное нет ...
Пропустить Навигационные Ссылки.
Чтобы оставить комментарий нужна авторизация
Печать