Заключение. С помощью данной программы вы сможете без труда производить вычисления по транспортной задаче

С помощью данной программы вы сможете без труда производить вычисления по транспортной задаче. Интерфейс программы удобен и приятен.


Литература

К.Л. Самаров Транспортная задача. Учебное пособие для студента.

2 Колин Мук ActionScript 3.0 для Flash. Подробное руководство.


ПРИЛОЖЕНИЕ А

(обязательное)

Листинг программы


/*

________________________________________________________________________

Курсовой проект

Тема "Решение транспортной задачи"

________________________________________________________________________

Язык: ActionScript 3.0

Кодировка: ASCII (win.1251)

Среда: Adobe Flash CS6.0

Разработали:

А. В. Андронов

С. А. Соколов

А.Ю. Бадаев

А.В. Никитин

Е.А. Туровский

Дата: 1 ноября 2012г

________________________________________________________________________

Задачей курсовой работы является разработка программы для построения

оптимального плана транспортной задачи.

________________________________________________________________________

Используемые глобальные константы:

STAGE_HEIGHT - высота сцены;

STAGE_WIDTH - ширина сцены.

________________________________________________________________________

Используемые глобальные переменные класса:

task - класс управления задачей;

mm - главное меню;

a - информация о программе.

________________________________________________________________________

Используемые методы класса:

init - инициализация программы;

nTask - создание нового плана;

clearMenu - удаление главного меню;

clearTask - удаление плана;

showMenu - создание главного меню;

about - информация о программе.

________________________________________________________________________

*/

package src

{

import flash.display.MovieClip;

import flash.events.Event;

import src.transport.*;

import flash.events.MouseEvent;

public class Main extends MovieClip

{

public static var STAGE_HEIGHT:int=580,STAGE_WIDTH:int=789;

private var task:Task;

private var mm:MainMenu;

private var a:About;

/*

________________________________________________________________________

Метод enterSize - ввод количества заявок и запасов.

________________________________________________________________________

*/ public function Main()

{

addEventListener(Event.ADDED_TO_STAGE, init);

}

/*

________________________________________________________________________

Метод init - инициализация программы.

________________________________________________________________________

Формальный параметр:

e - событие.

________________________________________________________________________

*/ private function init(e:Event):void

{

removeEventListener(Event.ADDED_TO_STAGE, init);

STAGE_HEIGHT = stage.height;

STAGE_WIDTH = stage.width;

showMenu(new TEvent(TEvent.FIRST_TRANSPORT));

}

/*

________________________________________________________________________

Метод nTask - создание нового плана.

________________________________________________________________________

Формальный параметр:

e - событие мышки.

________________________________________________________________________

*/ private function nTask(e:MouseEvent):void

{

if (a)

{

removeChild(a);

a = null;

}

if (task)

{

clearTask();

}

else

{

task=new Task();

task.enterSize();

addChild(task);

task.addEventListener(TEvent.END_TRANSPORT,showMenu);

task.addEventListener(TEvent.NEW_TRANSPORT,clearMenu);

}

}//end

/*

________________________________________________________________________

Метод clearMenu - удаление главного меню.

________________________________________________________________________

Формальный параметр:

e - событие.

________________________________________________________________________

*/ private function clearMenu(e:TEvent):void

{

mm.new_task.removeEventListener(MouseEvent.CLICK,nTask);

mm.about.removeEventListener(MouseEvent.CLICK,about);

removeChild(mm);

mm = null;

}

/*

________________________________________________________________________

Метод clearTask - удаление плана.

________________________________________________________________________

*/ private function clearTask():void

{

task.removeEventListener(TEvent.END_TRANSPORT,showMenu);

task.removeEventListener(TEvent.NEW_TRANSPORT,clearMenu);

removeChild(task);

task = null;

}//end

/*

________________________________________________________________________

Метод showMenu - создание главного меню.

________________________________________________________________________

Формальный параметр:

e - событие.

________________________________________________________________________

*/ private function showMenu(e:TEvent):void

{

if (e.type == TEvent.END_TRANSPORT)

{

clearTask();

}

mm=new MainMenu();

mm.x = STAGE_WIDTH - mm.width;

mm.y = STAGE_HEIGHT/2-mm.height/2;

addChild(mm);

mm.new_task.addEventListener(MouseEvent.CLICK,nTask);

mm.about.addEventListener(MouseEvent.CLICK,about);

}//end

/*

________________________________________________________________________

Метод about - информация о программе.

________________________________________________________________________

Формальный параметр:

e - событие мышки.

________________________________________________________________________

*/ private function about(e:MouseEvent):void

{

if (a)

{

removeChild(a);

a = null;

}

else

{

a=new About();

a.x = STAGE_WIDTH / 2 - a.width / 2;

a.y = STAGE_HEIGHT / 2 - a.height / 2;

addChild(a);

}

}//end

}//end class

}//end package

/*

________________________________________________________________________

Класс программы управления задачей.

________________________________________________________________________

Используемые глобальные переменные класса:

m - класс матрицы перевозок;

store, stock - вектора заявок и запасов соответственно;

dataConStore,

dataConStock - контейнеры объектов запасов и заявок;

kolZayavok,

kolZapasov - количество заявок и запасов;

control - класс элементов управления;

hint - класс подсказки;

sizeForm - класс формы ввода подсказки.

________________________________________________________________________

Используемые методы класса:

H - вывод информации;

enterSize - ввод размера матрицы перевозок;

checkedSize - проверка ввода размера матрицы перевозок;

enterData - создание и вывод на экран матрицы, кнопок;

showHint - вывод подсказки;

goMenu - выход в главное меню программы;

firstPlan - постраение первого плана;

nextPlan - постраение следующего плана;

sumElementsVector - суммирует элементы вектора запасов или заявок;

showSS - создание и вывод на экран векторов запасов и заявок;

addZaya - добавление в вектор заявок элемента;

addZap - добавление в вектор запасов элемента;

closeEnter - ограничение доступа ввода запасов и заявок;

correctness - проверка корректности ввода значений запасов и заявок.

________________________________________________________________________

*/

package src

{

import flash.display.MovieClip;

import src.transport.data.*;

import src.transport.*;

import flash.events.MouseEvent;

import flash.display.Sprite;

public class Task extends MovieClip

{

private var m:Mat;

private var store:Array,stock:Array;

private var dataConStore:Sprite,dataConStock:Sprite;

private var kolZayavok:int,kolZapasov:int;

private var control:BandControl;

private var hint:Hint;

private var sizeForm:FormSize;

/*

________________________________________________________________________

Конструктор класса.

________________________________________________________________________

*/ public function Task()

{

hint= new Hint();

hint.x = Main.STAGE_WIDTH / 2 - hint.width / 2;

hint.y = Main.STAGE_HEIGHT / 2 - hint.height / 2;

}//end

/*

________________________________________________________________________

Метод H - выводит информацию на экран.

________________________________________________________________________

Формальный параметр:

s - строка информации.

________________________________________________________________________

*/ private function H(s:String):void

{

hint.hint = s;

addChild(hint);

}//end

/*

________________________________________________________________________

Метод enterSize - ввод количества заявок и запасов.

________________________________________________________________________

*/ public function enterSize():void

{

sizeForm=new FormSize();

sizeForm.y = Main.STAGE_HEIGHT / 2 - sizeForm.height / 2;

addChild(sizeForm);

sizeForm.ok.addEventListener(MouseEvent.CLICK,checkedSize);

}//end

/*

________________________________________________________________________

Метод checkedSize - проверка правильности заполнения полей

размеров.

________________________________________________________________________

Формальный параметр:

e - событие мышки.

________________________________________________________________________

*/ private function checkedSize(e:MouseEvent):void

{

if (sizeForm.check)

{

sizeForm.ok.removeEventListener(MouseEvent.CLICK,enterData);

removeChild(sizeForm);

kolZayavok = int(sizeForm.kolzaya.text);

kolZapasov = int(sizeForm.kolzap.text);

sizeForm = null;

enterData();

}

else

{

H('\n\nНе правильный ввод!\n Все поля должны быть заполнены!');

}

}//end

/*

________________________________________________________________________

Метод enterData - создание и вывод на экран матрицы, кнопок.

________________________________________________________________________

*/ private function enterData():void

{

control= new BandControl();

control.y = 0;

addChild(control);

control.btnNext.addEventListener(MouseEvent.CLICK,firstPlan);

control.menu.addEventListener(MouseEvent.CLICK,goMenu);

control.hint_btn.addEventListener(MouseEvent.CLICK,showHint);

m=new Mat();

m.y = 40;

m.x = 40;

m.showMat(kolZayavok,kolZapasov);

addChild(m);

showSS();

H('Заполните поля цены, поля заявок и поля запасов.\nИ нажмите кнопку "Далее" для продолжения...');

}//end

/*

________________________________________________________________________

Метод showHint - вывод подсказки.

________________________________________________________________________

*/ private function showHint(e:MouseEvent):void

{

hint.gotoAndStop(2);

hint.visible = true;

addChild(hint);

}//end

/*

________________________________________________________________________

Метод goMenu - выход в главное меню программы.

________________________________________________________________________

Формальный параметр:

e - событие мышки.

________________________________________________________________________

*/ private function goMenu(e:MouseEvent):void

{

control.btnNext.removeEventListener(MouseEvent.CLICK,firstPlan);

control.menu.removeEventListener(MouseEvent.CLICK,goMenu);

control.hint_btn.removeEventListener(MouseEvent.CLICK,showHint);

dispatchEvent(new TEvent(TEvent.END_TRANSPORT));

}//end

/*

________________________________________________________________________

Метод firstPlan - постраение первого плана.

________________________________________________________________________

Формальный параметр:

e - событие мышки.

________________________________________________________________________

Переменные используемые в методе:

sZaya, sZap - сумма элементов вектора заявок, сумма элементов

вектора запасов.

________________________________________________________________________

*/ private function firstPlan(e:MouseEvent):void

{

var sZaya:int = sumElementsVector(store,kolZayavok);

var sZap:int = sumElementsVector(stock,kolZapasov);

if (stock.every(correctness) && store.every(correctness))

{

if (sZaya<sZap)

{

addZaya(sZap-sZaya);

}

else if (sZaya>sZap)

{

addZap(sZaya-sZap);

}else

{

control.btnNext.removeEventListener(MouseEvent.CLICK,firstPlan);

control.stoimost_plana_txt.text = m.firstPlan(stock,store,kolZayavok,kolZapasov).toString();

control.btnNext.addEventListener(MouseEvent.CLICK,nextPlan);

control.cargo_units_txt.text = sZaya.toString();

H('Первый план поcтроен.\n Нажмите "Далее" для продолжения...');

store.forEach(closeEnter);

stock.forEach(closeEnter);

}

}

else

{

H('Значения полей запасов и заявок \nне должны быть равными нулю или оставаться пустыми\nпроверте правильность');

}

}//end

/*

________________________________________________________________________

Метод nextPlan - постраение следующего плана.

________________________________________________________________________

Формальный параметр:

e - событие мышки.

________________________________________________________________________

*/ private function nextPlan(e:MouseEvent):void

{

hint.visible = false;

if (m.newPlan(kolZayavok,kolZapasov))

{

H('\n\nПлан оптимален, задача решена.\nСтоимость плана:'+control.stoimost_plana_txt.text);

control.btnNext.removeEventListener(MouseEvent.CLICK,nextPlan);

}

else

{

control.stoimost_plana_txt.text = m.sumTransport(kolZayavok,kolZapasov).toString();

}

}//end

/*

________________________________________________________________________

Метод sumElementsVector - суммирует элементы вектора запасов

или заявок.

________________________________________________________________________

Формальные параметры:

v - вектор;

m - количество элементов.

________________________________________________________________________

Переменная используемые в методе:

sum - сумма элементов.

________________________________________________________________________

*/ public function sumElementsVector(v:Array,m:int):int

{

var sum:int = 0;

for (var i:int=0; i<m; i++)

{

sum += int(v[i].stock);

}

return sum;

}//end

/*

________________________________________________________________________

Метод showSS - создание и вывод на экран векторов

запасов и заявок

________________________________________________________________________

Переменные используемые в методе:

i - счетчик цикла;

yy,xx - координаты расположения объектов.

________________________________________________________________________

*/ private function showSS():void

{

var yy:int = 0;

var i:int;

store = new Array();

dataConStore= new Sprite();

dataConStore.x = m.x + m.width + 10,dataConStore.y = m.y;

for (i=0; i<kolZayavok; i++)

{

store.push(new SStore());

store[i].y = yy;

dataConStore.addChild(store[i]);

yy += store[i].height + 5;

}

addChild(dataConStore);

stock= new Array();

dataConStock= new Sprite();

dataConStock.x = m.x;

dataConStock.y = m.y + m.height + 10;

var xx:int = 0;

for (i=0; i<kolZapasov; i++)

{

stock.push(new SStore());

stock[i].x = xx;

dataConStock.addChild(stock[i]);

xx += stock[i].width + 5;

}

addChild(dataConStock);

}//end

/*

________________________________________________________________________

Метод addZaya - добавление в вектор заявок элемента.

________________________________________________________________________

Формальный параметр:

arg - значение добавляемого элемента.

________________________________________________________________________

*/ private function addZaya(arg:int):void

{

kolZayavok = m.addStr(kolZapasov);

store.push(new SStore());

store[kolZayavok - 1].y = dataConStore.height + 5;

dataConStore.addChild(store[kolZayavok-1]);

store[kolZayavok - 1].stock = arg.toString();

dataConStock.y = m.y + m.height + 10;

}//end

/*

________________________________________________________________________

Метод addZap - добавление в вектор запасов элемента.

________________________________________________________________________

Формальный параметр:

arg - значение добавляемого элемента.

________________________________________________________________________

*/ private function addZap(arg:int):void

{

kolZapasov = m.addSto(kolZapasov);

stock.push(new SStore());

stock[kolZapasov - 1].x = dataConStock.width + 5;

dataConStock.addChild(stock[kolZapasov -1]);

stock[kolZapasov - 1].stock = arg.toString();

dataConStore.x = m.x + m.width + 10;

}//end

/*

________________________________________________________________________

Метод closeEnter - ограничение доступа ввода запасов и заявок.

________________________________________________________________________

Формальные параметры:

element - элемент для ограничения доступа;

index - индекс элемента в массиве;

arr - массив элементов.

________________________________________________________________________

*/ private function closeEnter(element:*, index:Number, arr:Array):void

{

element.closeStock();

}//end

/*

________________________________________________________________________

Метод correctness - проверка корректности ввода значений

запасов и заявок.

________________________________________________________________________

Формальные параметры:

element - элемент для ограничения доступа;

index - индекс элемента в массиве;

arr - массив элементов.

________________________________________________________________________

*/ private function correctness(element:*, index:Number, arr:Array):Boolean

{

return element.stock>0;

}//end

}//end class

}//end package

/*

________________________________________________________________________

Класс работы с матрицой перевозок.

________________________________________________________________________

Используемые глобальные переменные класса:

element - матрица перевозок;

cicle - вектор цикла.

________________________________________________________________________

Используемые методы класса:

showMat - создание и вывод на экран матрицы перевозок;

sumTransport - подсчет стоимости плана;

firstPlan - построение первого плана;

getValue - вспомогательный метод копирования значений запасов и

заявок;

addStr - добавление строки в матрицу;

addSto - добавление столбца в матрицу;

newPlan - построение нового плана;

ciclePr - улучшение плана перевозок;

clearCicleShow - визуальная очистка плана;

endCycle - проверка завершения цикла;

searchCycle - поиск цикла;

newObjectWay - добавление в вектор элемента цикла;

priceCicle - определение цены цикла.

________________________________________________________________________

*/

package src.transport

{

import flash.display.MovieClip;

import src.transport.data.*;

public class Mat extends MovieClip

{

private var element:Array;

private var cicle:Array;

/*

________________________________________________________________________

Конструктор класса.

________________________________________________________________________

*/ public function Mat()

{

}

/*

________________________________________________________________________

Метод showMat - создание и вывод на экран матрицы перевозок.

________________________________________________________________________

Формальные параметры:

n - количество строк;

m - количество столбцов.

________________________________________________________________________

Переменные используемые в методе:

yy,xx - координаты расположения элементов.

________________________________________________________________________

*/ public function showMat(n:int,m:int):void

{

var xx:int = 0,yy:int = 0;

element = new Array(n);

for (var i:int=0; i<n; i++)

{

element[i] = new Array(m);

for (var j:int=0; j<m; j++)

{

element[i][j]= new Element();

element[i][j].x = xx;

element[i][j].y = yy;

addChild(element[i][j]);

xx += element[i][j].width + 5;

}

xx = 0;

yy += element[i][j - 1].height + 5;

}

}//end

/*

________________________________________________________________________

Метод sumTransport - подсчет стоимости плана.

________________________________________________________________________

Формальные параметры:

n - количество строк;

m - количество столбцов.

________________________________________________________________________

Переменная используемые в методе:

sum - сумма элементов.

________________________________________________________________________

*/ public function sumTransport(n:int,m:int):int

{

var sum:int = 0;

for (var i:int=0; i<n; i++)

{

for (var j:int=0; j<m; j++)

{

sum += element[i][j].stoimost * element[i][j].perevozka;

}

}

return sum;

}//end

/*

________________________________________________________________________

Метод firstPlan - построение первого плана.

________________________________________________________________________

Формальные параметры:

n - количество строк;

m - количество столбцов;

_a - вектор запасов;

_b - вектор заявок;

________________________________________________________________________

Переменные используемые в методе:

i, j, k - счетчики.

a - вектор запасов;

b - вектор заявок;

min - минимальная стоимость;

I, J - индексы элемента;

sum - стоимость первого плана;

p - количество груза.

________________________________________________________________________

*/ public function firstPlan(_a:Array,_b:Array,n:int,m:int):int

{

var i:int,j:int;

var a:Array = _a.map(getValue);

var b:Array = _b.map(getValue);

var min:int,k:int,J:int,I:int,sum:int = 0,p:int = 0;

for (k=0; k<(n+m-1); k++)

{

min = 1000;

for (i=0; i<n; i++)

{

if (b[i] > 0)

{

for (j=0; j<m; j++)

{

if (min>element[i][j].stoimost&&(a[j]>0))

{

min = element[i][j].stoimost;

I = i;

J = j;

}

}

}

}

if (! element[I][J].bazis)

{

p=(a[J]<b[I])?a[J]:b[I];

a[J] -= p;

b[I] -= p;

element[I][J].perevozka = p;

element[I][J].bazis = true;

sum += min * p;

}

else

{

i = 0;

while (i<n)

{

for (j=0; j<m; j++)

{

if (! element[i][j].bazis)

{

element[i][j].bazis = true;

i = n;

break;

}

}

i++;

}

}

}

return sum;

}//end

/*

________________________________________________________________________

Метод getValue - вспомогательный метод копирования значений

запасов и заявок.

________________________________________________________________________

Формальные параметры:

element - элемент для ограничения доступа;

index - индекс элемента в массиве;

arr - массив элементов.

________________________________________________________________________

*/ private function getValue(element:*, index:int, arr:Array):int

{

return element.stock;

}//end

/*

________________________________________________________________________

Метод addStr - добавление строки в матрицу.

________________________________________________________________________

Формальный параметр:

zap - длина вектора запасов.

________________________________________________________________________

*/ public function addStr(zap:int):int

{

var i:int = element.length,xx:int = 0;

var yy:int = element[i - 1][0].y + element[i - 1][0].width - 5;

element[i]=new Array();

for (var j:int=0; j<zap; j++)

{

element[i][j]=new Element();

element[i][j].y = yy;

element[i][j].x = xx;

addChild(element[i][j]);

xx += element[i][j].width + 5;

}

return element.length;

}//end

/*

________________________________________________________________________

Метод addSto - добавление столбца в матрицу.

________________________________________________________________________

Формальный параметр:

zap - длина вектора заявок.

________________________________________________________________________

*/ public function addSto(zap:int):int

{

var xx:int = element[0][zap - 1].x + element[0][zap - 1].width + 5;

var yy:int = 0;

for (var j:int=0; j<element.length; j++)

{

element[j][zap]=new Element();

element[j][zap].y = yy;

element[j][zap].x = xx;

addChild(element[j][zap]);

yy += element[j][zap].height + 5;

}

return element[j-1].length;

}//end

/*

________________________________________________________________________

Метод newPlan - построение нового плана.

________________________________________________________________________

Формальные параметры:

n - количество строк;

m - количество столбцов.

________________________________________________________________________

Переменные используемые в методе:

i, j - счетчики.

________________________________________________________________________

*/ public function newPlan(n:int,m:int):Boolean

{

var i:int,j:int;

if (cicle)

{

clearCicleShow();

}

for (i=0; i<n; i++)

{

for (j=0; j<m; j++)

{

if (! element[i][j].bazis)

{

cicle= new Array();

newObjectWay(0,i,j);

if (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))

{

if (priceCicle())

{

ciclePr();

return false;

}

}

}

}

}

return true;

}//end

/*

________________________________________________________________________

Метод ciclePr - улучшение плана перевозок.

________________________________________________________________________

Переменные используемые в методе:

i - счетчик;

min - минимальный груз;

ki, kj - индексы;

zn - знак операции.

________________________________________________________________________

*/ private function ciclePr():void

{

var min:int = cicle[1].perev,ki:int = cicle[1].i,kj:int = cicle[1].j,i:int = 1;

while (i<cicle.length)

{

if (min>cicle[i].perev)

{

min = cicle[i].perev;

ki = cicle[i].i;

kj = cicle[i].j;

}

i += 2;

}

var zn:int = 1;

element[cicle[0].i][cicle[0].j].bazis = true;

element[ki][kj].bazis = false;

for (i=0; i<cicle.length; i++)

{

element[cicle[i].i][cicle[i].j].perevozka += min * zn;

element[cicle[i].i][cicle[i].j].gotoAndStop(3);

zn *= -zn;

}

element[cicle[0].i][cicle[0].j].gotoAndStop(4);

element[ki][kj].gotoAndStop(5);

}//end

/*

________________________________________________________________________

Метод clearCicleShow - визуальная очистка плана.

________________________________________________________________________

Переменная используемая в методе:

i - счетчик.

________________________________________________________________________

*/ private function clearCicleShow():void

{

for (var i:int=0; i<cicle.length; i++)

{

if (element[cicle[i].i][cicle[i].j].bazis)

{

element[cicle[i].i][cicle[i].j].gotoAndStop(2);

}

else

{

element[cicle[i].i][cicle[i].j].gotoAndStop(1);

}

}

}//end

/*

________________________________________________________________________

Метод endCycle - проверка завершения цикла.

________________________________________________________________________

Формальные параметры:

i, j - индексы.

________________________________________________________________________

*/ private function endCycle(i:int,j:int):Boolean

{

return ((cicle[0].i==i)&&(cicle[0].j==j));

}//end

/*

________________________________________________________________________

Метод searchCycle - поиск цикла.

________________________________________________________________________

Формальные параметры:

_n - количество строк;

_m - количество столбцов;

_i, _j - индексы;

p - направление движения;

k - индекс вектора цикла.

________________________________________________________________________

Переменные используемые в методе:

i, j - счетчики;

f - существование цикла;

b - вспомогательная переменная.

________________________________________________________________________

*/ private function searchCycle(k:int,p:int,_i:int,_j:int,_n:int,_m:int):Boolean

{

var j:int,i:int,b:Boolean = false,f:Boolean = false;

if (k>21)

{

return false;

}

switch (p)

{

case 1:

for (i = _i; i<_n; i++)

{

if ((k>2)&&endCycle(i,_j))

{

return true;

}

if (element[i][_j].bazis && b)

{

if (f=(searchCycle(k+1,2,i,_j,_n,_m)||searchCycle(k+1,4,i,_j,_n,_m)))

{

newObjectWay(k,i,_j);

}

else

{

f = searchCycle(k,1,i,_j,_n,_m);

}

return f;

}

b = true;

}

break;

case 2:

for (j = _j; j<_m; j++)

{

if ((k>2)&&endCycle(_i,j))

{

return true;

}

if (element[_i][j].bazis && b)

{

if (f=(searchCycle(k+1,3,_i,j,_n,_m)||searchCycle(k+1,1,_i,j,_n,_m)))

{

newObjectWay(k,_i,j);

}

else

{

f = searchCycle(k,2,_i,j,_n,_m);

}

return f;

}

b = true;

}

break;

case 3:

for (i = _i; i>=0; i--)

{

if ((k>2)&&endCycle(i,_j))

{

return true;

}

if (element[i][_j].bazis && b)

{

if (f=(searchCycle(k+1,4,i,_j,_n,_m)||searchCycle(k+1,2,i,_j,_n,_m)))

{

newObjectWay(k,i,_j);

}

else

{

f = searchCycle(k,3,i,_j,_n,_m);

}

return f;

}

b = true;

}

break;

case 4:

for (j = _j; j>=0; j--)

{

if ((k>2)&&endCycle(_i,j))

{

return true;

}

if (element[_i][j].bazis && b)

{

if (f=(searchCycle(k+1,1,_i,j,_n,_m)||searchCycle(k+1,3,_i,j,_n,_m)))

{

newObjectWay(k,_i,j);

}

else

{

f = searchCycle(k,4,_i,j,_n,_m);

}

return f;

}

b = true;

}

break;

}

return false;

}//end

/*

________________________________________________________________________

Метод newObjectWay - добавление в вектор элемента цикла.

________________________________________________________________________

Формальные параметры:

i, j - индексы элемента матрицы;

k - индекс вектора цикла.

________________________________________________________________________

Переменная используемая в методе:

obj - элемент вектора цикла.

________________________________________________________________________

*/ private function newObjectWay(k:int,i:int,j:int):void

{

var obj:Object= new Object();

obj.i = i;

obj.j = j;

obj.price = element[i][j].stoimost;

obj.perev = element[i][j].perevozka;

cicle[k] = obj;

}//end

/*

________________________________________________________________________

Метод priceCicle - определение цены цикла.

_________________________________________________________________________

Переменная используемая в методе:

sum - цена цикла.

________________________________________________________________________

*/ private function priceCicle():Boolean

{

if ((cicle.length%2)!=0)

{

return false;

}

var sum:int = 0,i:int = 0;

while (i<cicle.length)

{

sum += cicle[i].price - cicle[i + 1].price;

i += 2;

}

return sum<0;

}//end

}//end class

}//end package

/*

________________________________________________________________________

Класс формы ввода размера матрицы.

________________________________________________________________________

Используемые глобальные переменные класса:

kolzaya - количество заявок;

kolzap - количество запасов.

________________________________________________________________________

Используемый метод класса:

get check - метод возвращающий корректность ввода.

________________________________________________________________________

*/

package src.transport

{

import flash.display.MovieClip;

public class FormSize extends MovieClip

{

/*

________________________________________________________________________

Конструктор класса.

________________________________________________________________________

*/ public function FormSize()

{

this.kolzaya.restrict = '1-6';

this.kolzaya.maxChars = 1;

this.kolzap.restrict = '1-6';

this.kolzap.maxChars = 1;

}

/*

________________________________________________________________________

Метод get check - метод возвращающий корректность ввода.

________________________________________________________________________

*/ public function get check():Boolean

{

return kolzaya.text&&kolzap.text;

}

}

}

/*

________________________________________________________________________

Класс вывода информации.

________________________________________________________________________

Используемые глобальные переменные класса:

ok - кнопка;

field - текстовое поле.

________________________________________________________________________

Используемые методы класса:

set hint - установка текста информации;

hideHint - скрытие подсказки.

________________________________________________________________________

*/

package src

{

import flash.display.MovieClip;

import flash.events.MouseEvent;

public class Hint extends MovieClip

{

/*

________________________________________________________________________

Конструктор класса.

________________________________________________________________________

*/ public function Hint()

{

visible = false;

ok.addEventListener(MouseEvent.CLICK,hideHint);

stop();

}

/*

________________________________________________________________________

Метод set hint - установка текста информации.

________________________________________________________________________

Формальный параметр:

val - текст информации.

________________________________________________________________________

*/ public function set hint(val:String):void

{

gotoAndStop(1);

this.field.text = val;

visible = true;

}

/*

________________________________________________________________________

Метод hideHint - скрытие подсказки.

________________________________________________________________________

Формальный параметр:

e - событие мышки.

________________________________________________________________________

*/ private function hideHint(e:MouseEvent):void

{

visible = false;

}

}

}

/*

________________________________________________________________________

Класс событий приложения.

________________________________________________________________________

Используемые глобальные константы:

END_TRANSPORT - событие выхода в меню;

FIRST_TRANSPORT - событие первой инициализации меню;

NEW_TRANSPORT - событие создания меню.

________________________________________________________________________

*/package src

{

import flash.events.Event;

public class TEvent extends Event

{

public static const END_TRANSPORT:String = 'endTransport';

public static const FIRST_TRANSPORT:String = 'firstTransport';

public static const NEW_TRANSPORT:String = 'newTransport';

/*

________________________________________________________________________

Конструктор класса.

________________________________________________________________________

*/ public function TEvent(type:String, bubbles:Boolean=false, cancelable:Boolean=false)

{

super(type, bubbles, cancelable);

}

}

}

/*

________________________________________________________________________

Класс элемента матрицы.

________________________________________________________________________

Используемые глобальные переменные класса:

baz - признак базисной клетки;

stoim - стоимость;

perev - перевозка.

________________________________________________________________________

Используемые методы класса:

clearStoimField - очистка поля при первом клике мышки;

get perevozka,

set perevozka - методы доступа поля perev;

get stoimost - метод для чтения значения поля stoim;

get bazis,

set bazis - методы доступа поля baz.

________________________________________________________________________

*/

package src.transport.data

{

import flash.display.MovieClip;

import flash.text.TextField;

import flash.text.TextFormat;

import flash.text.TextFieldType;

import flash.events.MouseEvent;

public class Element extends MovieClip

{

private var baz:Boolean;

private var stoim:TextField;

private var perev:TextField;

/*

________________________________________________________________________

Конструктор класса.

________________________________________________________________________

*/ public function Element()

{

stoim= new TextField();

stoim.width=60;

stoim.height=26;

stoim.x=2;

stoim.y=2;

stoim.type= TextFieldType.INPUT;

stoim.defaultTextFormat=new TextFormat(null,16,0x003e41,true,null,null,null,null,'right');

stoim.text='0';

addChild(stoim);

stoim.restrict='0-9';

stoim.maxChars=3;

perev= new TextField();

perev.width=60;

perev.height=37;

perev.selectable=false;

perev.x=2;

perev.y=18;

perev.defaultTextFormat=new TextFormat(null,30,0xFFFFFF,true,null,null,null,null,'center');

perev.text='0';

addChild(perev);

baz=false;

stop();

stoim.addEventListener(MouseEvent.CLICK,clearStoimField);

}

/*

________________________________________________________________________

Метод clearStoimField - очистка поля при первом клике мышки.

________________________________________________________________________

Формальный параметр:

e - событие мышки.

________________________________________________________________________

*/ private function clearStoimField(e:MouseEvent):void

{

stoim.removeEventListener(MouseEvent.CLICK,clearStoimField);

stoim.text = '';

}

/*

________________________________________________________________________

Метод get perevozka - чтение значения поля perev.

________________________________________________________________________

*/ public function get perevozka():int

{

return int(perev.text);

}

/*

________________________________________________________________________

Метод set perevozka - запись значения в поле perev.

________________________________________________________________________

Формальный параметр:

val - значение для установки.

________________________________________________________________________

*/

public function set perevozka(val:int):void

{

perev.text=val.toString();

}

/*

________________________________________________________________________

Метод get stoimost - чтение значения поля stoim.

________________________________________________________________________

*/ public function get stoimost():int

{

return int(stoim.text);

}

/*

________________________________________________________________________

Метод get bazis - чтение значения поля baz.

________________________________________________________________________

*/ public function get bazis():Boolean

{

return baz;

}

/*

________________________________________________________________________

Метод set bazis - запись значения в поле baz.

________________________________________________________________________

Формальный параметр:

val - значение для установки.

________________________________________________________________________

*/ public function set bazis(val:Boolean):void

{

baz=val;

(val)?gotoAndStop(2):gotoAndStop(1);

}

}

}

/*

________________________________________________________________________

Класс элемента вектора запасов и вектора заявок.

________________________________________________________________________

Используемая глобальная переменная класса:

st - груз.

________________________________________________________________________

Используемые методы класса:

clearStField - очистка поля при первом клике мышки;

get stock,

set stock - методы доступа поля stock;

closeStock - ограничение на запись данных в поле st.

________________________________________________________________________

*/

package src.transport.data

{

import flash.display.MovieClip;

import flash.text.TextField;

import flash.text.TextFieldType;

import flash.text.TextFormat;

import flash.events.MouseEvent;

public class SStore extends MovieClip

{

private var st:TextField;

/*

________________________________________________________________________

Конструктор класса.

________________________________________________________________________

*/ public function SStore()

{

st=new TextField();

st.width = 70;

st.height = 38;

st.y = 10;

st.type = TextFieldType.INPUT;

st.defaultTextFormat = new TextFormat(null,30,0xf04c33,true,null,null,null,null,'center');

st.text = '0';

addChild(st);

st.restrict = '0-9';

st.maxChars = 3;

st.addEventListener(MouseEvent.CLICK,clearStField);

}//end

/*

________________________________________________________________________

Метод clearStField - очистка поля при первом клике мышки.

________________________________________________________________________

Формальный параметр:

e - событие мышки.

________________________________________________________________________

*/ private function clearStField(e:MouseEvent):void

{

st.removeEventListener(MouseEvent.CLICK,clearStField);

st.text = '';

}

/*

________________________________________________________________________

Метод get stock - чтение значения поля st.

________________________________________________________________________

*/ public function get stock():int

{

return int(st.text);

}

/*

________________________________________________________________________

Метод set stock - запись значения в поле st.

________________________________________________________________________

Формальный параметр:

val - значение для установки.

________________________________________________________________________

*/ public function set stock(val:int):void

{

st.text = val.toString();

}

/*

________________________________________________________________________

Метод closeStock - ограничение на запись данных в поле st.

________________________________________________________________________

*/ public function closeStock():void

{

st.selectable = false;

}

}

}

ПРИЛОЖЕНИЕ Б

(обязательное)

Результаты выполнения программы


Рисунок 6.1 – Опорный план

Рисунок 6.2 – Улучшение плана


Рисунок 6.3 – Улучшение плана

Рисунок 6.4 – Улучшение плана

Рисунок 6.5 – Улучшение плана

Рисунок 6.6 – Стоимость оптимального плана

Рисунок 6.7 – Оптимальный план


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: