Аннотация 2
ВВЕДЕНИЕ 6
1 Основные определения и понятия 9
1.1 Булевы функции 9
1.2 Способы задания булевых функций 9
1.2.1 Таблица истинности 9
1.2.2 Характеристические множества 10
1.2.3 Вектор значений функции 10
1.2.4 Карты Карно 10
1.3 Фиктивные переменные 11
1.4 Элементарные булевы функции 12
2 Программная реализация тренажёра 14
2.1 Средства для разработки 14
2.2 Общий вид приложения 18
2.3 Архитектура приложения 23
2.3.1 Компонента Main 25
2.3.2 Компонента SelectTrainerType 26
2.3.3 Компонента TruthTable 27
2.4 Основные используемые инструменты библиотеки React 28
3 Реализованные алгоритмы 30
3.1 Генерация произвольных булевых функций 30
3.1.1 Способ представления булевой функции в виде дерева 30
3.1.2 Программная реализация дерева булевой функции 31
3.1.3 Результаты генерации формул булевых функций 35
3.1.4 Вычисление значения булевой функции по формуле 35
3.2 Генерация произвольных ДНФ 38
ЗАКЛЮЧЕНИЕ 40
ПРИЛОЖЕНИЕ А Код генерации булевой функции 42
ПРИЛОЖЕНИЕ Б Функция formConnunction 43
ПРИЛОЖЕНИЕ В Функция для вывода булевой функции, хранящейся в виде дерева 44
ПРИЛОЖЕНИЕ Г Функция getValue получения значения булевой функции 45
В настоящем обществе стремительно развиваются компьютерные технологии и всё более интенсивно внедряются в различные сферы нашей жизни, постепенно вытесняя классические подходы во многих процессах и по многим вопросам. Не остались в стороне и образовательные процессы: конечно, полностью «доверить» технологиям обучение и контроль знаний обучающегося невозможно, но местами напрашивается автоматизация определённых задач, что сэкономило бы время как обучающемуся, так и обучающему. В университетах «в помощь» обучению студентов используется Система дистанционного обучения (СДО) MOODLE, в некоторых ситуациях оптимизирующая некоторые процессы обучения, в некоторых - оставаясь единственным способом взаимодействия преподавателя и студентов (2020¬2021 г.). Студенты и преподаватели имеют доступ к ней через сайт, открывая его в браузере.
Для наиболее успешного освоения курса студенту нужно, во-первых, полностью освоить теоретические материалы предмета, во-вторых - решать большое количество однотипных задач, чтобы автоматизировать навык решения. Значимость второго пункта нельзя недооценивать - теоретические основы обязательно должны быть подкреплены практикой, чтобы обучающийся понял как можно больше деталей и тонкостей предмета и полноценно освоил курс. При очном обучении функции предоставления студенту задач, демонстрации хода решения задачи, проверки правильности ответа и направления хода решения полностью выполняет преподаватель. Не самый плохой вариант, но не лишённый минусов - у преподавателя может не хватать времени, чтобы контролировать и проверять выполнение работы у каждого студента. При дистанционном формате такой «классический» подход к обучению работает значительно хуже в связи с неудобством коммуникации между преподавателем и всеми студентами (не говоря об отсутствии возможности контроля процесса выполнения работы у всех студентов). Но можно разработать инструмент, автоматизирующий данный процесс - некий «тренажёр», выдающий разные варианты одной задачи, позволяющий решать её посредством клавиатуры и мыши (что для некоторых задач может быть более удобно) и проверяющий правильность решения.
В сети Интернет уже доступны некоторые приложения по темам курса Дискретная математика, но они предполагают автоматическое решение задачи, а не проверку решения студента с выводом результата и выводом ошибок. Есть различные калькуляторы:
- Калькулятор построения таблицы истинности, СКНФ, СДНФ, полинома Жегалкина [1];
- Калькулятор построения таблицы истинности на сайте “math.semestr.ru” [2];
- многофункциональный калькулятор для различных задач булевой алгебры на сайте “tablica-istinnosti.ru" [3].
Что, конечно, для наших целей не подойдёт, к тому же - два из них весьма несовершенны с графической точки зрения. Цель - разработать тренажёр для тренировки самостоятельного навыка решения, а не автоматического вывода результата.
Также, есть образовательные ресурсы с онлайн-курсами по Дискретной математике на сайтах «stepik.org», «coursera.org», «plario.ru», предлагающие теоретический материал и тесты.
Кроме того, студентом группы 931721 Стародубцевой М.О. разрабатывалась выпускная квалификационная работа «Создание обучающей программы по дискретной математике. Различные представления булевой функции» [4] в виде программы на языке C++ с использованием кроссплатформерного фреймворка Qt, но не предусматривающая загрузку и открытие в сети Интернет (что ограничивает удобство и возможности использования большим количеством пользователей) .
Для данной работы была выбрана задача создания многомодульного (с возможностью неограниченного расширения) тренажёра по различным задачам дискретной математики в виде интернет-сайта, доступного для открытия в интернете любым пользователем, состоящего данный момент из трёх модулей:
• Построение карты Карно для заданной булевой функции;
• Построение таблицы истинности для заданной булевой функции;
• Построение полинома Жегалкина по заданной ДНФ.
, т.к. именно такие задачи удобно визуализировать на компьютере (не нужно самостоятельно строить таблицу для заполнения), а также аналогов, собирающих множество различных тренажёров на одном сайте с автоматической генерацией примеров в каждом из них, обнаружено не было.
Для конечного пользователя тренажёр будет представлен в виде HTML- страницы с использованием CSS-свойств для визуализации и языка JavaScript для проработки логики приложения, т.к. именно связка HTML/CSS/JS воспринимается всеми распространёнными браузерами и используется для разработки сайтов.
В процессе программной реализации будут задействованы язык TypeScript (надстройка над JavaScript), препроцессор для написания CSS-кода «SCSS», JavaScript-библиотека «React» и множество входящих в неё полезных инструментов, о плюсах каждого из которых будет сказано позже .
Данная работа посвящена созданию многостраничного WEB-тренажёра по темам курса «Дискретная математика».
В ходе работы были решены поставленные задачи:
1. Проведён обзор существующих приложений по теме «Булевы функции и их представления» курса «Дискретная математика»;
2. Создано многостраничное WEB-приложение с тремя тренажёрами и возможностью выбора русского либо английского языка;
3. Приложение скомпилировано в форматы HTML/CSS/JS и готово к открытию в браузерах;
4. Написаны алгоритмы для автоматической генерации булевых функций и предусмотрена возможность использования тренажёрами как заранее подготовленных примеров из базы, так и автоматически сгенерированных;
5. Реализована адаптивность приложения для корректного отображения на всех устройствах;
6. Проведена апробация на студентах группы 932221, учтены их замечания и исправлены обнаруженные недочёты в работе.
Приложение загружено на GitHub и доступно всем желающим [10]. Исходный код доступен по отдельной ссылке [11].
В дальнейшем можно предусмотреть:
• Добавление в приложение новых тренажёров для других задач дискретной математики (приложение готово к неограниченной расширяемости);