Решение задач методом динамического программирования
Составление математической модели функционирования предприятия, используя метод динамического программирования. Ознакомление с требованиями к эргономике, программно-аппаратному и техническому обеспечению. Руководство программисту и пользователю.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | курсовая работа |
Язык | русский |
Дата добавления | 28.04.2014 |
Размер файла | 834,6 K |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
Размещено на http://www.allbest.ru/
Содержание
динамический программирование математический эргономика
Введение
1. Постановка задачи
1.1 Требования к системе и её структуре
1.2 Требования к функциям, выполняемым системой
1.3 Требования к программно-аппаратному обеспечению
1.4 Требования к техническому обеспечению
1.5 Требования к эргономике и технической эстетике
1.6 Требования к надежности и хранению информации
2. Основная часть
2.1 Математическая модель
2.2 Метод решения задачи
2.3 Структурная схема программы
2.4 Схема взаимодействия модулей
3. Руководство программисту
4. Руководство пользователю
4.1 Общие сведения
4.2 Работа с помощью
4.3 Наиболее вероятные ошибки
Заключение
Приложение А - Текст программы
Приложение Б - Формы программы
Приложение В - Диск с программой
Аннотация
Курсовой проект на тему "Решение задач методом динамического программирования" содержит введение, четыре главы, заключение и приложения, которые состоят из текста, формы программы и диска с программой.
Программный продукт разработан в среде программирования Borland Delphi 7. Данная программа предназначена для получения практических навыков в разработке программных средств с использованием современных алгоритмических языков программирования и информационных технологий, стандартизации основных этапов жизненного цикла программных средств, стандартизации документирования программных средств, обеспечении надежности и качества функционирования программных средств, использовании методов тестирования программного обеспечения.
Имеется удобный и понятный интерфейс для работы с программой.
Введение
Динамическое программирование (иначе - динамическое планирование) - это метод нахождения оптимальных решений в задачах с многошаговой (многоэтапной) структурой. Многие экономические процессы расчленяются на шаги естественным образом. Это все процессы планирования и управления, развиваемые во времени. Естественным шагом в них может быть год, квартал, месяц, декада, неделя, день и т. д. Однако метод динамического программирования может использоваться при решении задач, где время вообще не фигурирует; разделение на шаги в таких задачах вводится искусственно. Поэтому "динамика" задач динамического программирования заключается в методе решения.
В экономической практике встречается несколько типов задач, которые по постановке или способу решения относятся к задачам динамического программирования. Это задачи оптимального перспективного и текущего планирования во времени. Их решают либо путем составления комплекса взаимосвязанных статических моделей для каждого периода, либо путем составления единой динамической задачи оптимального программирования с применением многошаговой процедуры принятия решений.
Цель курсового проекта: разработать программный продукт по реализации метода динамического программирования.
Задачи курсового проекта:
- изучить теоретический материал по теме работы;
- изучить метод динамического программирования;
- описать создание программного продукта по теме работы.
1. Постановка задачи
Составить математическую модель функционирования предприятия, используя метод динамического программирования.
Разработать интерфейс программного продукта.
Описать предъявляемые требования к эргономике и технической эстетики для разработанного интерфейса программы. Разработать программный продукт по реализации метода динамического программирования.
К основным параметрам функциональных задач в постановке задачи относятся:
1)цель и назначение данной задачи состоит в том, чтобы разработать программный продукт для "Решения задач методом динамического программирования";
2)условия решения задачи с использованием средств вычислительной техники:
- процессор: Pentium/Celeron/AMD K5- 2400 MHz;
- монитор SVGA, поддерживающий графический режим 1024*768;
- размер ОЗУ 1024Мб;
- свободное пространство на жестком диске не менее 20 Мб;
- видео карта 512 Мб;
- клавиатура;
- мышь;
3)содержание функций обработки входной информации при решения задачи: по введенным данным будет производиться расчет задачи;
4)требование к периодичности решения задачи: данный программный продукт будет использоваться по требованию оператора;
5)ограничение по срокам и точностям выходной информации: информация предоставляется сразу после завершения процесса обработки входной информации;
6)состав и форма представления выходной информации: выходные данные выводятся на экран;
7)источники входной информации для решения задачи: сеть дорог с указанными стоимостями перевозки груза;
8)пользователи задачи: программный продукт рассчитан на конечного пользователя.
1.1 Требования к системе и её структуре
Для нормальной работы разрабатываемой программы необходимо наличие следующего программного обеспечения:
1)операционная система Windows 98, NT, XP, Vista, 7, 8;
2)набор технологий и инструментов DirectX.
DirectX представляет собой набор технологий и инструментов, которые позволяют создавать разработчику игры и мультимедиа приложения с неслыханным во времена MS-DOS качеством графики и звука. Кроме этого, DirectX служит для обработки клавиатуры, мыши, джойстика, а также для сетевого сообщения.
DirectX подразделяется на несколько частей, каждая из которых отвечает за что-то свое:
DirectDraw - служит для ускорения отображения и обработки двумерной графики.
Direct3D - для ускорения трехмерной графики.
DirectSound - работает со звуком - микширование и 3D звук.
DirectInput - для обработки клавиатуры, мыши, джойстика и так далее.
DirectPlay - служит в основном для сетевой игры.
Эти разделы освещаются здесь, в уголке. Кроме этого существуют и другие разделы:
DirectAnimation - для создания анимационных эффектов в WEB-стриницах.
DirectShow - для применения мультимедиа в WEB.
1.2 Требования к функциям, выполняемым системой
Разработанный программный продукт "Решение задач методом динамического программирования" должен удовлетворять эргономическим требованиям, требованиям к программно-аппаратному окружению, а также требованиям к надежности и хранению информации. Обладать автоматизированным сбором информации, представлять информацию в более удобном виде.
В программном продукте реализованы следующие функции:
- решение задачи динамического программирования;
- быстрое заполнение таблицы данными;
- построение графика(оптимального пути);
- справка;
- очистка полей с решением, таблицы, графика(оптимального пути).
1.3 Требования к программно - аппаратному обеспечению
Программное обеспечение должно удовлетворять следующим требованиям:
- возможность экономично и целесообразно использовать предоставляемую память;
- включать в себя проверку целостности данных;
- при возникновении ошибок выдавать сообщения, отражающие суть ошибок, облегчающее их исправление.
Для корректной работы с программным продуктом необходимо наличие следующих минимальных конфигураций аппаратного окружения :
- операционная система Windows XP, Windows 7 Ultimate;
- Delphi 7;
- Microsoft Office 2003, 2007.
При выполнении курсового проекта ПК имел следующие характеристики:
- процессор Intel Atom N570 CPU 3.2 GHz;
- RAM - 4Gb;
- HDD - 650Gb;
- клавиатура;
- мышь;
- монитор LG G2225HQ;
- операционная система Windows 7 Ultimate x86;
- сетевая карта Realtek PCIe FE Family Controller.
1.4 Требования к техническому обеспечению
Для работы с программным продуктом необходимо наличие следующих минимальных конфигураций аппаратного окружения:
- процессор Intel Atom N570 CPU 3.2 GHz;
- RAM - 1Gb;
- HDD - 120Gb;
- клавиатура;
- мышь;
- монитор LG G2225HQ;
- сетевая карта Realtek PCIe FE Family Controller.
1.5 Требования к эргономике и технической эстетике
Эргономика представляет собой научную дисциплину, комплексно изучающую человека в конкретных условиях его деятельности. Возникшая на стыке общественных, технических и естественных наук, она является одновременно и проектной, и научной дисциплиной.
Взаимодействие пользователей с прикладным программным обеспечением, входящим в состав системы должно осуществляться посредством визуального графического интерфейса. Интерфейс системы должен быть понятным и удобным, не должен быть перегружен графическими элементами и должен обеспечивать быстрое отображение экранных форм. Навигационные элементы должны быть выполнены в удобной для пользователя форме. Средства редактирования информации должны удовлетворять принятым соглашениям в части использования функциональных клавиш, режимов работы, поиска, использования оконной системы. Ввод-вывод данных системы, прием управляющих команд и отображение результатов их исполнения должны выполняться в интерактивном режиме. Интерфейс должен соответствовать современным. эргономическим требованиям и обеспечивать удобный доступ к основным функциям и операциям системы.
Интерфейс должен быть рассчитан на преимущественное использование манипулятора типа "мышь", то есть управление системой должно осуществляться с помощью набора экранных меню, кнопок, значков и т. п. элементов. Клавиатурный режим ввода должен используется главным образом при заполнении и/или редактировании текстовых и числовых полей экранных форм. Все надписи экранных форм, а также сообщения, выдаваемые пользователю (кроме системных сообщений) должны быть на русском языке.
Система должна обеспечивать корректную обработку аварийных ситуаций, вызванных неверными действиями пользователей, неверным форматом или недопустимыми значениями входных данных. В указанных случаях система должна выдавать пользователю соответствующие сообщения, после чего возвращаться в рабочее состояние, предшествовавшее неверной (недопустимой) команде или некорректному вводу данных.
Экранные формы должны проектироваться с учетом требований унификации:
- все экранные формы пользовательского интерфейса должны быть выполнены в едином графическом дизайне, с одинаковым расположением основных элементов управления и навигации;
- для обозначения сходных операций должны использоваться сходные графические значки, кнопки и другие управляющие (навигационные) элементы. Термины, используемые для обозначения типовых операций (добавление информационной сущности, редактирование поля данных), а также последовательности действий пользователя при их выполнении, должны быть унифицированы;
- внешнее поведение сходных элементов интерфейса (реакция на наведение указателя "мыши", переключение фокуса, нажатие кнопки) должны реализовываться одинаково для однотипных элементов.
1.6 Требования к надежности и хранению информации
Надежность - это одно из важнейших свойств программного продукта, обеспечение которого даёт возможность предусмотреть различные ситуации, когда операционная система или пользователь не могут корректно работать с программой. Например, неправильный ввод (текст вместо цифр), не поддерживаемая операционная система и т.д.
Вся система должна обладать надёжностью, необходимо предусмотреть, самые неожиданные действия пользователя и если они неправильны, программа должна объяснить, как сделать то, чего хочет программа от пользователя.
Данный программный продукт характеризуется высокой степенью надежности хранения информации. При некорректных действиях пользователя программа не должна производить аварийное завершение работы, потому что это повлечет за собой потерю данных, а соответствующим образом обрабатывать эти действия, не прерывая нормальный ход программы.
Помимо этого в программе предусмотрено жесткий контроль вводимой информации, для сокращения случайных ошибок пользователя.
Хранение программного продукта может осуществляться на любом магнитном или оптическом носителе информации. В нашем случае применены компакт диски CD-R/DWD-R и Flash - носители.
Следует признать, что абсолютно надежных программ не существует, так как абсолютная степень надежности не может быть теоретически доказана и, следовательно, недостижима. Описанные модели представляют теоретический подход и, как правило, имеют ограниченное применение.
Типовая структура характеристик и атрибутов качества для оценивания исполняемого программного обеспечения, применяемые метрики, соответствующие виды, испытаний и методы измерений в методике представляются в таблицах.
Регистрация означает протоколирование выявляемых в процессе оценивания событий или проявлений ошибок (недостатков, нарушений требований).
Программная документация, в общем виде, должна удовлетворять следующим требованиям:
- соответствие требованиям стандартов единой системы программной документации;
- понятность документации;
- полнота документации;
- возможность освоения программного обеспечения по документации;
- возможность освоения программного обеспечения на контрольном примере;
- легкость установки и запуска программного обеспечения;
- понятность входных и выходных данных;
- наличие описания структуры функций программного обеспечения;
- соответствие функций программного обеспечения требованиям техническому заданию;
- наличие описания функций программного обеспечения;
- отсутствие противоречий в реализации интерфейса с пользователем;
- отсутствие противоречий в диагностике системы;
- обеспечение помощи пользователю при затруднениях средствами функции подсказки;
- достаточность документации для ввода программного обеспечения в эксплуатации;
- правильность документации;
- приемлемость уровня технического исполнения документации;
- наличие краткой аннотации программного обеспечения;
- наличие описания решаемых задач;
- наличие описания ограничении по применению;
- наличие описания алгоритмов.
2. Основная часть
2.1 Математическая модель
Математическая модель - это математическое представление реальности.
Математическое моделирование - это процесс построения и изучения математических моделей.
Все естественные и общественные науки, использующие математический аппарат, по сути, занимаются математическим моделированием: заменяют реальный объект его математической моделью и затем изучают последнюю.
Одним из методов математического моделирования является метод динамического программирования.
Под динамическим программированием понимают некоторый специальный метод оптимизации, суть которого состоит в отыскании оптимального решения путем выполнения вычислений в несколько шагов (этапов). Вся задача оптимизации разделяется на несколько шагов, причем все шаги могут быть уникальными или одинаковыми и чередоваться друг с другом.
При использовании динамического программирования многошаговая задача решается дважды: от конца к началу и от начала к концу. Первый этап длительный и трудоемкий, второй - короткий и уточняет решение первого этапа.
2.2 Метод решения задачи
Решение задач - процесс, являющийся составной частью мышления, выполнение действий или мыслительных операций, направленное на достижение цели, заданной в рамках проблемной ситуации.
Основное функциональное уравнение динамического программирования
, , (1)
где:
- множество состояний, в которых система находится перед i-м шагом;
- множество состояний системы в конце i-го шага;
Ui - множество управлений на i-ом шаге, под воздействием которых система переходит в одно из состояний множества xi;
- условно-оптимальное значение целевой функции на интервале от i-го до n-го шага включительно;
- значение целевой функции на i-ом шаге для всех управлений из множества Ui;
- условно-оптимальное значение целевой функции на интервале от (i+1)-го шага до N-го включительно.
На последнем N шаге справедлива следующая формула:
, (2)
Пример.
Дана сеть дорог с транспортными расходами. Необходимо найти оптимальный маршрут с минимальными затратами.
Решим задачу методом динамического программирования.
Рисунок 1 - Сеть дорог
Таблица 1 - Разбиение сети дорог на группы
1 шаг |
2 шаг |
3 шаг |
4 шаг |
5 шаг |
|
1 |
2 |
5 |
8 |
10 |
|
3 |
6 |
9 |
|||
4 |
7 |
Таблица 2 - Первый этап условной оптимизации
Х3 |
U4 |
X4 |
F4 |
|
C8 |
(8;10) |
C10 |
3 |
|
C9 |
(9;10) |
C10 |
2 |
Таблица 3 - Второй этап условной оптимизации
X2 |
U3 |
X3 |
Z3 |
F4 |
Z3+F4 |
F2 |
|
C5 |
(5;8) |
C8 |
7 |
3 |
10 |
||
C5 |
(5;9) |
C9 |
4 |
2 |
6 |
6 |
|
C6 |
(6;8) |
C8 |
4 |
3 |
7 |
7 |
|
C6 |
(6;9) |
C9 |
6 |
2 |
8 |
||
C7 |
(7;8) |
C8 |
6 |
3 |
9 |
||
С7 |
(7;9) |
С9 |
5 |
2 |
7 |
7 |
Таблица 4 - Третий этап условной оптимизации
X1 |
U2 |
X2 |
Z2 |
F3 |
Z2+F3 |
F2 |
|
C2 |
(2;5) |
С5 |
3 |
6 |
9 |
9 |
|
C2 |
(2;6) |
C6 |
3 |
7 |
10 |
||
C2 |
(2;7) |
C7 |
6 |
7 |
13 |
||
C3 |
(3;5) |
C5 |
3 |
6 |
9 |
||
C3 |
(3;6) |
C6 |
6 |
7 |
13 |
||
C3 |
(3;7) |
C7 |
1 |
7 |
8 |
||
C4 |
(4;5) |
C5 |
6 |
6 |
12 |
8 |
|
C4 |
(4;6) |
C6 |
1 |
7 |
8 |
||
С4 |
(4;7) |
С7 |
3 |
7 |
10 |
8 |
Таблица 5 - Четвертый этап условной оптимизации
X0 |
U1 |
X1 |
Z1 |
F2 |
Z1+F2 |
F1 |
|
C1 |
(1;2) |
C2 |
1 |
9 |
10 |
||
C1 |
(1;3) |
C3 |
5 |
8 |
13 |
||
C1 |
(1;4) |
C4 |
1 |
8 |
9 |
9 |
Таким образом, рассматривая таблицы решения с последней по первую, получаем наиболее экономный маршрут перевозки, который проходит через пункты 1, 4, 7, 9, 10 при этом транспортные расходы составляют 9 денежных единиц на единицу груза.
2.3 Структурная схема программы
Программный продукт имеет конструкцию построения - состав и взаимосвязь программный модулей. Пример структурной схемы программы представлен на рисунке 2.
Рисунок 2 - Структурная схема программы
2.4 Схема взаимодействия модулей
Программа содержит 3 модуля. Схема взаимодействия модулей программы изображена на рисунке 3.
Рисунок 3 - Структурная схема программы
3. Руководство программисту
Данный программный продукт написан в среде визуального программирования Borland Delphi 7 и был основан на модульном программировании. В программе используются стандартные компоненты Delphi, с помощью которых осуществляется её реализация. Программа включает в себя следующие файлы:
- glavnaya.dpr - содержит общее описание проекта;
- glavnaya.cfg - содержит параметры и настройки компилятора;
- glavnaya.dof - содержит параметры и настройки проекта;
- glavnaya.res - файл ресурсов;
- glavnaya.exe - исполнимый файл;
- файлы с расширением *.pas - файлы модулей которые содержат код программы;
- файлы с расширением *.dfm - файлы в которых находится описание окон;
- файлы с расширением *.dcu - результат преобразования текста модулей в машинные инструкции.
Все вышеперечисленные файлы необходимы для правильной организации программы. Переименование или удаление любого из файлов приведет к сбою в работе программы.
Программы включает в себя 3 модуля каждые из которых выполняют определенные функции:
zagruzk - загрузка программы;
glav - рабочая среда программы;
spravka - вызов справки.
Для начала работы с программой нужно запустить файл DM.exe.
Текст программы представлен в приложении А.
4. Руководство пользователю
4.1 Общие сведения
Данная программа предназначена для решения задач методом динамического программирования.
Для начала работы с программой необходимо запустить файл DM.exe.
В появившемся окне нужно нажать кнопку запустить программу, далее появится интерфейс программы, сначала нужно заполнить таблицу, потом нажать кнопку "Решить". В этом случае вы получите подробное решение задачи.
Работу программы можно посмотреть в приложении Б.
4.2 Работа с помощью
В программном продукте предоставлена справка, в которой написано как работать с программой и описание метода.
Для вызова справки нужно выбрать на панели инструментов пункт "Справка", которая состоит из трех подпунктов "О программе", "Приступая к работе", "О разработчике".
1)Справка "О программе"
Рисунок 4 - Справка "О программе"
2)Справка "Приступая к работе"
Рисунок 5 - Справка "Приступая к работе"
3)Справка "О разработчике"
Рисунок 6 - Справка "О разработчике"
4.3 Наиболее вероятные ошибки
В процессе работы с программой появляются сообщения об ошибках, случае если не все поля заполнены.
Окно ошибки при не вводе информации.
Рисунок 7 - Ошибка
Заключение
В курсовом проекте изложен теоретический материал по теме "Решения задач методом динамического программирования", приведен пример решения задач данным методом.
Результатом курсового проекта является программный продукт, выполненный в среде программирования Borland Delphi 7, с использованием дополнительных компонентов, и разработан по всем правилам разработки программного продукта.
Были получены и закреплены знания по дисциплинам "Математические методы" и "Технология разработки программных продуктов". Полученные профессиональные компетенции за время выполнения курсового проекта в дальнейшем будут применяться в разработке программ.
Таким образом, цель курсового проекта достигнута, задачи выполнены.
Приложение A
Текст программы
unit zagruzka;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls, StdCtrls, ComCtrls, XPMan, jpeg, Gauges, Buttons;
type
Tzagruzk = class(TForm)
Image1: TImage;
Timer1: TTimer;
XPManifest1: TXPManifest;
Gauge1: TGauge;
BitBtn1: TBitBtn;
Label1: TLabel;
procedure Timer1Timer(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure BitBtn1Click(Sender: TObject);
procedure BitBtn2Click(Sender: TObject);
private
{ Private declarations } public
{ Public declarations }
end;
var
zagruzk: Tzagruzk;
i:integer;
implementation
uses glav;
{$R *.dfm}
procedure Tzagruzk.Timer1Timer(Sender: TObject);
begin
Timer1.Enabled := Gauge1.Progress < Gauge1.MaxValue ;
Gauge1.Progress := Gauge1.Progress + 1;
if Gauge1.Progress = 100 then
close;
end;
procedure Tzagruzk.Button1Click(Sender: TObject);
begin
Timer1.Enabled := true;
end;
procedure Tzagruzk.BitBtn1Click(Sender: TObject);
begin
Timer1.Enabled := true;
label1.Visible := true;
gauge1.Visible := true;
end;
procedure Tzagruzk.BitBtn2Click(Sender: TObject);
begin
close;
end;
end.
unit glav;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls, StdCtrls, Mask, Grids, XPMan, Buttons, Menus;
type
Tglmenu = class(TForm)
GroupBox1: TGroupBox;
Button1: TButton;
Shape15: TShape;
Shape14: TShape;
Shape13: TShape;
Shape12: TShape;
Shape11: TShape;
S: TStringGrid;
Button4: TButton;
Label20: TLabel;
Button5: TButton;
GroupBox3: TGroupBox;
Label15: TLabel;
Label16: TLabel;
Label17: TLabel;
Label18: TLabel;
Label19: TLabel;
Shape16: TShape;
XPManifest1: TXPManifest;
Shape7: TShape;
Shape4: TShape;
Shape3: TShape;
Shape10: TShape;
Shape1: TShape;
Shape9: TShape;
Shape5: TShape;
Shape2: TShape;
Shape8: TShape;
Shape6: TShape;
Label9: TLabel;
Label8: TLabel;
Label7: TLabel;
Label6: TLabel;
Label5: TLabel;
Label4: TLabel;
Label3: TLabel;
Label2: TLabel;
Label14: TLabel;
Label13: TLabel;
Label12: TLabel;
Label11: TLabel;
Label10: TLabel;
Label21: TLabel;
Image1: TImage;
Button6: TButton;
Edit1: TEdit;
Label1: TLabel;
MainMenu1: TMainMenu;
N1: TMenuItem;
N5: TMenuItem;
N6: TMenuItem;
N7: TMenuItem;
N8: TMenuItem;
N9: TMenuItem;
procedure FormCreate(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button4Click(Sender: TObject);
procedure SKeyPress(Sender: TObject; var Key: Char);
procedure Button3Click(Sender: TObject);
procedure Button5Click(Sender: TObject);
procedure FormKeyPress(Sender: TObject; var Key: Char);
procedure Button6Click(Sender: TObject);
procedure Edit1Change(Sender: TObject);
procedure Edit1KeyPress(Sender: TObject; var Key: Char);
procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
procedure BitBtn2Click(Sender: TObject);
procedure BitBtn1Click(Sender: TObject);
procedure Button7Click(Sender: TObject);
procedure FormShow(Sender: TObject);
procedure N10Click(Sender: TObject);
procedure N6Click(Sender: TObject);
procedure N7Click(Sender: TObject);
procedure N8Click(Sender: TObject);
procedure N1Click(Sender: TObject);
procedure N9Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
glmenu: Tglmenu; f:array[1..10] of tpoint; h1,h2,h3,h4,t2,t3,t4,r,g,g1,i,j:integer;
bufer:string;
implementation
uses zagruzka, spravk;
{$R *.dfm}
procedure Tglmenu.FormCreate(Sender: TObject);
var i,j:integer; t:string;
begin
canvas.MoveTo(584,464);
canvas.LineTo(72,496);
s.cells[0,0]:='Путь';
s.cells[0,1]:='Вес';
s.Cells[1,0]:='С1-2 ';
s.Cells[2,0]:='С1-3 ';
s.Cells[3,0]:='С1-4 ';
s.Cells[4,0]:='С2-5 ';
s.Cells[5,0]:='С2-6 ';
s.Cells[6,0]:='С2-7 ';
s.Cells[7,0]:='С3-5 ';
s.Cells[8,0]:='С3-6 ';
s.Cells[9,0]:='С3-7 ';
s.Cells[10,0]:='С4-5 ';
s.Cells[11,0]:='С4-6 ';
s.Cells[12,0]:='С4-7 ';
s.Cells[13,0]:='С5-8 ';
s.Cells[14,0]:='С5-9 ';
s.Cells[15,0]:='С6-8 ';
s.Cells[16,0]:='С6-9 ';
s.Cells[17,0]:='С7-8 ';
s.Cells[18,0]:='С7-9 ';
s.Cells[19,0]:='С8-10';
s.Cells[20,0]:='С9-10';
end;
procedure Tglmenu.Button1Click(Sender: TObject);
var i,j,x,y:integer; t,yr:string;
begin
label11.Visible:=true;
label12.Visible:=true;
label13.Visible:=true;
label14.Visible:=true;
f[1].x:=90;
f[1].y:=135;
f[2].x:=200;
f[2].y:=50;
f[3].x:=200;
f[3].y:=135;
f[4].x:=200;
f[4].y:=225;
f[5].y:=225;
f[5].x:=330;
f[5].y:=50;
f[6].x:=330;
f[6].y:=135;
f[7].x:=330;
f[7].y:=225;
f[8].x:=460;
f[8].y:=90;
f[9].x:=460;
f[9].y:=180;
f[10].x:=570;
f[10].y:=135;
for i:=1 to s.colcount-1 do
if s.Cells[i,1]<>'' then
begin
t:=s.cells[i,0];
yr:=t[4];
if t[4]='1' then yr:='10';
image1.canvas.MoveTo(f[strtoint(t[2])].x,f[strtoint(t[2])].y);
image1.canvas.LineTo(f[strtoint(yr)].x,f[strtoint(yr)].y);
x:=round((f[strtoint(t[2])].x+f[strtoint(yr)].x)/2);
y:=round((f[strtoint(t[2])].y+f[strtoint(yr)].y)/2);
image1.Canvas.TextOut(x,y,s.cells[i,1]);
end;
end;
procedure Tglmenu.Button2Click(Sender: TObject);
begin
image1.Canvas.Brush.Color:=ClWhite;
image1.Canvas.FillRect(Canvas.ClipRect);
end;
procedure Tglmenu.Button4Click(Sender: TObject);
var i:integer;
begin
t2:=0;
t3:=0;
t4:=0;
h1:=100;
h2:=100;
h3:=100;
h4:=100;
if (s.Cells[20,1]='') and (s.Cells[19,1]<>'') then
begin
h4:=strtoint(s.Cells[19,1]);
t4:=8;
end;
if (s.Cells[20,1]<>'') and (s.Cells[19,1]='') then
begin
h4:=strtoint(s.Cells[20,1]);
t4:=9;
end;
if (s.Cells[20,1]<>'') and (s.Cells[19,1]<>'') then
begin
if s.Cells[20,1]<s.Cells[19,1] then
begin
h4:=strtoint(s.Cells[20,1]);
t4:=9;
end
else
begin
h4:=strtoint(s.Cells[19,1]);
t4:=8;
end;
end;
if t4=8 then
begin
if (s.Cells[13,1]<>'') and (strtoint(s.Cells[13,1])<h3) then
begin
t3:=5;
h3:=strtoint(s.cells[13,1]);
end;
if (s.Cells[15,1]<>'') and (strtoint(s.Cells[15,1])<h3) then
begin
t3:=6;
h3:=strtoint(s.cells[15,1]);
end;
if (s.Cells[17,1]<>'') and (strtoint(s.Cells[17,1])<h3) then
begin
t3:=7;
h3:=strtoint(s.cells[17,1]);
end;
end;
if t4=9 then
begin
if (s.Cells[14,1]<>'') and (strtoint(s.Cells[14,1])<h3) then
begin
t3:=5;
h3:=strtoint(s.cells[14,1]);
end;
if (s.Cells[16,1]<>'') and (strtoint(s.Cells[16,1])<h3) then
begin
t3:=6;
h3:=strtoint(s.cells[16,1]);
end;
if (s.Cells[18,1]<>'') and (strtoint(s.Cells[18,1])<h3) then
begin
t3:=7;
h3:=strtoint(s.cells[18,1]);
end;
end;
if t3=5 then
begin
if (s.Cells[4,1]<>'') and (strtoint(s.Cells[4,1])<h2) then
begin
t2:=2;
h2:=strtoint(s.cells[4,1]);
end;
if (s.Cells[7,1]<>'') and (strtoint(s.Cells[7,1])<h2) then
begin
t2:=3;
h2:=strtoint(s.cells[7,1]);
end;
if (s.Cells[10,1]<>'') and (strtoint(s.Cells[10,1])<h2) then
begin
t2:=4;
h2:=strtoint(s.cells[10,1]);
end;
end;
if t3=6 then
begin
if (s.Cells[5,1]<>'') and (strtoint(s.Cells[5,1])<h2) then
begin
t2:=2;
h2:=strtoint(s.cells[5,1]);
end;
if (s.Cells[8,1]<>'') and (strtoint(s.Cells[8,1])<h2) then
begin
t2:=3;
h2:=strtoint(s.cells[8,1]);
end;
if (s.Cells[11,1]<>'') and (strtoint(s.Cells[11,1])<h2) then
begin
t2:=4;
h2:=strtoint(s.cells[11,1]);
end;
end;
if t3=7 then
begin
if (s.Cells[6,1]<>'') and (strtoint(s.Cells[6,1])<h2) then
begin
t2:=2;
h2:=strtoint(s.cells[6,1]);
end;
if (s.Cells[9,1]<>'') and (strtoint(s.Cells[9,1])<h2) then
begin
t2:=3;
h2:=strtoint(s.cells[9,1]);
end;
if (s.Cells[12,1]<>'') and (strtoint(s.Cells[12,1])<h2) then
begin
t2:=4;
h2:=strtoint(s.cells[12,1]);
end;
end;
if t2=2 then
begin
h1:=strtoint(s.cells[1,1]);
end;
if t2=3 then
begin
h1:=strtoint(s.cells[2,1]);
end;
if t2=4 then
begin
h1:=strtoint(s.cells[3,1]);
end;
label20.caption:='Длина пути '+inttostr(h1+h2+h3+h4);
label15.caption:='Вершина 1';
label16.caption:='Вес к вершине '+inttostr(t2)+' - '+inttostr(h1);
label17.caption:='Вес к вершине '+inttostr(t3)+' - '+inttostr(h2);
label18.caption:='Вес к вершине '+inttostr(t4)+' - '+inttostr(h3);
label19.caption:='Вес к вершине 10 - '+inttostr(h4);
label15.Visible:=true;
label16.Visible:=true;
label17.Visible:=true;
label18.Visible:=true;
label19.Visible:=true;
label20.Visible:=true;
end;
procedure Tglmenu.SKeyPress(Sender: TObject; var Key: Char);
begin
if s.cells[s.Col,s.row]='--' then key:=#0;
end;
procedure Tglmenu.Button3Click(Sender: TObject);
var i:integer;
begin
for i:=1 to s.colcount-1 do
s.cells[i,1]:='';
edit1.Text:='';
end;
procedure Tglmenu.Button5Click(Sender: TObject);
var x,y:integer;
begin
image1.Canvas.Brush.Color:=ClWhite;
image1.Canvas.FillRect(Canvas.ClipRect);
image1.canvas.MoveTo(f[1].x,f[1].y);
image1.canvas.LineTo(f[t2].x,f[t2].y);
x:=round((f[1].x+f[t2].x)/2);
y:=round((f[1].y+f[t2].y)/2);
image1.canvas.TextOut(x,y,inttostr(h1));
image1.canvas.MoveTo(f[t2].x,f[t2].y);
image1.canvas.LineTo(f[t3].x,f[t3].y);
x:=round((f[t2].x+f[t3].x)/2);
y:=round((f[t2].y+f[t3].y)/2);
image1.canvas.TextOut(x,y,inttostr(h2));
image1.canvas.MoveTo(f[t3].x,f[t3].y);
image1.canvas.LineTo(f[t4].x,f[t4].y);
x:=round((f[t3].x+f[t4].x)/2);
y:=round((f[t3].y+f[t4].y)/2);
image1.canvas.TextOut(x,y,inttostr(h3));
image1.canvas.MoveTo(f[t4].x,f[t4].y);
image1.canvas.LineTo(f[10].x,f[10].y);
x:=round((f[t4].x+f[10].x)/2);
y:=round((f[t4].y+f[10].y)/2);
image1.canvas.TextOut(x,y,inttostr(h4));
end;
procedure Tglmenu.FormKeyPress(Sender: TObject; var Key: Char);
begin
if (key='k')or(key='K')or(key='Л')or(key='л') then
begin
glmenu.Height:=423;
s.top:=328;
button1.Visible:=false;
button4.Visible:=false;
button5.Visible:=false;
end;
if (key='j')or(key='J')or(key='О')or(key='о') then
begin
glmenu.Height:=475;
s.top:=368;
button1.Visible:=true;
button4.Visible:=true;
button5.Visible:=true;
end;
end;
procedure Tglmenu.Button6Click(Sender: TObject);
begin
bufer:=edit1.Text;
g1:=20;
r:=0;
g:=length(bufer);
s.ColCount:=g1+1;
for i:=1 to g1 do
for j:=1 to g1 do
begin
r:=r+1;
if r<=g then
s.Cells[j,i]:=bufer[r];
end;
end;
procedure Tglmenu.Edit1Change(Sender: TObject);
begin
Edit1.MaxLength := 20;
if length(edit1.Text)=20 then button6.Enabled:=true else
button6.Enabled:=false;
end;
procedure Tglmenu.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
if not (key in['0'..'9',decimalseparator,#8]) then key:=#0;
end;
procedure Tglmenu.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
CanClose := MessageBox(Application.Handle,'Закрыть программу?','Предупреждение',MB_YESNO)=ID_YES;
end;
procedure Tglmenu.BitBtn2Click(Sender: TObject);
begin
glmenu.close;
end;
procedure Tglmenu.BitBtn1Click(Sender: TObject);
begin
spravka.show;
end;
procedure Tglmenu.Button7Click(Sender: TObject);
begin
image1.Canvas.Brush.Color:=ClWhite;
image1.Canvas.FillRect(Canvas.ClipRect);
for i:=1 to s.colcount-1 do
s.cells[i,1]:='';
edit1.Text:='';
label15.Visible:=false;
label16.Visible:=false;
label17.Visible:=false;
label18.Visible:=false;
label19.Visible:=false;
label20.Visible:=false;
end;
procedure Tglmenu.FormShow(Sender: TObject);
begin
zagruzk.showmodal;
end;
procedure Tglmenu.N10Click(Sender: TObject);
begin
glmenu.close;
end;
procedure Tglmenu.N6Click(Sender: TObject);
var i:integer;
begin
for i:=1 to s.colcount-1 do
s.cells[i,1]:='';
edit1.Text:='';
end;
procedure Tglmenu.N7Click(Sender: TObject);
begin
image1.Canvas.Brush.Color:=ClWhite;
image1.Canvas.FillRect(Canvas.ClipRect);
end;
procedure Tglmenu.N8Click(Sender: TObject);
begin
image1.Canvas.Brush.Color:=ClWhite;
image1.Canvas.FillRect(Canvas.ClipRect);
for i:=1 to s.colcount-1 do
s.cells[i,1]:='';
edit1.Text:='';
label15.Visible:=false;
label16.Visible:=false;
label17.Visible:=false;
label18.Visible:=false;
label19.Visible:=false;
label20.Visible:=false;
end;
procedure Tglmenu.N1Click(Sender: TObject);
begin
spravka.show;
end;
procedure Tglmenu.N9Click(Sender: TObject);
begin
close;
end;
end.
unit spravk;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ImgList, OleCtrls, SHDocVw, ComCtrls;
type
Tspravka = class(TForm)
TreeView1: TTreeView;
WebBrowser1: TWebBrowser;
ImageList1: TImageList;
procedure TreeView1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
spravka: Tspravka;
implementation
{$R *.dfm}
procedure Tspravka.TreeView1Click(Sender: TObject);
begin
if TreeView1.Items.Item[0].Selected then WebBrowser1.Navigate(ExtractFilePath(Application.ExeName)+'spravka/O programme.htm');
if TreeView1.Items.Item[1].Selected then WebBrowser1.Navigate(ExtractFilePath(Application.ExeName)+'spravka/Pristupayakrabote.htm');
if TreeView1.Items.Item[2].Selected then WebBrowser1.Navigate(ExtractFilePath(Application.ExeName)+'spravka/Razrabotchik.htm');
end;
end.
Приложение Б
Формы программы
1)Запуск программы.
Рисунок 8 - Запуск программы
2)Построение сети дорог.
Рисунок 9 - Построение сети дорог
3)Оптимальный путь.
Рисунок 10 - Оптимальный путь
4) Справка "О программе"
Рисунок 11 - Справка "О программе"
5)Справка "Приступая к работе"
Рисунок 12 - Справка "Приступая к работе"
Размещено на Allbest.ru
...Подобные документы
Требования к функциям, выполняемым системой, к программно-аппаратному и техническому обеспечению, к надежности и хранению информации. Схема взаимодействия модулей. Структурная схема программы. Руководство пользователю и программисту, вероятные ошибки.
курсовая работа [423,1 K], добавлен 24.03.2014Обзор задач, решаемых методом динамического программирования. Составление маршрута оптимальной длины. Перемножение цепочки матриц. Задача "Лестницы". Анализ необходимости использования специальных методов вероятностного динамического программирования.
курсовая работа [503,3 K], добавлен 28.06.2015Требования к функциям, выполняемым системой, программно-аппаратному и техническому обеспечению, к эргономике и технической эстетике, надежности и хранению информации. Схема взаимодействия модулей. Структурная схема программы. Наиболее вероятные ошибки.
курсовая работа [541,3 K], добавлен 19.05.2014Класс задач, к которым применяются методы динамического программирования. Решения задачи распределения капитальных вложений между предприятиями путем построения математической модели. Программа "Максимизации капиталовложений" на базе Microsoft Excel.
курсовая работа [1,4 M], добавлен 28.10.2014Алгоритм решения задач линейного программирования симплекс-методом. Построение математической модели задачи линейного программирования. Решение задачи линейного программирования в Excel. Нахождение прибыли и оптимального плана выпуска продукции.
курсовая работа [1,1 M], добавлен 21.03.2012Графическое решение задач. Составление математической модели. Определение максимального значения целевой функции. Решение симплексным методом с искусственным базисом канонической задачи линейного программирования. Проверка оптимальности решения.
контрольная работа [191,1 K], добавлен 05.04.2016Методы решения задачи оптимального резервирования технической системы. Решение задачи методами неопределенных множителей Лагранжа и динамического программирования. Построение оптимальной схемы системы при нагруженном резервировании ее элементов.
лабораторная работа [31,5 K], добавлен 10.06.2009Сущность и особенности выполнения метода динамического программирования. Решение математической задачи, принцип оптимальности по затратам, ручной счёт и листинг программы. Применение метода ветвей и границ, его основные преимущества и недостатки.
курсовая работа [38,9 K], добавлен 15.11.2009Восстановление математической модели задачи нелинейного программирования. Решение уравнений прямых. Метод линеаризации: понятие, особенности применения при решении задач. Нахождение точки максимума заданной функции. Решение задачи графическим методом.
задача [472,9 K], добавлен 01.06.2013Изучение и укрепление на практике всех моментов графического метода решения задач линейного программирования о производстве журналов "Автомеханик" и "Инструмент". Построение математической модели. Решение задачи с помощью электронной таблицы Excel.
курсовая работа [663,9 K], добавлен 10.06.2014Широкое применение вычислительной техники как в общей математике, так и в одном из её разделов – математических методах. Ознакомление с решением задач линейного программирования симплекс-методом и графически. Составлена программа на языке Delphi.
курсовая работа [57,1 K], добавлен 04.05.2010Решение задачи линейного программирования симплекс-методом: постановка задачи, построение экономико-математической модели. Решение транспортной задачи методом потенциалов: построение исходного опорного плана, определение его оптимального значения.
контрольная работа [118,5 K], добавлен 11.04.2012Постановка задачи динамического программирования. Составление основного функционального управления динамического программирования, определяющего условный оптимальный выигрыш для данного состояния. Выбор оптимальной стратегии замены оборудования.
курсовая работа [873,9 K], добавлен 02.07.2014Построение математической модели. Выбор, обоснование и описание метода решений прямой задачи линейного программирования симплекс-методом, с использованием симплексной таблицы. Составление и решение двойственной задачи. Анализ модели на чувствительность.
курсовая работа [100,0 K], добавлен 31.10.2014Постановка задачи динамического программирования. Поведение динамической системы как функция начального состояния. Математическая формулировка задачи оптимального управления. Метод динамического программирования. Дискретная форма вариационной задачи.
реферат [59,9 K], добавлен 29.09.2008Математическое программирование. Линейное программирование. Задачи линейного программирования. Графический метод решения задачи линейного программирования. Экономическая постановка задачи линейного программирования. Построение математической модели.
курсовая работа [581,5 K], добавлен 13.10.2008Определение совокупности шаговых управлений. Решение задач динамического программирования двухэтапным способом. Решение последовательности задач условной оптимизации. Оптимальное распределение памяти, политика замены оборудования, замена форвардера.
презентация [674,9 K], добавлен 30.10.2013Практические навыки моделирования задач линейного программирования и их решения графическим и симплекс-методом с использованием прикладной программы SIMC. Моделирование транспортных задач и их решение методом потенциалов с помощью программы TRAN2.
контрольная работа [199,8 K], добавлен 15.06.2009Постановка и решение дискретных оптимизационных задач методом дискретного программирования и методом ветвей и границ на примере классической задачи коммивояжера. Этапы построения алгоритма ветвей и границ и его эффективность, построение дерева графов.
курсовая работа [195,5 K], добавлен 08.11.2009Понятие Web-сайта и его типы, основы классификации. Достоинства и недостатки сайтов динамического наполнения. Языки программирования серверного выполнения, которые используются для их создания. Проектирование динамического сайта со справочным материалом.
курсовая работа [959,8 K], добавлен 05.03.2014