В этой статье будет решена задача о назначениях из области дискретной математики. Статья разделена на две части, в первой была приведена вся теория, а в этой уже программа и ее частичная реализация на языке C# с приведением результатов работы приложения.
2.1 Диаграмма классов приложения
Для решения поставленной задачи будет создано программное обеспечение в виде графического приложения, написанного в парадигме объектно-ориентированного программирования.
Так как композиция нечетких бинарных отношений основывается на трех множествах, будет создан отдельный класс Many для заполнения и прочтения этих множеств. Полями данного класса будут одномерный массив типа string и переменная типа int, отвечающая за размер массива. Методами данного класса будут:
· Конструктор Many;
· Метод Masset типа bool, с входящим аргументом в виде textbox;
· Метод MasgetR для заполнения названий строк таблиц, с входящим аргументом в виде dataGridView;
· Метод MasgetC для заполнения названий столбцов таблиц с входящим аргументом в виде dataGridView.
Вторым классом является класс Table, который позволит работать с таблицами. Поля представляют из себя две переменных типа int, для задания размера двумерного массива, как поля класса. Методами данного класса являются:
· Конструктор Table;
· Метод Tablesetrandom для заполнения двумерного массива случайными значениями;
· Метод Tablesetuserтипа bool для заполнения двумерного массива значениями, которые ввел пользователь, с входящим аргументом в виде dataGridView;
· Метод Getmas для вывода отдельного элемента массива, с помощью индексации;
· Метод Tableget являющийся virtual для вывода прямоугольной таблицы, с входящим аргументом в виде dataGridView;
Класс ResultTable является дочерним классом от класса Table. Он наследуют все поля и методы родительского класса, а также имеет два новых поля типа Table. Он необходим, так как результирующая таблица основывается на двух первых с помощью композиции бинарных нечетких отношений, для которой будет создан отдельный метод. Четырьмя методами данного класса будут:
· Конструктор ResultTable;
· Метод Result1 для нахождения результирующей таблицы с помощью минимаксной композиции;
· Метод Result2 для нахождения результирующей таблицы с помощью максиминной композиции;
· Метод Tableget являющийся override для вывода результирующей квадратной таблицы, с входящим аргументом в виде dataGridView.
Класс form связывает через графический интерфейс, в частности через объект типа DataGridView классы Many и класс Table, так как оба эти класса выводят информации в общие таблицы.
2.2 Разработка алгоритмов и методов
Программная реализация композиции бинарных нечетких отношений максиминного и минимаксного типов основывается на работе алгоритма с использованием требуемых формул. Так как данная реализация основывается на задачи о назначениях, то будет разработан требуемый интерфейс для благоприятного и удобного взаимодействия пользователя с приложением. Класс Many отвечает за заполнение множеств, которые по сути являются множествами фамилий, вакансий и характеристик, где размер множеств фамилий и характеристик совпадает.
Класс Table необходим для заполнения таблиц численными значениями, вводимыми пользователем в datagridview или получаемыми случайно. Из-за того, что существует возможность ввода значений пользователем, то будет на программном уровне обрабатываться исключения. А также с помощью данного класса будут заполняться все таблицы.
Класс ResultTable являющийся дочерним от Table, будет работать только с результирующей таблице, которая формируется из двух предыдущих, поэтому полями будут две другие таблицы. В данном классе на основе алгоритма композиции будет реализован код получения результирующей таблицы.
Класс Many имеет конструктор, который присваивает значение переменной q, являющейся размером массива типа string. Далее метод Masset имеет тип возвращаемого значения bool, для того чтобы проверять на корректность выполнения этой части кода. Сам метод принимает как аргумент textbox, в котором хранится информация об элементах массива. Проверяется наличие двойного пробела между словами в textbox, для того, чтобы каждое слово выделить как элемент массива. Строка, взятая из textbox разделяется на отдельные элементы через пробел, и затем эти слова как элементы записываются в массив, который является полем класса. Если при воспроизведении данного кода возникает ошибка, то пользователю выскакивает предупреждающее сообщение о некорректности введенных слов. Следующими двумя методами являются методы MasgetR и MasgetC с общим входным аргументом datagridview, являющийся элементом Windows Forms и помогающий отобразить двумерные массивы. Методы с помощью полученного массива слова, заполняют заголовки строк и столбцов таблиц соответственно.
Класс Table имеет конструктор, для того чтобы задать значения размера таблицы. Затем метод Tablesetuser с возвращаем типом bool, имеет единственный аргумент datagridview. Пользователь в элемент Windows Forms вводит значения в каждую ячейку, затем эти данные считываются и передаются в этот метод, для проверки и записи в двумерный массив, являющийся полем класса. Для проверки правильности ввода значений используется оператор try catch, а возвращаемое логическое значение позволит определить требуется ли выйти из процесса после нажатия кнопки. Метод Tablesetrandom также заполняет таблицу посредством заполнения массива и использования этого массива для вывода в datagridview, но случайными значениями. Затем присутствует индексация массива, для работы с полем класса необходимый для вывода элементов массива. Последним методом данного класса является метод virtual Tableget с аргументом datagridview. Метод реализует заполнение прямоугольной таблицы, представленной datagridview, элементами двумерного массива.
От класса Table наследуется другой класс ResultTable, имеющий конструктор, заполняющий поля, представленные типом Table, а также поля базового класса. Два метода Result1 и Result2 реализуют алгоритм композиции бинарных нечетких отношений минимаксной и максиминной соответственно. Последний метод override Tableget, принимающий аргумент datagridview, необходим для вывода результирующей квадратной таблицы в datagridview.
На рисунках 2-3 изображены блок схемы основных и самых сложных алгоритмов, реализованных в методах класса.
2.3 Описание диалога с пользователем
Работа между пользователем и приложением будет реализована за счет Windows Forms и его элементов. Графически приложение будет иметь в себе подсказки для пользователя, указывающие правильность действий, на всем протяжении времени работы с приложением.
Изначально при запуске графического приложения пользователю будет дана возможность только для ввода размера множеств фамилий, вакансий и характеристик рисунок 4). Если пользователь решит заполнить поля текстовой информацией, числами меньше нуля или числами с запятой, то он получит предупреждение, что вводимое значения должны быть натуральными числами (рисунок 5). Далее после ввода значений и нажатии на кнопку будет выполнен код по созданию трех datagridview. Первый и второй datagridview будут иметь размерность n*k, а результирующая таблица n*n. После выполнения этих действий возможность поменять введенный данные отключается, а следующие поля открывают свой доступ (рисунок 6).
Дальнейшим действием пользователь последовательно будет вводить необходимое количество фамилий, характеристик и вакансии соответственно. Для каждого из множеств будет соответствующая кнопка с подписью. Для того чтобы пользователь не ввел больше или меньше значений чем требуется, будет выскакивать предупреждение о не верном количестве введенных слов (рисунок 7). Также для того чтобы правильно заполнить название таблиц, требуется вводить слова через пробел, но если пользователь допустил ошибку в количестве пробелов, то либо будет убран один лишний пробел и слова запишутся, либо выскачет ошибка о некорректном вводе. После ввода вакансий возможность записать новые данные отключается, но при нажатии на специальную кнопку, появится возможность повторного и последовательного перезаписывания названия строк и столбцов таблицы (рисунок 8).
На программном уровне будет отключена возможность любой запись в ячейки результирующей таблицы. В первых двух останется возможность записи в ячейки только числовых значений.
Далее пользователю потребуется выбрать один из двух типов композиций иначе при нажатии на кнопки рассчитать со случайными значениями или со значениями пользователя будет оповещение пользователя о необходимости выбора типа композиции (рисунок 9).
После выбора пользователь может рассчитывать выбранный тип композиции двумя путями. Первый путь реализован так, что по нажатию кнопки все ячейки двух первых таблиц заполнятся случайными значениями от нуля до одного и произойдет расчет, который помести вычисленные значения в ячейки результирующей таблицы (рисунок 10). При выборе второго варианта, пользователю необходимо заполнить обе таблицы числами от одного до десяти. Если пользователь запишет число меньше нуля, то оно преобразуется в ноль. Если пользователь запишет число больше десяти, то программа преобразует его в единицу. Числа, введенные от одного до десяти, будут разделены на десять и записаны в соответствующую таблицу (рисунок 11). При вводи числа с несколькими запятыми, пользователь будет оповещен о необходимости проверки полей таблиц. После корректного ввода будет произведен расчет результирующей таблицы опираясь на предварительно выбранный тип композиции (рисунок 12).
Также для нового расчета, пользователь может заново заполнить поля таблиц и нажать на кнопки расчетов. Выбор типа композиции можно изменить в любой момент. Также существует кнопка, которая позволяет перезаписать границы таблиц, но она удаляет и закрывает все ранее заполненные, полученные или открытые элементы графического приложения (рисунок 13).
2.4 Контрольный пример
Для контрольного примера создадим множества размерами два и три. То есть будет две фамилии и две вакансии, а количество характеристик равно трем. На рисунке 14 представлены полученные таблицы.
Далее заполним требующиеся таблицы своими значениями (рисунок 15).
Выберем максиминную композицию и нажмем на кнопку расчета, для того чтобы получить результат в последней таблице (рисунок 16).
Для того чтобы проверить случайное заполнением выберем другой тип композиции и нажмем на кнопку случайного расчета (рисунок 17).
Таким образом была проверена работа приложения в двух случаях, при заполнении данными, которые ввел пользователь и случайно полученными данными.
ЗАКЛЮЧЕНИЕ
В данной работе была рассмотрена программная реализации композиции бинарных нечетких отношений максиминных и минимаксных типов с точки зрения обширного раздела математики – дискретной математики. Опираясь на определениях, терминах и функциях раздела логики дискретной математики был разобран алгоритм композиций бинарных нечетких отношений. Также раздел логики позволяет решить множество повседневных проблем и задач или же улучшить и упростить работу некоторых программ. Поэтому данная композиция дает возможность решить задачу о назначениях, а именно определить кто из кандидатов имеющих определенный набор характеристик подходит на выбранный набор вакансий имеющих такой же набор характеристик.
На платформе .NET Framework с помощью C# было реализовано графическое приложения для лучше взаимодействия программы с пользователем. Графический интерфейс позволяет пользователю приложения самому выбрать все данные и заполнить таблицы, для получения конечного результата.
Таким образом графическое приложение содержащее программную реализацию композиции бинарных нечетких отношений двух типов, позволяет решить общественную задачу о назначениях, которая возникает при найме людей на работу в отделе кадров.
Подписывайтесь на наш телеграм-канал и паблик в вк чтобы ничего не пропустить.
Также на нашем ютуб-канале много интересных обучающих видео.