Логическая схема: пример, где одно «или» меняет решение
Логическая схема: пример выдачи брони с операциями И и ИЛИ. Проверь восемь сочетаний условий и найди связь, которая незаметно отменяет обязательную проверку.
Денис
Продакт LibraChat
6 мин чтения
В схеме могут быть правильные слова и неправильное решение. Я столкнулся с этим, когда записывал порядок выдачи брони: все три проверки присутствовали, а одна ветка позволяла обойти самую первую. Ни опечаток, ни пропавшего блока. Такая логическая схема выглядит убедительно, пока не подставишь неудобный пример. Разберём его — и найдём место, где одно «или» изменило правило.
Начинать с красивых прямоугольников я теперь не спешу. Сначала нужна фраза, по которой два человека примут одинаковое решение. Затем — несколько сочетаний входных данных. И только после этого имеет смысл выбирать форму стрелок и цвет развилок.
Логическая схема: пример с обязательной проверкой брони
Для разбора зададим правило проката настольных игр: игру можно выдать, если найдена бронь и либо подтверждена предоплата, либо разрешена оплата при получении. Разрешение здесь — заранее установленное условие конкретной заявки, а не обещание посетителя заплатить когда-нибудь. Другие правила проката сейчас не моделируем.
Я собрал из этой фразы список трёх утверждений, каждое из которых можно проверить отдельно:
A: номер брони найден в списке.
B: предоплата подтверждена.
C: для заявки разрешена оплата при получении.
Утверждение получает значение «да» или «нет». В таблице ниже запишем их как 1 и 0. Сами буквы ничего не решают. Это короткие имена проверок, которые позволяют видеть связи, не перечитывая каждый раз длинную фразу про оплату.
Бронь обязательна. Два варианта оплаты заменяют друг друга: достаточно хотя бы одного подходящего. Поэтому нужная запись выглядит так: A И (B ИЛИ C). Скобки показывают, что сначала мы объединяем альтернативные основания оплаты, а уже их общий результат соединяем с проверкой брони.
Я сначала сделал иначе: (A И B) ИЛИ C. Прочитал вслух и заметил подвох. Теперь разрешённая оплата при получении стала самостоятельным основанием выдачи, даже когда номер брони не найден. Буквы те же. Связь между ними другая.
Это удобный способ проверять чужую схему без знания специальных обозначений. Вместо названий блоков подставь полные фразы и произнеси, какое условие само по себе открывает путь к решению. Если получилось то, чего нет в исходном правиле, оформление пока рано обсуждать.
Восемь сочетаний показывают то, что скрывает обычный пример
В повседневной работе хочется проверить знакомую ситуацию: бронь есть, предоплата есть. Обе записи её пропускают. Если ограничиться этим случаем, неправильная связь останется незамеченной. Поэтому я проверил выражение 8 раз: по одному разу для каждого сочетания трёх двоичных условий.
Такая таблица называется таблицей истинности. Она перечисляет все варианты «да/нет» и результат выражения для каждого. Здесь «выдать» означает только прохождение нашего учебного правила, без дополнительных условий реального договора.
A: бронь · B: предоплата · C: оплата при получении разрешена · A И (B ИЛИ C) · (A И B) ИЛИ C
0 — 0 — 0 — 0 — 0
0 — 0 — 1 — 0 — 1
0 — 1 — 0 — 0 — 0
0 — 1 — 1 — 0 — 1
1 — 0 — 0 — 0 — 0
1 — 0 — 1 — 1 — 1
1 — 1 — 0 — 1 — 1
1 — 1 — 1 — 1 — 1
Нас интересуют вторая и четвёртая строки. В обеих A равно нулю, но последний столбец предлагает выдачу. Проверка брони вроде бы присутствует в записи. Только она больше не обязательна для любого успешного пути. Именно это я не увидел, глядя на список названий.
Например, разрешение оплатить при получении сохранилось в письме организатора, а номер брони посетитель назвал с опечаткой. Поиск этого номера не дал совпадения: A равно 0, хотя C равно 1. Схема должна отправить нас уточнять номер, а не разрешать выдачу по одному письму. Так за строкой таблицы появляется понятная рабочая ситуация.
А строка, где B и C одновременно равны единице, раскрывает ещё одно соглашение. Обычное логическое ИЛИ означает «хотя бы одно», а не «строго одно». Если по правилам процесса варианты должны исключать друг друга, это уже дополнительное требование. Его нельзя молча приписать знакомому союзу.
Для трёх двоичных условий полная проверка короткая. При большем количестве вариантов станет больше, поэтому полезно заранее искать опасные сочетания: обязательное условие не выполнено, а все возможные исключения включены. Они быстрее обнаруживают обход, чем очередная проверка случая, когда всё благополучно.
Переводим выражение обратно в маршрут
У меня получилось такое словесное описание схемы. Оно ещё не картинка, но по нему можно восстановить порядок без догадок:
Найти номер брони. Не найден — остановить выдачу по этому правилу.
Если бронь найдена, проверить подтверждение предоплаты.
Предоплата не подтверждена — проверить разрешение оплаты при получении.
Разрешение есть — условие оплаты выполнено. Нет — выдача не проходит.
В изображении обе успешные ветки оплаты должны соединяться после обязательной проверки брони. Стрелка от C сразу к финалу, минуя A, меняет смысл. Проверяй поэтому не только подписи вопросов, но и все пути, по которым можно попасть к слову «выдать».
Мне помогает обратное чтение: от успешного результата назад. Для любого такого пути должно оказаться верным A. Хотя бы один путь не требует A? Значит, обязательность потеряна. Этот приём работает и тогда, когда вместо букв в большой схеме стоят длинные названия документов.
Есть ещё состояние, которого двоичная таблица не описывает: «не удалось проверить». Например, список бронирований не открылся. Это не подтверждение отсутствия брони. В живом процессе понадобится отдельный маршрут уточнения, а не автоматическая подстановка нуля. Иначе техническое затруднение незаметно станет решением по человеку.
Сначала проверь связи, затем проси оформление
В LibraChat можно принести словесное условие и попросить помочь с его разбором. Назови обязательные проверки до обсуждения формы ответа. Для такого занятия полезнее получить основания решения, чем сразу просить эффектную картинку, в которой будет трудно заметить неверную стрелку.
Вставь в чат описание своего правила и предложи такой запрос:
Разбери условие: [мой текст]. Назови отдельные проверки и уточни, какие обязательны, а какие заменяют друг друга. Запиши логическую связь со скобками. Для двоичных условий составь таблицу результатов. Отдельно найди случай, где обязательная проверка не пройдена, но исключение могло бы ошибочно разрешить действие. Если состояние неизвестно, не приравнивай его к «нет», а задай вопрос.
Полученную запись сопоставь с исходным правилом. Чат помогает сформулировать проверку, а правильность рабочего порядка подтверждают люди, отвечающие за него. Когда логика уже проверена, к оформлению можно перейти со связанным материалом о блок-схемах. Начинать выбор значков со спора о цвете стрелок я бы не стал.
Если позже понадобится работа с документами и более подробными задачами, доступные возможности перечислены у тарифов LibraChat. А сейчас проверь свою схему одним неудобным вопросом: какой путь остаётся открытым, когда обязательное условие ложно? Найди его до того, как начнёшь выравнивать блоки.