Решение транспортной задачи распределительным методом
МОСКОВСКИЙ
ТЕХНИКУМ КОСМИЧЕСКОГО ПРИБОРОСТРОЕНИЯ
Федеральное
государственное бюджетное образовательное учреждение высшего профессионального
образования
«Российский
государственный торгово-экономический университет»
Решение
транспортной задачи распределительным методом
МТКПр
РГТЭУ.330514.00181
МП 42-09
Листов 59
Консультант
Разработал
Н. А. Жилкина
С. А. Соколов
Содержание
1 Введение
Постановка
задачи
3 Численный
метод
Схемы
алгоритма программы
.1 Схема
алгоритма основной программы
.2 Схема
алгоритма метода newPlan
.3 Схема
алгоритма метода sumTransport
.4 Схема
алгоритма метода CiclePr
.5 Схемы
алгоритма метода searchCycle
.6 Схемы
алгоритма метода firstPlan
5 Ручной
просчет
Инструкция
по эксплуатации программы
Заключение
Литература
Приложение А.
Листинг программы
Приложение Б.
Результаты выполнения программы
1.
Введение
Темой курсовой работы является создание и реализация алгоритма решения
транспортной задачи методом наименьших стоимостей.
Транспортная задача (задача Монжа - Канторовича) - математическая
задача линейного программирования
<#"600964.files/image001.gif">, в которых сосредоточен однотипный груз в количестве . Имеется и 5 пунктов назначения . Каждый пункт подает заявку на груз в количестве .
Стоимости из iго
пункта отправления в jй
пункт назначения представлены в виде матрицы в таблице 2.1.
Таблица 2.1 - Матрица стоимостей
2
|
4
|
7
|
10
|
8
|
8
|
3
|
10
|
1
|
2
|
5
|
4
|
6
|
7
|
9
|
1
|
10
|
7
|
5
|
3
|
4
|
8
|
9
|
2
|
1
|
Общие данные представлены в виде таблицы 2.2.
Таблица 2.2 - Общие данные
|
B1
|
B2
|
B3
|
B4
|
B5
|
ai
|
A1
|
|
2
|
|
4
|
|
7
|
|
10
|
|
8
|
37
|
A2
|
|
8
|
|
3
|
|
10
|
|
1
|
|
2
|
12
|
A3
|
|
5
|
|
4
|
|
6
|
|
7
|
|
9
|
33
|
A4
|
|
1
|
|
10
|
|
7
|
|
5
|
|
3
|
26
|
A5
|
|
4
|
|
8
|
|
9
|
|
2
|
|
1
|
42
|
bi
|
40
|
18
|
37
|
23
|
32
|
|
Требуется разработать программу нахождения оптимального плана
транспортной задачи. Первый план построить методом наименьших стоимостей, а
оптимизацию плана произвести методом пересчета циклов.
Программа должна быть написана на алгоритмическом языке ActionScript 3.0 и отлажена на IBM совместимом компьютере.
3.
Численный метод
Метод наименьших стоимостей.
Данный метод находит лучшее начальное решение транспортной задачи по
сравнению с методом северо-западного угла, т.к выбирает переменные, которым
соответствуют наименьшие стоимости.
Пункт
1. Сначала во всей транспортной таблице выбирается клетка с наименьшей
стоимостью. Переменной в этой клетке присваивается максимально допустимое
значение, допускаемое ограничениями на заявки и запасы, т.е. .
Пункт
2. Если полностью реализован запас, т.е. , то
вычеркивается i-тая строка. Если же полностью выполнена заявка, т.е. , то вычеркивается j-тый столбец.
Если одновременно удовлетворяет заявка и исчерпывается запас, то обычно
вычеркивается j-тый столбец. Затем корректируются значения запасов
или заявок, уменьшая их величину на .
Пункт
3. Процесс заканчивается, если осталась одна невычеркнутая строка или один
столбец. В противном случае, возвращаемся к пункту 1.
Пример:
Имеется
m пунктов отправления ,
в которых сосредоточен однотипный груз в количестве . Имеется и n пунктов назначения . Каждый пункт подает заявку на груз в количестве . Сумма всех заказов равна сумме всех заявок.
Стоимость
перевозки одного груза из i-го пункта отправления в j-ый пункт
назначения задается . Требуется составить такой план перевозок, чтобы все
запасы были исчерпаны и все заявки были удовлетворены, а общая стоимость всех
перевозок должна быть минимальной.
Обозначим
через количество единицы груза, отправляемого из i-го
пункта отправления в j-ый пункт назначения.
Получим
матрицу перевозок
Рисунок
3.1 - Матрица перевозок
А
вершины называют перевозками.
>0
Перевозки
удовлетворяют двум условиям:
1. Суммарное количество груза, вывозимого из каждого пункта
отправления во все пункты назначения, равно запасу груза в каждом пункте
отправления.
Рисунок
3.2 - Суммарное количество груза из
каждого пункта отправления во все пункты назначения
2. Суммарное количество груза, привозимого в каждый пункт назначения
из всех пунктов отправления должно быть равно заявке, равной каждому пункту
назначения.
Рисунок
3.3 -Суммарное количество груза, привозимого в каждый пункт назначения из всех
пунктов отправления
Суммарная
стоимость всех перевозок должна быть минимальной.
Особенностью
данной задачи является то, что все коэффициенты при неизвестных системах равны
единице. Это значительно упрощает решение задачи. транспортная задача алгоритм программа
Все
уравнения этой системы можно решить количеством базисных переменных, выразив их
через свободные. Количество свободных переменных равно (m-1)*(n-1).
План
перевозок называется допустимым, если все заявки удовлетворены и все запасы
исчерпаны.
Допустимый
план называется оптимальным, если среди всех планов он приводит к минимальной
стоимости.
При
решении транспортной задачи повторяются решение симплексного метода. Но способ
проверки видоизменен.
Основные
шаги алгоритма решения транспортной задачи:
Найти начальное допустимое решение, выделить из свободных переменных
переменную, вводимую в базис, если все свободные переменные удовлетворяют
условию оптимальности, то закончить вычисления. Иначе выбрать выводимую из
базиса переменную. Процесс ввода и вывода переменных продолжается до тех пор,
пока не будет получен оптимальный план.
4. Схемы
алгоритма программы
.1
Схема алгоритма основной программы
4.2
Схема алгоритма метода newPlan
4.3
Схема алгоритма метода sumTransport
4.4
Схема алгоритма метода CiclePr
4.5
Схемы алгоритма метода searchCycle
.6
Схемы алгоритма метода firstPlan
5.
Ручной просчет
Даны сходные данные:
Таблица 5.1 - Опорный план
|
B1
|
B2
|
B3
|
B4
|
B5
|
ai
|
A1
|
|
2
|
|
4
|
|
7
|
|
10
|
|
8
|
37
|
A2
|
|
8
|
|
3
|
|
10
|
|
1
|
|
2
|
12
|
A3
|
|
5
|
|
4
|
|
6
|
|
7
|
|
9
|
33
|
A4
|
|
1
|
|
10
|
|
7
|
|
5
|
|
3
|
26
|
A5
|
|
4
|
|
8
|
|
9
|
|
2
|
|
1
|
42
|
bi
|
40
|
18
|
37
|
23
|
32
|
|
|
B1
|
B2
|
B3
|
B4
|
B5
|
ai
|
A1
|
|
2
|
|
4
|
|
7
|
|
10
|
|
8
|
37
|
A2
|
|
8
|
|
3
|
|
10
|
12
|
1
|
|
2
|
0
|
A3
|
|
5
|
|
4
|
|
6
|
|
7
|
|
9
|
33
|
A4
|
26
|
1
|
|
10
|
|
7
|
|
5
|
|
3
|
26
|
A5
|
|
4
|
|
8
|
|
9
|
|
2
|
|
1
|
42
|
bi
|
40
|
18
|
37
|
11
|
32
|
|
|
B1
|
B2
|
B3
|
B4
|
B5
|
ai
|
A1
|
|
2
|
|
4
|
|
7
|
|
10
|
|
8
|
37
|
A2
|
|
8
|
|
3
|
|
10
|
12
|
1
|
|
2
|
0
|
A3
|
|
5
|
|
4
|
|
6
|
|
7
|
|
9
|
33
|
A4
|
26
|
1
|
|
10
|
|
7
|
|
5
|
|
3
|
0
|
A5
|
|
4
|
|
8
|
|
9
|
|
2
|
32
|
1
|
10
|
bi
|
14
|
18
|
37
|
11
|
0
|
|
|
B1
|
B2
|
B3
|
B4
|
B5
|
ai
|
A1
|
14
|
2
|
|
4
|
|
7
|
|
10
|
|
8
|
23
|
A2
|
|
8
|
|
3
|
|
10
|
12
|
1
|
|
2
|
0
|
A3
|
|
5
|
|
4
|
|
6
|
|
7
|
|
9
|
33
|
A4
|
26
|
1
|
|
10
|
|
7
|
|
5
|
|
3
|
0
|
A5
|
|
4
|
|
8
|
|
9
|
10
|
2
|
32
|
1
|
bi
|
0
|
18
|
37
|
1
|
0
|
|
|
B1
|
B2
|
B3
|
B4
|
B5
|
ai
|
A1
|
14
|
2
|
18
|
4
|
|
7
|
|
10
|
|
8
|
5
|
A2
|
|
8
|
|
3
|
|
10
|
12
|
1
|
|
2
|
0
|
A3
|
|
5
|
|
4
|
|
6
|
|
7
|
|
9
|
33
|
A4
|
26
|
1
|
|
10
|
|
7
|
|
5
|
|
3
|
0
|
A5
|
|
4
|
|
8
|
|
9
|
10
|
2
|
32
|
1
|
0
|
bi
|
0
|
0
|
37
|
1
|
0
|
|
|
B1
|
B2
|
B3
|
B4
|
B5
|
ai
|
A1
|
14
|
2
|
18
|
4
|
4
|
7
|
|
10
|
|
8
|
5
|
A2
|
|
8
|
|
3
|
|
10
|
12
|
1
|
|
2
|
0
|
A3
|
|
5
|
|
4
|
33
|
6
|
|
7
|
|
9
|
0
|
A4
|
26
|
1
|
|
10
|
|
7
|
|
5
|
|
3
|
0
|
A5
|
|
4
|
|
8
|
|
9
|
10
|
2
|
32
|
1
|
0
|
bi
|
0
|
0
|
4
|
1
|
0
|
|
|
B1
|
B2
|
B3
|
B4
|
B5
|
ai
|
A1
|
14
|
2
|
18
|
4
|
4
|
7
|
1
|
10
|
|
8
|
1
|
A2
|
|
8
|
|
3
|
|
10
|
12
|
1
|
|
2
|
0
|
A3
|
|
5
|
|
4
|
33
|
6
|
|
7
|
|
9
|
0
|
A4
|
26
|
1
|
|
10
|
|
7
|
|
5
|
|
3
|
0
|
A5
|
|
4
|
|
8
|
|
9
|
10
|
2
|
32
|
1
|
0
|
bi
|
0
|
0
|
0
|
1
|
0
|
|
|
B1
|
B2
|
B3
|
B4
|
B5
|
ai
|
A1
|
14
|
2
|
18
|
4
|
4
|
7
|
1
|
10
|
|
8
|
0
|
A2
|
|
8
|
|
3
|
|
10
|
12
|
1
|
|
2
|
0
|
A3
|
|
5
|
|
4
|
33
|
6
|
|
7
|
|
9
|
0
|
A4
|
26
|
1
|
|
10
|
|
7
|
|
5
|
|
3
|
0
|
A5
|
|
4
|
|
8
|
|
9
|
10
|
2
|
32
|
1
|
0
|
bi
|
0
|
0
|
0
|
0
|
0
|
|
|
B1
|
B2
|
B3
|
B4
|
B5
|
ai
|
A1
|
14
|
2
|
18
|
4
|
4
|
7
|
1
|
10
|
|
8
|
37
|
A2
|
|
8
|
|
3
|
|
10
|
12
|
1
|
|
2
|
12
|
A3
|
|
5
|
|
4
|
33
|
6
|
|
7
|
|
9
|
33
|
A4
|
26
|
1
|
|
10
|
|
7
|
|
5
|
|
3
|
12
|
A5
|
|
4
|
|
8
|
|
9
|
10
|
2
|
32
|
1
|
42
|
bi
|
40
|
18
|
37
|
23
|
32
|
|
Стоимость плана
14*2+18*4+4*7+1*10+12*1+33*6+26*1+10*2+32*1=426
Для каждой свободной клетки построим цикл и определим его стоимость
Y21 = 15 >0 Y53 = 10 >0= 4 >0 Y34 = -2 <0 = 10
>0 Y44 = -4 <0= 8 >0 Y15 = -1 <0
Y52 = 12 >0 Y25 = 2 >023 = 12 >0 Y43 = 1 >0
Y32 =
1 >0 Y45 = -1 <0
Построим цикл для {1;5}
|
B1
|
B2
|
B3
|
B4
|
B5
|
ai
|
A1
|
14
|
2
|
18
|
4
|
4
|
7
|
1
|
10
|
+
|
8
|
37
|
A2
|
|
8
|
|
3
|
|
10
|
12
|
1
|
|
2
|
12
|
A3
|
|
5
|
|
4
|
33
|
6
|
|
7
|
|
9
|
33
|
A4
|
26
|
1
|
|
10
|
|
7
|
|
5
|
|
3
|
12
|
A5
|
|
4
|
|
8
|
|
9
|
10
|
2
|
32
|
1
|
42
|
bi
|
40
|
18
|
37
|
23
|
32
|
|
Стоимость плана = 426-1=425
|
Построим цикл для {1;5}
|
B1
|
B2
|
B3
|
B4
|
B5
|
ai
|
14
|
2
|
18
|
4
|
4
|
7
|
|
10
|
1
|
8
|
37
|
A2
|
|
8
|
|
3
|
|
10
|
12
|
1
|
|
2
|
12
|
A3
|
|
5
|
|
4
|
33
|
6
|
+
|
7
|
|
9
|
33
|
A4
|
26
|
1
|
|
10
|
|
7
|
|
5
|
|
3
|
12
|
A5
|
|
4
|
|
8
|
|
9
|
11
|
2
|
31
|
1
|
42
|
bi
|
40
|
18
|
37
|
23
|
32
|
|
Стоимость плана = 425-
1=424
|
Построим цикл для {1;5}
|
B1
|
B2
|
B3
|
B4
|
B5
|
ai
|
A1
|
14
|
2
|
18
|
4
|
5
|
7
|
|
10
|
|
8
|
37
|
A2
|
|
8
|
|
3
|
|
10
|
12
|
1
|
|
2
|
12
|
A3
|
|
5
|
|
4
|
32
|
6
|
1
|
7
|
|
9
|
33
|
A4
|
26
|
1
|
|
10
|
|
7
|
+
|
5
|
|
3
|
12
|
A5
|
|
4
|
|
8
|
|
9
|
10
|
2
|
32
|
1
|
42
|
bi
|
40
|
18
|
37
|
23
|
32
|
|
Стоимость плана = 424-1=423
|
Построим цикл для {4;5}
|
B1
|
B2
|
B3
|
B4
|
B5
|
ai
|
A1
|
15
|
2
|
18
|
4
|
4
|
7
|
|
10
|
|
8
|
37
|
A2
|
|
8
|
|
3
|
|
10
|
12
|
1
|
|
2
|
12
|
A3
|
|
5
|
|
4
|
33
|
6
|
|
7
|
|
9
|
33
|
A4
|
25
|
1
|
|
10
|
|
7
|
1
|
5
|
+
|
3
|
12
|
A5
|
|
4
|
|
8
|
|
9
|
10
|
2
|
32
|
1
|
42
|
bi
|
40
|
18
|
37
|
23
|
32
|
|
Стоимость плана = 424-1=422
|
|
B1
|
B2
|
B3
|
B4
|
B5
|
ai
|
A1
|
15
|
2
|
18
|
4
|
4
|
7
|
|
10
|
|
8
|
37
|
A2
|
|
8
|
|
3
|
|
10
|
12
|
1
|
|
2
|
12
|
A3
|
|
5
|
|
4
|
33
|
6
|
|
7
|
|
9
|
33
|
A4
|
25
|
1
|
|
10
|
|
7
|
|
5
|
1
|
3
|
12
|
A5
|
|
4
|
|
8
|
|
9
|
11
|
2
|
31
|
1
|
42
|
bi
|
40
|
18
|
37
|
23
|
32
|
|
.к. для всех клеток цены циклов положительны, то дальнейшее улучшение
плана невозможно, что означает, что мы нашли оптимальный план.
План оптимален.
Таблица 5.7 - Оптимальный план
B1B2B3B4B5ai
|
|
|
|
|
|
|
A1
|
|
4
|
|
8
|
|
9
|
19
|
2
|
23
|
1
|
42
|
A2
|
|
8
|
|
3
|
|
10
|
12
|
1
|
|
2
|
12
|
A3
|
|
5
|
9
|
4
|
18
|
6
|
6
|
7
|
|
9
|
33
|
A4
|
26
|
1
|
|
10
|
|
7
|
|
5
|
|
3
|
26
|
A5
|
6
|
2
|
31
|
4
|
|
7
|
|
10
|
|
8
|
37
|
bi
|
32
|
40
|
18
|
37
|
23
|
|
Листинг программы приведен в приложении А, а результаты её выполнения - в
приложении Б.
6.
Инструкция по эксплуатации программы
Минимальные системные требования:
ОС:
Windows 8/7/Vista/XP/2000/ME/98/95
8мб HDD памяти. Клавиатура.
Для начала работы с программой необходимо запустить файл transport.exe.
Программу можно использовать в полноэкранном режиме, для этого необходимо
зайти в меню «Просмотр» и выбрать пункт «Полный экран» или нажать комбинацию
клавиш Ctrl+F, режим окна можно вернуть с помощью клавиши Esc.(Рисунок 6.1)
Рисунок 6.1 - Контекстное меню «Просмотр»
В главном меню программы необходимо выбрать пункт «Составить план».
(Рисунок 6.2)
Рисунок 6.2 - Меню программы
Далее необходимо указать количество заявок и количество запасов.
(Внимание! Максимальное количество запасов и заявок - 6) (Рисунок 6.3)
Рисунок 6.3 - Подготовка построения плана
Программа выведет на экран рабочую таблицу и заполнит стоимость перевозок
по умолчанию, если вы хотите изменить стоимость, необходимо нажать на
предыдущее значение стоимости. Запасы и заявки расположены в последней строке и
последнем столбце соответственно. Для их изменения необходимо нажать на клетку,
которую необходимо заполнить. (Рисунок 6.4)
Рисунок 6.4 - Таблица решения
Справа от таблицы расположено меню работы. С его помощью можно вернуться
в меню, просмотреть подсказку о цветовой схеме таблицы и продолжить работу
программы нажав кнопку «Далее». (Рисунок 6.5)
Рисунок 6.5 - Вызов подсказки
Продолжив работу, программа построит первый план. Также в верхнем правом
углу покажется стоимость первого плана, а в правом нижнем углу количество
единиц груза. (Рисунок 6.6)
Рисунок 6.6 - Первый план решения
Продолжив работу, вы увидите цикл, который программа выбрала для решения,
изменится и стоимость перевозок. Программа укажет, какая клетка вошла в базис и
какая вышла, также клетки, вошедшие в цикл. (Рисунок 6.7)
Рисунок 6.7 - Выбранный цикл решения транспортной задачи
Если план является оптимальным, программа выдаст соответствующее
сообщение и распечатает конечную стоимость плана и итоговую таблицу решения.
(Рисунок 6.8)
Рисунок 6.8 - Завершение работы программы
Заключение
С помощью данной программы вы сможете без труда производить
вычисления по транспортной задаче. Интерфейс программы удобен и приятен.
Литература
1 К.Л. Самаров Транспортная задача. Учебное пособие
для студента.
2 Колин Мук ActionScript
3.0 для Flash. Подробное руководство.
Приложение
А
Листинг программы
/*
_____________________________________________________________
Курсовой проект
Тема "Решение транспортной задачи"
_____________________________________________________________
Язык:
ActionScript 3.0
Кодировка: ASCII (win.1251)
Среда: Adobe Flash CS6.0
Разработали:
А. В. Андронов
С. А. Соколов
А.Ю. Бадаев
А.В. Никитин
Е.А. Туровский
Дата: 1 ноября 2012г
_____________________________________________________________
Задачей курсовой работы является разработка программы для построения
оптимального плана транспортной задачи.
_____________________________________________________________
Используемые глобальные константы:_HEIGHT - высота сцены;_WIDTH -
ширина сцены.
_____________________________________________________________Используемые
глобальные переменные класса: - класс управления задачей; - главное
меню; - информация о программе.
_____________________________________________________________
Используемые методы класса: - инициализация программы; -
создание нового плана; - удаление главного меню; - удаление плана; -
создание главного меню; - информация о программе.
_____________________________________________________________
*/src
{flash.display.MovieClip;flash.events.Event;src.transport.*;flash.events.MouseEvent;class
Main extends MovieClip
{static var STAGE_HEIGHT:int=580,STAGE_WIDTH:int=789;var
task:Task;var mm:MainMenu;var a:About;
/*
_____________________________________________________________
Метод
enterSize - ввод количества заявок и запасов.
_____________________________________________________________
*/ public function Main()
{(Event.ADDED_TO_STAGE, init);
}
/*
_____________________________________________________________
Метод init - инициализация программы.
_____________________________________________________________
Формальный параметр:
e - событие.
*/ private function init(e:Event):void
{(Event.ADDED_TO_STAGE, init);_HEIGHT = stage.height;_WIDTH =
stage.width;(new TEvent(TEvent.FIRST_TRANSPORT));
}
/*
_____________________________________________________________
Метод nTask - создание нового плана.
_____________________________________________________________
Формальный параметр: - событие мышки.
_____________________________________________________________
*/ private function nTask(e:MouseEvent):void
{(a)
{(a);= null;
}(task)
{();
}
{=new Task();.enterSize();(task);.addEventListener(TEvent.END_TRANSPORT,showMenu);.addEventListener(TEvent.NEW_TRANSPORT,clearMenu);
}
}//end
/*
_____________________________________________________________
Метод clearMenu - удаление главного меню.
_____________________________________________________________
Формальный параметр: - событие.
_____________________________________________________________
*/ private function clearMenu(e:TEvent):void
{.new_task.removeEventListener(MouseEvent.CLICK,nTask);.about.removeEventListener(MouseEvent.CLICK,about);(mm);=
null;
}
/*
_____________________________________________________________
Метод
clearTask - удаление плана.
_____________________________________________________________
*/ private function clearTask():void
{.removeEventListener(TEvent.END_TRANSPORT,showMenu);.removeEventListener(TEvent.NEW_TRANSPORT,clearMenu);(task);=
null;
}//end
/*
_____________________________________________________________
Метод showMenu - создание главного меню.
_____________________________________________________________
Формальный параметр: - событие.
_____________________________________________________________
*/ private function showMenu(e:TEvent):void
{(e.type == TEvent.END_TRANSPORT)
{();
}=new MainMenu();.x = STAGE_WIDTH - mm.width;.y =
STAGE_HEIGHT/2-mm.height/2;(mm);.new_task.addEventListener(MouseEvent.CLICK,nTask);.about.addEventListener(MouseEvent.CLICK,about);
}//end
/*
_____________________________________________________________
Метод about - информация о программе.
_____________________________________________________________
Формальный параметр: - событие мышки.
_____________________________________________________________
*/ private function about(e:MouseEvent):void
{(a)
{(a);= null;
}
{=new About();.x = STAGE_WIDTH / 2 - a.width / 2;.y =
STAGE_HEIGHT / 2 - a.height / 2;(a);
}
}//end
}//end class
}//end package
/*
_____________________________________________________________
Класс программы управления задачей.
_____________________________________________________________
Используемые глобальные переменные класса: -
класс матрицы перевозок;, stock - вектора заявок и запасов
соответственно;, - контейнеры объектов запасов и заявок;, -
количество заявок и запасов; - класс элементов
управления; - класс подсказки; -
класс формы ввода подсказки.
_____________________________________________________________
Используемые методы класса: - вывод информации;-
ввод размера матрицы перевозок;- проверка ввода размера матрицы перевозок;- создание
и вывод на экран матрицы, кнопок;- вывод подсказки; - выход в
главное меню программы; - постраение первого плана; - постраение
следующего плана;- суммирует элементы вектора запасов или заявок; -
создание и вывод на экран векторов запасов и заявок; -
добавление в вектор заявок элемента; - добавление в вектор запасов
элемента; - ограничение доступа ввода запасов и заявок;- проверка
корректности ввода значений запасов и заявок.
_____________________________________________________________
*/src
{flash.display.MovieClip;src.transport.data.*;src.transport.*;flash.events.MouseEvent;flash.display.Sprite;class
Task extends MovieClip
{var m:Mat;var store:Array,stock:Array;var
dataConStore:Sprite,dataConStock:Sprite;var kolZayavok:int,kolZapasov:int;var
control:BandControl;var hint:Hint;var sizeForm:FormSize;
/*
_____________________________________________________________
Конструктор класса.
_____________________________________________________________
*/ public function Task()
{= new Hint();.x = Main.STAGE_WIDTH / 2 - hint.width / 2;.y =
Main.STAGE_HEIGHT / 2 - hint.height / 2;
}//end
/*
_____________________________________________________________
Метод H - выводит информацию на экран.
_____________________________________________________________
Формальный параметр: - строка информации.
_____________________________________________________________
*/ private function H(s:String):void
{.hint = s;(hint);
}//end
/*
_____________________________________________________________
Метод enterSize - ввод количества заявок и запасов.
_____________________________________________________________
*/ public function enterSize():void
{=new FormSize();.y = Main.STAGE_HEIGHT / 2 - sizeForm.height
/ 2;(sizeForm);.ok.addEventListener(MouseEvent.CLICK,checkedSize);
}//end
/*
_____________________________________________________________
Метод checkedSize - проверка правильности заполнения полей
размеров.
_____________________________________________________________
Формальный параметр: - событие мышки.
_____________________________________________________________
*/ private function
checkedSize(e:MouseEvent):void
{(sizeForm.check)
{.ok.removeEventListener(MouseEvent.CLICK,enterData);(sizeForm);=
int(sizeForm.kolzaya.text);= int(sizeForm.kolzap.text);
sizeForm = null;();
}
{('\n\nНе правильный ввод!\n Все поля должны быть заполнены!');
}
}//end
/*
_____________________________________________________________
Метод enterData - создание и вывод на экран матрицы, кнопок.
_____________________________________________________________
*/ private function enterData():void
{= new BandControl();.y =
0;(control);.btnNext.addEventListener(MouseEvent.CLICK,firstPlan);.menu.addEventListener(MouseEvent.CLICK,goMenu);.hint_btn.addEventListener(MouseEvent.CLICK,showHint);=new
Mat();.y = 40;.x = 40;.showMat(kolZayavok,kolZapasov);(m);
showSS();('Заполните поля цены, поля заявок и поля запасов.\nИ нажмите
кнопку "Далее" для продолжения...');
}//end
/*
_____________________________________________________________
Метод showHint - вывод подсказки.
_____________________________________________________________
*/ private function
showHint(e:MouseEvent):void
{.gotoAndStop(2);.visible = true;
addChild(hint);
}//end
/*
_____________________________________________________________
Метод goMenu - выход в главное меню программы.
_____________________________________________________________
Формальный параметр: - событие мышки.
_____________________________________________________________
*/ private function goMenu(e:MouseEvent):void
{.btnNext.removeEventListener(MouseEvent.CLICK,firstPlan);.menu.removeEventListener(MouseEvent.CLICK,goMenu);.hint_btn.removeEventListener(MouseEvent.CLICK,showHint);(new
TEvent(TEvent.END_TRANSPORT));
}//end
/*
_____________________________________________________________
Метод firstPlan - постраение первого плана.
_____________________________________________________________
Формальный параметр: - событие мышки.
_____________________________________________________________
Переменные используемые в методе:, sZap - сумма элементов
вектора заявок, сумма элементов
вектора запасов.
_____________________________________________________________
*/ private function
firstPlan(e:MouseEvent):void
{sZaya:int = sumElementsVector(store,kolZayavok);sZap:int =
sumElementsVector(stock,kolZapasov);(stock.every(correctness) &&
store.every(correctness))
{(sZaya<sZap)
{(sZap-sZaya);
}if (sZaya>sZap)
{(sZaya-sZap);
}else
{.btnNext.removeEventListener(MouseEvent.CLICK,firstPlan);.stoimost_plana_txt.text
=
m.firstPlan(stock,store,kolZayavok,kolZapasov).toString();.btnNext.addEventListener(MouseEvent.CLICK,nextPlan);.cargo_units_txt.text
= sZaya.toString();
H('Первый план поcтроен.\n Нажмите "Далее" для
продолжения...');
store.forEach(closeEnter);.forEach(closeEnter);
}
}
{('Значения полей запасов и заявок \nне должны быть равными нулю или
оставаться пустыми\nпроверте правильность');
}
}//end
/*
_____________________________________________________________
Метод nextPlan - постраение следующего плана.
_____________________________________________________________
Формальный параметр: - событие мышки.
_____________________________________________________________
*/ private function
nextPlan(e:MouseEvent):void
{.visible = false;(m.newPlan(kolZayavok,kolZapasov))
{('\n\nПлан оптимален, задача решена.\nСтоимость плана:'+control.stoimost_plana_txt.text);.btnNext.removeEventListener(MouseEvent.CLICK,nextPlan);
}
{.stoimost_plana_txt.text =
m.sumTransport(kolZayavok,kolZapasov).toString();
}
}//end
/*
_____________________________________________________________
Метод sumElementsVector - суммирует элементы вектора запасов или заявок.
_____________________________________________________________
Формальные параметры: - вектор; - количество элементов.
_____________________________________________________________
Переменная используемые в методе:
sum -
сумма элементов.
_____________________________________________________________
*/ public function
sumElementsVector(v:Array,m:int):int
{sum:int = 0;(var i:int=0; i<m; i++)
{+= int(v[i].stock);
}sum;
}//end
/*
_____________________________________________________________
Метод showSS - создание и вывод на экран векторов запасов и заявок
_____________________________________________________________
Переменные используемые в методе: - счетчик цикла;,xx -
координаты расположения объектов.
_____________________________________________________________
*/ private function showSS():void
{yy:int = 0;i:int;= new Array();= new Sprite();.x = m.x +
m.width + 10,dataConStore.y = m.y;(i=0; i<kolZayavok; i++)
{.push(new SStore());[i].y = yy;.addChild(store[i]);+=
store[i].height + 5;
}(dataConStore);= new Array();= new Sprite();.x = m.x;.y =
m.y + m.height + 10;xx:int = 0;(i=0; i<kolZapasov; i++)
{.push(new SStore());[i].x = xx;.addChild(stock[i]);+=
stock[i].width + 5;
}(dataConStock);
}//end
/*
_____________________________________________________________
Метод
addZaya - добавление в вектор заявок элемента.
_____________________________________________________________
Формальный параметр: - значение добавляемого элемента.
_____________________________________________________________
*/ private function addZaya(arg:int):void
{= m.addStr(kolZapasov);.push(new SStore());[kolZayavok -
1].y = dataConStore.height + 5;.addChild(store[kolZayavok-1]);[kolZayavok -
1].stock = arg.toString();.y = m.y + m.height + 10;
}//end
/*
_____________________________________________________________
Метод addZap - добавление в вектор запасов элемента.
_____________________________________________________________
Формальный параметр: - значение добавляемого элемента.
_____________________________________________________________
*/ private function addZap(arg:int):void
{= m.addSto(kolZapasov);.push(new SStore());[kolZapasov -
1].x = dataConStock.width + 5;.addChild(stock[kolZapasov -1]);[kolZapasov -
1].stock = arg.toString();.x = m.x + m.width + 10;
}//end
/*
_____________________________________________________________
Метод closeEnter - ограничение доступа ввода запасов и заявок.
_____________________________________________________________
Формальные параметры: - элемент для ограничения доступа; -
индекс элемента в массиве;
arr - массив
элементов.
_____________________________________________________________
*/ private function closeEnter(element:*,
index:Number, arr:Array):void
{
element.closeStock();
}//end
/*
_____________________________________________________________
Метод correctness - проверка корректности ввода
значений запасов и заявок.
_____________________________________________________________
Формальные параметры: - элемент для ограничения доступа; -
индекс элемента в массиве;
arr - массив
элементов.
_____________________________________________________________
*/ private function correctness(element:*,
index:Number, arr:Array):Boolean
{element.stock>0;
}//end
}//end class
}//end package
/*
_____________________________________________________________
Класс работы с матрицой перевозок.
_____________________________________________________________
Используемые глобальные переменные класса: - матрица перевозок; -
вектор цикла.
_____________________________________________________________
Используемые методы класса: - создание и вывод на экран
матрицы перевозок;- подсчет стоимости плана; - построение первого плана; - вспомогательный
метод копирования значений запасов и
заявок; - добавление строки в матрицу; -
добавление столбца в матрицу; - построение нового плана; -
улучшение плана перевозок;- визуальная очистка плана; - проверка завершения
цикла;- поиск цикла;- добавление в вектор элемента цикла; - определение
цены цикла.
_____________________________________________________________
*/src.transport
{flash.display.MovieClip;src.transport.data.*;class Mat
extends MovieClip
{var element:Array;var cicle:Array;
/*
_____________________________________________________________
Конструктор класса.
_____________________________________________________________
*/ public function Mat()
{
}
/*
_____________________________________________________________
Метод showMat - создание и вывод на экран матрицы перевозок.
_____________________________________________________________
Формальные параметры: - количество строк; - количество столбцов.
_____________________________________________________________
Переменные используемые в методе:,xx - координаты расположения
элементов.
_____________________________________________________________
*/ public function showMat(n:int,m:int):void
{xx:int = 0,yy:int = 0;= new Array(n);(var i:int=0; i<n;
i++)
{[i] = new Array(m);(var j:int=0; j<m; j++)
{[i][j]= new Element();[i][j].x = xx;[i][j].y =
yy;(element[i][j]);+= element[i][j].width + 5;
}= 0;+= element[i][j - 1].height + 5;
}
}//end
/*
_____________________________________________________________
Метод sumTransport - подсчет стоимости плана.
_____________________________________________________________
Формальные параметры: - количество строк; - количество столбцов.
_____________________________________________________________
Переменная используемые в методе:
sum - сумма элементов.
_____________________________________________________________
*/ public function
sumTransport(n:int,m:int):int
{sum:int = 0;(var i:int=0; i<n; i++)
{(var j:int=0; j<m; j++)
{+= element[i][j].stoimost * element[i][j].perevozka;
}
}sum;
}//end
/*
_____________________________________________________________
Метод
firstPlan - построение первого
плана.
_____________________________________________________________
Формальные параметры: - количество строк; - количество столбцов;
_a - вектор запасов;
_b - вектор заявок;
_____________________________________________________________
Переменные используемые в методе:, j, k - счетчики. -
вектор запасов; - вектор заявок; - минимальная стоимость;,
J - индексы элемента; - стоимость первого плана;
p - количество груза.
_____________________________________________________________
*/ public function
firstPlan(_a:Array,_b:Array,n:int,m:int):int
{i:int,j:int;a:Array = _a.map(getValue);b:Array =
_b.map(getValue);min:int,k:int,J:int,I:int,sum:int = 0,p:int = 0;(k=0;
k<(n+m-1); k++)
{= 1000;(i=0; i<n; i++)
{(b[i] > 0)
{(j=0; j<m; j++)
{(min>element[i][j].stoimost&&(a[j]>0))
{= element[i][j].stoimost;= i;= j;
}
}
}
}(! element[I][J].bazis)
{=(a[J]<b[I])?a[J]:b[I];[J] -= p;[I] -= p;[I][J].perevozka
= p;[I][J].bazis = true;+= min * p;
}
{= 0;(i<n)
{(j=0; j<m; j++)
{(! element[i][j].bazis)
{[i][j].bazis = true;= n;;
}
}++;
}
}
}sum;
}//end
/*
_____________________________________________________________
Метод getValue - вспомогательный метод копирования значений
запасов и заявок.
_____________________________________________________________
Формальные параметры: - элемент для ограничения доступа; -
индекс элемента в массиве;
arr - массив
элементов.
_____________________________________________________________
*/ private function getValue(element:*,
index:int, arr:Array):int
{element.stock;
}//end
/*
_____________________________________________________________
Метод
addStr - добавление строки
в матрицу.
_____________________________________________________________
Формальный параметр: - длина вектора запасов.
_____________________________________________________________
*/ public function addStr(zap:int):int
{i:int = element.length,xx:int = 0;yy:int = element[i -
1][0].y + element[i - 1][0].width - 5;[i]=new Array();(var j:int=0; j<zap;
j++)
{[i][j]=new Element();[i][j].y = yy;[i][j].x =
xx;(element[i][j]);+= element[i][j].width + 5;
}element.length;
}//end
/*
_____________________________________________________________
Метод
addSto - добавление столбца
в матрицу.
_____________________________________________________________
Формальный параметр: - длина вектора заявок.
*/ public function addSto(zap:int):int
{xx:int = element[0][zap - 1].x + element[0][zap - 1].width +
5;yy:int = 0;(var j:int=0; j<element.length; j++)
{[j][zap]=new Element();[j][zap].y = yy;[j][zap].x =
xx;(element[j][zap]);+= element[j][zap].height + 5;
}element[j-1].length;
}//end
/*
_____________________________________________________________
Метод newPlan - построение нового плана.
_____________________________________________________________
Формальные параметры: - количество строк; - количество столбцов.
_____________________________________________________________
Переменные используемые в методе:
i, j - счетчики.
_____________________________________________________________
*/ public function
newPlan(n:int,m:int):Boolean
{i:int,j:int;(cicle)
{();
}(i=0; i<n; i++)
{(j=0; j<m; j++)
{(! element[i][j].bazis)
{= new Array();(0,i,j);(searchCycle(1,1,i,j,n,m)||searchCycle(1,3,i,j,n,m)
||searchCycle(1,2,i,j,n,m)||searchCycle(1,4,i,j,n,m))
{(priceCicle())
{();false;
}
}
}
}
}true;
}//end
/*
_____________________________________________________________
Метод
ciclePr - улучшение плана перевозок.
_____________________________________________________________
Переменные используемые в методе: - счетчик; -
минимальный груз;, kj - индексы;
zn - знак операции.
_____________________________________________________________
*/ private function ciclePr():void
{min:int = cicle[1].perev,ki:int = cicle[1].i,kj:int =
cicle[1].j,i:int = 1;(i<cicle.length)
{(min>cicle[i].perev)
{= cicle[i].perev;= cicle[i].i;= cicle[i].j;
}+= 2;
}zn:int = 1;[cicle[0].i][cicle[0].j].bazis =
true;[ki][kj].bazis = false;(i=0; i<cicle.length; i++)
{[cicle[i].i][cicle[i].j].perevozka += min *
zn;[cicle[i].i][cicle[i].j].gotoAndStop(3);*= -zn;
}[cicle[0].i][cicle[0].j].gotoAndStop(4);[ki][kj].gotoAndStop(5);
}//end
/*
_____________________________________________________________
Метод clearCicleShow - визуальная очистка плана.
_____________________________________________________________
Переменная используемая в методе: - счетчик.
_____________________________________________________________
*/ private function clearCicleShow():void
{(var i:int=0; i<cicle.length; i++)
{(element[cicle[i].i][cicle[i].j].bazis)
{[cicle[i].i][cicle[i].j].gotoAndStop(2);
}
{[cicle[i].i][cicle[i].j].gotoAndStop(1);
}
}
}//end
/*
_____________________________________________________________
Метод endCycle - проверка завершения цикла.
_____________________________________________________________
Формальные параметры:, j - индексы.
_____________________________________________________________
*/ private function
endCycle(i:int,j:int):Boolean
{((cicle[0].i==i)&&(cicle[0].j==j));
}//end
/*
_____________________________________________________________
Метод
searchCycle - поиск цикла.
_____________________________________________________________
Формальные параметры:
_n - количество строк;
_m - количество столбцов;
_i, _j - индексы; - направление движения; -
индекс вектора цикла.
_____________________________________________________________
Переменные используемые в методе:, j - счетчики; -
существование цикла; - вспомогательная переменная.
_____________________________________________________________
*/ private function
searchCycle(k:int,p:int,_i:int,_j:int,_n:int,_m:int):Boolean
{j:int,i:int,b:Boolean = false,f:Boolean = false;(k>21)
{false;
}(p)
{1 :(i = _i; i<_n; i++)
{((k>2)&&endCycle(i,_j))
{true;
}(element[i][_j].bazis && b)
{(f=(searchCycle(k+1,2,i,_j,_n,_m)||searchCycle(k+1,4,i,_j,_n,_m)))
{(k,i,_j);
}
{= searchCycle(k,1,i,_j,_n,_m);
}f;
}= true;
};2 :(j = _j; j<_m; j++)
{((k>2)&&endCycle(_i,j))
{true;
}(element[_i][j].bazis && b)
{(f=(searchCycle(k+1,3,_i,j,_n,_m)||searchCycle(k+1,1,_i,j,_n,_m)))
{(k,_i,j);
}
{= searchCycle(k,2,_i,j,_n,_m);
}f;
}= true;
};3 :(i = _i; i>=0; i--)
{((k>2)&&endCycle(i,_j))
{true;
}(element[i][_j].bazis && b)
{(f=(searchCycle(k+1,4,i,_j,_n,_m)||searchCycle(k+1,2,i,_j,_n,_m)))
{(k,i,_j);
}
{= searchCycle(k,3,i,_j,_n,_m);
}f;
}= true;
};4 :(j = _j; j>=0; j--)
{((k>2)&&endCycle(_i,j))
{true;
}(element[_i][j].bazis && b)
{(f=(searchCycle(k+1,1,_i,j,_n,_m)||searchCycle(k+1,3,_i,j,_n,_m)))
{(k,_i,j);
}
{= searchCycle(k,4,_i,j,_n,_m);
}f;
}= true;
};
}false;
}//end
/*
_____________________________________________________________
Метод
newObjectWay - добавление в вектор элемента цикла.
_____________________________________________________________
Формальные параметры:, j - индексы элемента матрицы; -
индекс вектора цикла.
_____________________________________________________________
Переменная используемая в методе:
obj - элемент вектора цикла.
_____________________________________________________________
*/ private function
newObjectWay(k:int,i:int,j:int):void
{obj:Object= new Object();.i = i;.j = j;.price =
element[i][j].stoimost;.perev = element[i][j].perevozka;[k] = obj;
}//end
/*
_____________________________________________________________
Метод
priceCicle - определение цены цикла.
_____________________________________________________________
Переменная используемая в методе: - цена цикла.
_____________________________________________________________
*/ private function priceCicle():Boolean
{((cicle.length%2)!=0)
{false;
}sum:int = 0,i:int = 0;(i<cicle.length)
{+= cicle[i].price - cicle[i + 1].price;+= 2;
}sum<0;
}//end
}//end class
}//end package
/*
_____________________________________________________________
Класс формы ввода размера матрицы.
_____________________________________________________________
Используемые глобальные переменные класса: - количество заявок; -
количество запасов.
_____________________________________________________________
Используемый метод класса:check - метод возвращающий корректность
ввода.
_____________________________________________________________
*/src.transport
{flash.display.MovieClip;class FormSize extends MovieClip
{
/*
_____________________________________________________________
Конструктор класса.
_____________________________________________________________
*/ public function FormSize()
{.kolzaya.restrict = '1-6';.kolzaya.maxChars = 1;
.kolzap.restrict = '1-6';.kolzap.maxChars = 1;
}
/*
_____________________________________________________________
Метод
get check - метод возвращающий корректность ввода.
_____________________________________________________________
*/ public function get check():Boolean
{kolzaya.text&&kolzap.text;
}
}
}
/*
_____________________________________________________________
Класс вывода информации.
_____________________________________________________________
Используемые глобальные переменные класса: - кнопка; -
текстовое поле.
_____________________________________________________________
Используемые методы класса:hint - установка текста информации; -
скрытие подсказки.
_____________________________________________________________
*/src
{
import flash.display.MovieClip;flash.events.MouseEvent;class
Hint extends MovieClip
{
/*
_____________________________________________________________
Конструктор класса.
_____________________________________________________________
*/ public function Hint()
{= false;.addEventListener(MouseEvent.CLICK,hideHint);
stop();
}
/*
_____________________________________________________________
Метод set hint - установка текста информации.
_____________________________________________________________
Формальный параметр: - текст информации.
_____________________________________________________________
*/ public function set hint(val:String):void
{(1);.field.text = val;= true;
}
/*
_____________________________________________________________
Метод
hideHint - скрытие подсказки.
_____________________________________________________________
Формальный параметр: - событие мышки.
_____________________________________________________________
*/ private function
hideHint(e:MouseEvent):void
{= false;
}
}
}
/*
_____________________________________________________________
Класс событий приложения.
_____________________________________________________________
Используемые глобальные константы:_TRANSPORT - событие выхода в
меню;_TRANSPORT - событие первой инициализации меню;_TRANSPORT - событие
создания меню.
_____________________________________________________________
*/package src
{flash.events.Event;class TEvent extends Event
{static const END_TRANSPORT:String = 'endTransport';static
const FIRST_TRANSPORT:String = 'firstTransport';static const
NEW_TRANSPORT:String = 'newTransport';
/*
_____________________________________________________________
Конструктор класса.
_____________________________________________________________
*/ public function TEvent(type:String,
bubbles:Boolean=false, cancelable:Boolean=false)
{(type, bubbles, cancelable);
}
}
}
/*
_____________________________________________________________
Класс элемента матрицы.
_____________________________________________________________
Используемые глобальные переменные класса: - признак
базисной клетки; - стоимость; - перевозка.
_____________________________________________________________
Используемые методы класса: - очистка поля при первом клике мышки;
get perevozka,perevozka - методы доступа поля perev;
get stoimost - метод для чтения значения поля stoim;
get bazis,bazis - методы доступа поля baz.
_____________________________________________________________
*/src.transport.data
{flash.display.MovieClip;flash.text.TextField;flash.text.TextFormat;flash.text.TextFieldType;flash.events.MouseEvent;class
Element extends MovieClip
{var baz:Boolean;var stoim:TextField;var perev:TextField;
/*
_____________________________________________________________
Конструктор класса.
_____________________________________________________________
*/ public function Element()
{= new TextField();.width=60;.height=26;.x=2;.y=2;.type=
TextFieldType.INPUT;.defaultTextFormat=new
TextFormat(null,16,0x003e41,true,null,null,null,null,'right');.text='0';(stoim);.restrict='0-9';.maxChars=3;=
new
TextField();.width=60;.height=37;.selectable=false;.x=2;.y=18;.defaultTextFormat=new
TextFormat(null,30,0xFFFFFF,true,null,null,null,null,'center');.text='0';(perev);=false;();.addEventListener(MouseEvent.CLICK,clearStoimField);
}
/*
_____________________________________________________________
Метод clearStoimField - очистка поля при первом клике мышки.
_____________________________________________________________
Формальный параметр: - событие мышки.
_____________________________________________________________
*/ private function
clearStoimField(e:MouseEvent):void
{.removeEventListener(MouseEvent.CLICK,clearStoimField);.text
= '';
}
/*
_____________________________________________________________
Метод
get perevozka - чтение значения поля perev .
_____________________________________________________________
*/ public function get perevozka():int
{int(perev.text);
}
/*
_____________________________________________________________
Метод
set perevozka - запись значения в поле perev.
_____________________________________________________________
Формальный параметр: - значение для установки.
_____________________________________________________________
*/function set perevozka(val:int):void
{.text=val.toString();
}
/*
_____________________________________________________________
Метод
get stoimost - чтение значения поля stoim.
_____________________________________________________________
*/ public function get stoimost():int
{int(stoim.text);
}
/*
_____________________________________________________________
Метод
get bazis - чтение значения поля baz.
_____________________________________________________________
*/ public function get bazis():Boolean
{
return baz;
}
/*
_____________________________________________________________
Метод set bazis - запись значения в поле baz.
_____________________________________________________________
Формальный параметр: - значение для установки.
_____________________________________________________________
*/ public function set bazis(val:Boolean):void
{=val;
(val)?gotoAndStop(2):gotoAndStop(1);
}
}
}
/*
_____________________________________________________________
Класс элемента вектора запасов и вектора заявок.
_____________________________________________________________
Используемая глобальная переменная класса: - груз.
_____________________________________________________________
Используемые методы класса: - очистка поля при первом клике мышки;
get stock,stock - методы доступа поля stock;
closeStock - ограничение на запись данных в поле st.
_____________________________________________________________
*/src.transport.data
{flash.display.MovieClip;flash.text.TextField;flash.text.TextFieldType;flash.text.TextFormat;flash.events.MouseEvent;class
SStore extends MovieClip
{var st:TextField;
/*
_____________________________________________________________
Конструктор класса.
_____________________________________________________________
*/ public function SStore()
{=new TextField();.width = 70;.height = 38;.y = 10;.type =
TextFieldType.INPUT;.defaultTextFormat = new
TextFormat(null,30,0xf04c33,true,null,null,null,null,'center');.text =
'0';(st);.restrict = '0-9';.maxChars =
3;.addEventListener(MouseEvent.CLICK,clearStField);
}//end
/*
_____________________________________________________________
Метод clearStField - очистка поля при первом клике мышки.
_____________________________________________________________
Формальный параметр: - событие мышки.
_____________________________________________________________
*/ private function
clearStField(e:MouseEvent):void
{.removeEventListener(MouseEvent.CLICK,clearStField);
st.text = '';
}
/*
_____________________________________________________________
Метод get stock - чтение значения поля st.
_____________________________________________________________
*/ public function get stock():int
{
}
/*
_____________________________________________________________
Метод set stock - запись значения в поле st.
_____________________________________________________________
Формальный параметр:
val - значение для установки.
_____________________________________________________________
*/ public function set stock(val:int):void
{.text = val.toString();
}
/*
_____________________________________________________________
Метод closeStock - ограничение на запись данных в поле st.
_____________________________________________________________
*/ public function closeStock():void
{.selectable = false;
}
}
}
Приложение
Б
Результаты выполнения программы
Рисунок 6.1 - Опорный план
Рисунок 6.2 - Улучшение плана
Рисунок 6.3 - Улучшение плана
Рисунок 6.4 - Улучшение плана
Рисунок 6.5 - Улучшение плана
Рисунок 6.6 - Стоимость оптимального плана
Рисунок 6.7 - Оптимальный план