Разработка генератора логических выражений на языке программирования С++ | Статья в журнале «Молодой ученый»

Отправьте статью сегодня! Журнал выйдет 26 октября, печатный экземпляр отправим 30 октября.

Опубликовать статью в журнале

Библиографическое описание:

Разработка генератора логических выражений на языке программирования С++ / Е. В. Коптенок, А. А. Прощенков, Н. А. Зверев [и др.]. — Текст : непосредственный // Молодой ученый. — 2020. — № 19 (309). — С. 128-130. — URL: https://moluch.ru/archive/309/69865/ (дата обращения: 17.10.2024).



В настоящий момент задания для студентов создаются с помощью устаревших и трудоемких методов, в связи с чем большое количество времени уходит на составление заданий. Программа «Генератор логических выражений» позволяет создавать случайно-генерируемые задания любой, свободно настраиваемой сложности, что ускоряет работу над ними преподавателям. А встроенные возможности вывода ответа позволят также ускорить проверку работ.

С помощью программы можно генерировать уникальные логические выражения, что важно для преподавателей во время составления заданий для ограниченных по времени проверочных, контрольных работ. Уникальность заданий с высокой точностью позволяет оценить действительные знания студентов, поскольку вероятность того, что подобное задание встречалось раньше в учебных материалах, крайне мала.

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

Критерии, по которым происходило сравнение программы-генератора и аналогов:

– возможность генерации логических выражений;

– возможность построения таблиц истинности;

– возможность приведения функции к виду сднф и скнф;

– возможность сохранения логических выражений в удобном виде;

Программа является уникальной, полных аналогов не найдено.

Существуют программы, частично реализующие описанный выше функционал, а именно web-ресурсы [1] [2] [3] [4], предоставляющие следующие возможности:

– Построение СДНФ и СКНФ.

– Построение таблиц истинности.

Таким образом, от аналогов программу отличает возможность генерации логических выражений с заданными параметрами и их сохранения в файл. Большинство похожих программ и сервисов предоставляют возможности построения таблиц истинности, СДНФ и СКНФ логических выражений (то есть решать логические выражения), но не позволяют создавать новые логические функции.

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

– Удалить одну выделенную сгенерированную функцию.

– Удалить все сгенерированные функции.

– Построить СДНФ для одной выделенной функции, вывести в указанный файл.

– Построить СДНФ для всех функций, вывести в указанный файл.

– Построить СКНФ для одной выделенной функции, вывести в указанный файл.

– Построить СКНФ для всех функций, вывести в указанный файл.

– Построить таблицу истинности для одной выделенной функции, вывести в указанный файл.

– Построить таблицу истинности для всех функций, вывести в указанный файл.

– Сохранить одну выделенную сгенерированную функцию в указанный файл.

– Сохранить все сгенерированные функции в указанный файл.

– Генерация за один сеанс работы разных функций, прошлые сгенерированные функции удаляются.

– Возможность смены внешнего вида операций в настройках.

– Возможность смены внешнего вида переменных в настройках.

– Возможность смены языка. Доступные языки: русский, английский, немецкий.

– Возможность смены темы приложения в настройках. Доступные темы: светлая, темная.

Генерация логических выражений выполняется по следующим параметрам:

– Количество переменных (и сколько их встречается в выражении). Всего переменных может быть 10.

– Операции, участвующие в выражении (Базовые: логическое И, логическое ИЛИ, логическое НЕ (отрицание). Не базовые: следование (импликация), сложение по модулю два (исключающее ИЛИ), эквиваленция. Специфические: штрих Шеффера, стрелка Пирса).

– Наличие логических констант (ложь (0), истина (1)).

– Количество формул, не более 500.

Программа написана на языке С++11 с использованием кроссплатформенного фреймворка Qt 5.14.1.

Алгоритм генерации:

  1. Подготавливаем вектор (std::vector) указателей на переменные или логические константы basic, вектор операций operation, вектор указателей на вершины сгенерированных деревьев head.
  2. Проходим в цикле по вектору operation, создаем новый узел операции, потомки — две переменные или логические константы (если операция отрицание, то одна), добавляем полученный узел в конец вектора basic, удаляем из basic использованные переменные или логические константы. Выполняем действие 3. После каждой итерации цикла восстанавливаем, восстанавливаем массив basic: добавляем потомки созданной операции в вектор, удаляем указатель на операцию.
  3. Если длина basic не равна единице, возвращаемся в действие 2. Если длина basic равна единице, добавляем указатель на вершину сгенерированного дерева в вектор head.
  4. Когда использованы все операции и сгенерированы все формулы — получен вектор указателей на вершины полученных формул.

Демонстрация работы приложения отображена на рРис. 1 и на рРис. 2.

Рис. 1. Демонстрация работы приложения «Генератор логических выражений»: а) главное меню; б) настройки; в) меню генерации; г) взаимодействие со сгенерированными формулами.

Рис. 2. Темная тема в приложении: а) главное меню; б) меню генерации

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

Литература:

  1. Онлайн инструменты по математической логике: сайт / tablica-istinnosti.ru: сайт по математической логике. — URL: https://tablica-istinnosti.ru/ru/ (дата обращения: 07.05.2020). — Текст: электронный.
  2. Калькулятор математической логики: сайт / Контрольная работа онлайн: решение задач. — URL: https://www.kontrolnaya-rabota.ru/s/mathlogic/ (дата обращения 07.05.2020). — Текст: электронный.
  3. Таблица истинности онлайн с примерами — логика: сайт / uchim.org: сайт с материаламы для учёбы. — URL: https://uchim.org/matematika/tablica-istinnosti (дата обращения: 07.05.2020). — Текст: электронный.
  4. Построение таблицы истинности. СДНФ. СКНФ. Полином Жегалкина: сайт / Programforyou.ru: сайт для помощи с программированием. — URL: https://programforyou.ru/calculators/postroenie-tablitci-istinnosti-sknf-sdnf (дата обращения: 07.05.2020). — Текст: электронный.
Основные термины (генерируются автоматически): указанный файл, выражение, Возможность смены, выделенная функция, программа, функция, вектор указателей, возможность генерации, выделенная сгенерированная функция, главное меню.


Задать вопрос