- •Введение
- •Постановка задачи
- •Качественное описание исследуемой операции
- •Концептуальная модель операции
- •Математическая постановка задачи
- •Алгоритмизация решения задачи
- •Анализ методов решения задачи
- •Выбор и описание метода
- •Конструирование алгоритма решения задачи
- •Выполнение третьего шага
- •Проектирование сценария диалога
- •Описание структур данных
- •Структурная схема алгоритма сценария диалога и описание его программной реализации
- •Структурная схема функционального алгоритма решения задачи
- •Численные эксперименты
- •Ручная реализация алгоритма решения задачи
- •Машинные эксперименты с разработанными данными
- •Сравнение результатов ручного и машинного расчетов
- •Заключение
- •Список используемой литературы
- •Приложение а – листинг программы
Выполнение третьего шага
Управление U3 |
Состояние предыдущего второго этапа |
||||
D2,1 |
D2,2 |
… |
D2,j |
D2,z(2) |
|
U3 = d3,1 |
|
|
… |
|
|
|
|
… |
|
|
|
U3 = d3,i |
|
|
… |
|
|
|
|
… |
|
|
|
U3 = d3,N(3) |
|
… |
… |
… |
|
|
… |
… |
… |
|
|
Проектирование сценария диалога
При создании сценария диалога необходимо учитывать следующие возможности:
Ввод данных, их корректировку;
Задание условий
Просмотр исходных данных;
Вывод результата и ход решения задачи.
В ходе реализации программы был создан сценарий диалога с пользователем, примеры которых будут представлены на следующих рисунках.
При первом запуске приложения перед пользователем появится стартовое окно программы «Оптимизация формирования численности бригад», на которой представлена вся информация, касающаяся этой темы. На рисунке 2.1 представлено это действие.
Рисунок 2.1 – Стартовое окно программы
Перед пользователем появляется выбор. Он может задать таблицу времени выполнения работы по умолчанию, при выборе пункта «Пример задачи», в следствии чего таблица заполнился автоматически Либо задать таблицу самостоятельно. Для этого ему необходимо выбрать из контекстного меню количество необходимого ему элементов задачи: количество складов, грузчиков, вариантов распределения грузчиков. После необходимо сохранить изменения таблицы и приступить к заполнению таблицы. Примеры этих действий представлены на рисунке 2.2.
Рисунок 2.2 – Реализация самостоятельного заполнения таблицы
Значения в таблице представлены количеством грузчиков и временем, затраченным на выполнение работ соответственно. Для получение ответа пользователю необходимо нажать кнопку «Решить» и в правой части программы будет представлен результат решения. Все это представлено на рисунке 2.3
Рисунок 2.3 – Результат решения программы
Также пользователь имеет возможность просмотреть пошаговое решение задачи, в этом случае ему необходимо выбрать из контекстного меню пункт «Показать шаги решения». Результат пошаговых решений программа записывает в блокнот, который и демонстрирует пользователю итог решений.
Описание структур данных
В таблице 1 представлены функции, процедуры используемые в программе.
Таблица 2.1
numM |
Задает количество складов |
numN |
Задает количество грузчиков |
numStr |
Задает количество вариантов распределения грузчиков |
buttonRazmer |
Сохраняет введенные изменения таблицы времени выполнения работ |
buttonDemo |
Задает таблицу по умолчанию |
buttonResh |
Производит решение |
buttonSteps |
Демонстрирует пошаговое решение задачи |
В таблице 2 представлены структуры и классы, используемые в программе
Таблица 2.2
Form |
class |
Создает окно |
M |
int |
Столбцы |
Str |
Int |
Строки |
N |
Int |
Количество рабочих |
Text |
string |
Решение |
Answ |
String |
Ответ |
Int[,] a |
Int |
Исходная матрица |
Int[,] T |
Int |
Матрица времени выполнения |
Int[] rabs |
Int |
Массив с количество работников |
Int[] U |
Int |
Массив управления |
Int[] sost2, sost3,sost4, sost5, sost6 |
Int |
Состояния |
Step |
Int |
Шаги |
Int[] difMas1, difMas1, difMas3 |
Int |
Временные массивы для хранения уникальных состояний |
Int[,] temp21 temp22, temp31, temp32, temp41, temp42, temp51, temp52, temp61, temp62 |
Int |
Временные матрицы для определенных шагов 1,2,3,4,5,6 |
Int[,] tab2, tab3, tab4, tab5, , tab6; |
int |
Итоговые таблицы |
i=0, j=0, s=0, p=N, t=0; |
int |
Переменные, счетчики |
Print(int[,] mas) |
Public string |
Функция вывода двумерного массива |
niz(ref int[,] temp1, int[,] a, int[,] tab) |
Public string |
Функция заполнения матрицы, соответствующая значениям нижней части |
verh(int[,] temp1, ref int[,] temp2, int[,] a, int[] difMas, int step) |
Public string |
Функция заполнения матрицы, соответствующая значениям верхней части |
max(int a, int b) |
public int |
Функция нахождения максимального элемента из двух |
min(int a, int b) |
public int |
Функция нахождения минимального элемента из двух |
countDifEl(int[,] mas, int[,] mas2, int [] U, int[,] tab, ref int[] difMas1, ref int[] difMas2, ref int[] difMas3, ref int[] sost) |
public void |
Функция нахождения различных значений (количеств работников) в нижней части клетки и минимальных в верхней |
search(int[,] mas, int[,] mas2, int a, int b, ref int f) |
public void |
Функция поиска состояния (количества работников) для обратного просмотра |
minTime(int step, int[,] tab, ref int[] answer, ref int t) |
public string |
Функция нахождения минимального времени выполнения работ |
printAnswer(int[] answer) |
public string |
Функция вывода ответа |
