В настоящий момент задания для студентов создаются с помощью устаревших и трудоемких методов, в связи с чем большое количество времени уходит на составление заданий. Программа «Генератор логических выражений» позволяет создавать случайно-генерируемые задания любой, свободно настраиваемой сложности, что ускоряет работу над ними преподавателям. А встроенные возможности вывода ответа позволят также ускорить проверку работ.
С помощью программы можно генерировать уникальные логические выражения, что важно для преподавателей во время составления заданий для ограниченных по времени проверочных, контрольных работ. Уникальность заданий с высокой точностью позволяет оценить действительные знания студентов, поскольку вероятность того, что подобное задание встречалось раньше в учебных материалах, крайне мала.
Также данный генератор можно использовать для апробации алгоритмов решения логических выражений с высокой эффективностью на случайно генерируемых вариантах.
Критерии, по которым происходило сравнение программы-генератора и аналогов:
– возможность генерации логических выражений;
– возможность построения таблиц истинности;
– возможность приведения функции к виду сднф и скнф;
– возможность сохранения логических выражений в удобном виде;
Программа является уникальной, полных аналогов не найдено.
Существуют программы, частично реализующие описанный выше функционал, а именно web-ресурсы [1] [2] [3] [4], предоставляющие следующие возможности:
– Построение СДНФ и СКНФ.
– Построение таблиц истинности.
Таким образом, от аналогов программу отличает возможность генерации логических выражений с заданными параметрами и их сохранения в файл. Большинство похожих программ и сервисов предоставляют возможности построения таблиц истинности, СДНФ и СКНФ логических выражений (то есть решать логические выражения), но не позволяют создавать новые логические функции.
Программа обладает следующими функциональными возможностями:
– Удалить одну выделенную сгенерированную функцию.
– Удалить все сгенерированные функции.
– Построить СДНФ для одной выделенной функции, вывести в указанный файл.
– Построить СДНФ для всех функций, вывести в указанный файл.
– Построить СКНФ для одной выделенной функции, вывести в указанный файл.
– Построить СКНФ для всех функций, вывести в указанный файл.
– Построить таблицу истинности для одной выделенной функции, вывести в указанный файл.
– Построить таблицу истинности для всех функций, вывести в указанный файл.
– Сохранить одну выделенную сгенерированную функцию в указанный файл.
– Сохранить все сгенерированные функции в указанный файл.
– Генерация за один сеанс работы разных функций, прошлые сгенерированные функции удаляются.
– Возможность смены внешнего вида операций в настройках.
– Возможность смены внешнего вида переменных в настройках.
– Возможность смены языка. Доступные языки: русский, английский, немецкий.
– Возможность смены темы приложения в настройках. Доступные темы: светлая, темная.
Генерация логических выражений выполняется по следующим параметрам:
– Количество переменных (и сколько их встречается в выражении). Всего переменных может быть 10.
– Операции, участвующие в выражении (Базовые: логическое И, логическое ИЛИ, логическое НЕ (отрицание). Не базовые: следование (импликация), сложение по модулю два (исключающее ИЛИ), эквиваленция. Специфические: штрих Шеффера, стрелка Пирса).
– Наличие логических констант (ложь (0), истина (1)).
– Количество формул, не более 500.
Программа написана на языке С++11 с использованием кроссплатформенного фреймворка Qt 5.14.1.
Алгоритм генерации:
- Подготавливаем вектор (std::vector) указателей на переменные или логические константы basic, вектор операций operation, вектор указателей на вершины сгенерированных деревьев head.
- Проходим в цикле по вектору operation, создаем новый узел операции, потомки — две переменные или логические константы (если операция отрицание, то одна), добавляем полученный узел в конец вектора basic, удаляем из basic использованные переменные или логические константы. Выполняем действие 3. После каждой итерации цикла восстанавливаем, восстанавливаем массив basic: добавляем потомки созданной операции в вектор, удаляем указатель на операцию.
- Если длина basic не равна единице, возвращаемся в действие 2. Если длина basic равна единице, добавляем указатель на вершину сгенерированного дерева в вектор head.
- Когда использованы все операции и сгенерированы все формулы — получен вектор указателей на вершины полученных формул.
Демонстрация работы приложения отображена на рРис. 1 и на рРис. 2.
Рис. 1. Демонстрация работы приложения «Генератор логических выражений»: а) главное меню; б) настройки; в) меню генерации; г) взаимодействие со сгенерированными формулами.
Рис. 2. Темная тема в приложении: а) главное меню; б) меню генерации
На данном этапе разработки программа может применяться в образовании и при тестировании приложений, чьи алгоритмы связаны с преобразованием логических выражений.
Литература:
- Онлайн инструменты по математической логике: сайт / tablica-istinnosti.ru: сайт по математической логике. — URL: https://tablica-istinnosti.ru/ru/ (дата обращения: 07.05.2020). — Текст: электронный.
- Калькулятор математической логики: сайт / Контрольная работа онлайн: решение задач. — URL: https://www.kontrolnaya-rabota.ru/s/mathlogic/ (дата обращения 07.05.2020). — Текст: электронный.
- Таблица истинности онлайн с примерами — логика: сайт / uchim.org: сайт с материаламы для учёбы. — URL: https://uchim.org/matematika/tablica-istinnosti (дата обращения: 07.05.2020). — Текст: электронный.
- Построение таблицы истинности. СДНФ. СКНФ. Полином Жегалкина: сайт / Programforyou.ru: сайт для помощи с программированием. — URL: https://programforyou.ru/calculators/postroenie-tablitci-istinnosti-sknf-sdnf (дата обращения: 07.05.2020). — Текст: электронный.