Описание и постановка задачи 


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Описание и постановка задачи



Содержание

 

Введение. 4

1 Аналитическая часть. 5

1.1 Описание и постановка задачи. 5

1.2 Описание и анализ математической модели. 7

1.3 Обоснование выбора инструментальных средств. 8

2 Технологическая часть. 9

2.1 Назначение и цель создания. 9

2.2 Требования к системе. 9

2.2.1 Требования к функциям системы.. 9

2.2.2 Требования к интерфейсу пользователя. 9

2.2.3 Требования к защите информации. 10

2.3 Перечень и описание входных данных. 10

2.4 Руководство к использованию.. 11

2.5 Результаты экспериментальной проверки. 12

3 Охрана труда и техники безопасности.. 13

Заключение. 16

Список используемой литературы. 17

Приложение А.. 18

Приложение Б. 22

 


Введение

 

Транспортная задача – это задача о наиболее экономичном плане перевозок груза. Транспортная задача является одной из самых распространенных специальных задач линейного программирования. Частные постановки задачи рассмотрены рядом специалистов по транспорту, например, А.Н. Толстым.

Первая строгая постановка транспортной задачи принадлежит Хичкоку, и поэтому в зарубежной литературе иногда ее называют проблемой Хичкока.

Первый точный метод решения транспортной задачи разработан советскими учеными Л.В. Канторовичем и М.К. Гавуриным.


Аналитическая часть

 

Технологическая часть

 

Назначение и цель создания

 

Программный продукт предназначен для автоматизации просчета транспортной задачи. Программный продукт значительно ускорит поиск решения.

Задание на разработку программного продукта было выдано преподавателем колледжа ВКГТУ Осадчей Н.А.. Программный продукт должен быть разработан в срок с пятого сентября до двадцать шестого октября две тысячи пятого года.

 

 

Требования к системе

 

Требования к функциям системы

 

Программный продукт должен решать транспортную задачу при любых начальных условиях, удовлетворяющих разрешимости транспортной задачи. При сбоях в электропитании для наилучшей работы программы необходимо использовать блок бесперебойного питания.

 

 

Требования к интерфейсу пользователя

 

Данная программа выполнена в соответствии с требованиями пользователя. Цветовая гамма форм приемлемая, не бросается в глаза, нет ярких контрастов, которые могут затруднять длительную работу с программой. Данный программный продукт обладает простым пользовательским интерфейсом. Основное меню программы загружается после закрытия окна загрузки и ввода пароля. Все окна программы плавно раскрываются из центра экрана. Меню содержит все функциональные возможности программы в соответствии с требованиями, которые были предъявлены к ней на этапе планирования данной программы, а также справочную систему “Help” для решения вопросов, возникших в ходе работы с программой. Помощь также соответствует всем требованиям основной программы, т.е. не имеет ярких контрастов, все объекты на форме расположены в удобном порядке.

Минимальная конфигурация, необходимая для нормального функционирования программного продукта содержит следующие параметры:

· Процессор Celeron 1200 и выше;

· ОЗУ – 128 Мб и выше;

· Цветовая гамма – 32 бита;

· Занимаемое место на НЖМД –

· Монитор;

· Клавиатура;

· Манипулятор “Мышь”;

· 19,9 Mb свободного места на диске.

 

 

Требования к защите информации

 

В программном продукте должна быть предусмотрена защита информации от постороннего вмешательства. В разрабатываемом программном продукте такая защита предусмотрена. В программе во все поля ввода можно вводить только цифры, это обусловлено тем что все поля для ввода являются полями ввода количеств поставщиков и потребителей. Для решения в программе транспортной задачи с определенными условиями необходимо пройти по следующему алгоритму:

· Ввести количества поставщиков и потребителей;

· Заполнить таблицу с условиями задачи. Выбрать путь заполнения вручную или выбрать путь заполнения случайными числами;

· Вывести в таблицу с результатом ответ на введенную транспортную задачу;

· Выйти из программы или начать алгоритм заново.

Выполнение алгоритма обусловлено тем, что средства управления таблицами по мере выполнения алгоритма становятся активными или дезактивируются.

 

 

Руководство к использованию

 

При входе в программу появляется окошко, которое является окном запроса пароля.

В поле вводится пароль, заменяемый в самом поле ввода на знаки «*». После этого нажимается кнопка «Да», которая выполняет вход в программу. Нажатие кнопки «Нет» на данном этапе приведет к выходу из программы. При первом входе в программу пароля нет, то есть ничего в поле ввода пароля вводить не надо. Но при помощи кнопки «Смена пароля» можно ввести и изменить пароль. В поле ввода «Старый пароль» вводится старый пароль, в поля ввода «Новый пароль» и «Подтверждение» необходимо ввести тот пароль, который Вы хотели бы поставить при входе в программу (см. приложение А, рисунок 1).

После нажатия кнопки «Да» в окне входа в программу на экране появляется заставка, и далее появляется рабочее окно (см. приложение А, рисунок 2).

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

После ввода этих количеств становятся активными кнопка «Заполнить случайно» и независимый переключатель «Ввод параметров таблицы вручную», а также их аналоги в контекстном и главном меню. Так как в этот момент активными остаются поля ввода количеств поставщиков и потребителей, то если удалить хотя бы одно из значений, то это приведет к не активности кнопки, независимого переключателя и их аналогов в меню.

Если Вы остановите свой выбор на кнопке «Заполнить случайно», то это приведет к тому, что таблица исходных данных будет заполнена случайными числами, причем транспортная задача будет иметь закрытую форму. При нажатии кнопки «Заполнить случайно» автоматически независимый переключатель становится неактивным, а кнопка «Результат» активируется (см. приложение А, рисунок 3).

Если Вы щелкните по независимому переключателю, тем самым, поставив галочку, то дезактивируется кнопка «Заполнить случайно», а активной станет кнопка «Создать шапку таблицы». Ее нажатие приведет к созданию шапки таблицы и открытию полей таблицы для редактирования, а также станет активной кнопка «Принять данные» (см. приложение А, рисунок 4).

Необходимо ввести данные в таблицу и нажать кнопку «Принять данные». Если форма транспортной задачи представляет собой закрытую модель, то программа выдаст сообщение о принятии данных (см. рисунок А.5).

В случае, когда программа обнаружит, что суммы запасов и потребностей не равны, она выдаст запрос о том, что ей делать (см. приложение А, рисунок 6).

Нажатие кнопки «Да» приведет к изменению условий транспортной задачи таким образом, что открытая модель станет закрытой путем добавления фиктивного пункта назначения или фиктивного пункта отправления. Нажатие кнопки «Нет» приведет к возврату, и пользователь должен сам изменить условия задачи.

После того, как данные были приняты программой, активной становиться кнопка «Результат», а кнопка «Принять данные» дезактивируется.

Нажатие кнопки «Результат» приведет к появлению в таблице результата ответа на поставленную задачу, а в поле «Стоимость перевозок» появиться сумма затрат на перевозки (см. приложение А, рисунок 7).

Далее неактивной станет кнопка «Результат», а активируется кнопка «Заново». Нажатие кнопки заново приведет обращению рабочего окна в изначальную форму.

 

 

Заключение

 

В курсовом проекте были рассмотрены следующие вопросы:

· Разработан алгоритм метода решения поставленной задачи;

· Написанная программа, пригодная для использования

Задачей данного курсового проекта являлось разработать программный продукт «Решение транспортной задачи методом минимальной стоимости» с использованием таблиц в Delphi.

Для достижения данной цели в первом разделе курсового проекта была дана теория решения данной задачи, которой подчиняется данный курсовой проект.

Во второй части курсового проекта изложено описание программной реализации данной задачи, функциональные возможностей программы, требования к работе с программным продуктом и руководство к загрузке и эксплуатации

Как известно, по степени развития утомления работа на ЭВМ стоит на втором месте после работы водителей автобусов. Поэтому для обеспечения безопасности работы с видеотерминалами необходимо проследить соответствие условий работы нормам безопасности. Критерии данного исследования изложены в третьем разделе пояснительной записки, касающемся вопросов охраны труда.


Список используемой литературы.

 


Приложение А

 

 

Рисунок 1 – Вход в программу

 

 

 

Рисунок 2 – Рабочее окно

 

 

 

Рисунок 3 – Заполнение случайными числами

 

 

Рисунок 4 – Заполнение вручную

 

 

 

Рисунок 5 – Принятие данных

 

 

Рисунок 6 – Обработка открытой формы условий транспортной задачи

 

 

 

Рисунок 7 – Результат

 


Приложение В

 

unit Unit1_1;

interface

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

Dialogs, Grids, StdCtrls, Buttons, Menus;

type

TForm1 = class(TForm)

StringGrid1: TStringGrid;

Edit1: TEdit;

Edit2: TEdit;

Label1: TLabel;

Label2: TLabel;

Button1: TButton;

Button2: TButton;

StringGrid2: TStringGrid;

Edit3: TEdit;

Label3: TLabel;

GroupBox1: TGroupBox;

Button4: TButton;

CheckBox1: TCheckBox;

Button5: TButton;

BitBtn1: TBitBtn;

BitBtn2: TBitBtn;

MainMenu1: TMainMenu;

N1: TMenuItem;

N2: TMenuItem;

N3: TMenuItem;

N5: TMenuItem;

N6: TMenuItem;

N7: TMenuItem;

N4: TMenuItem;

N8: TMenuItem;

N9: TMenuItem;

N10: TMenuItem;

PopupMenu1: TPopupMenu;

N11: TMenuItem;

N12: TMenuItem;

N13: TMenuItem;

N14: TMenuItem;

N15: TMenuItem;

N16: TMenuItem;

N17: TMenuItem;

N18: TMenuItem;

procedure Button1Click(Sender: TObject);

procedure Button2Click(Sender: TObject);

procedure Edit1KeyPress(Sender: TObject; var Key: Char);

procedure Edit2KeyPress(Sender: TObject; var Key: Char);

procedure Button4Click(Sender: TObject);

procedure FormCreate(Sender: TObject);

procedure Edit1Change(Sender: TObject);

procedure Edit2Change(Sender: TObject);

procedure CheckBox1Click(Sender: TObject);

procedure Button5Click(Sender: TObject);

procedure BitBtn1Click(Sender: TObject);

procedure BitBtn2Click(Sender: TObject);

private

{ Private declarations }

public

n,m,s1,s2:integer;

ishod:array [1..100,1..100] of integer;

zap,potr:array [1..100] of integer;

s,o,q:string;

activ:integer;

VHODIM:boolean;

{ Public declarations }

end;

var

Form1: TForm1;

ac1,ac2:boolean;

implementation

uses Unit2, Unit5, Unit4;

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);

var s1,s2,i,j,a,b:integer; s:string;

begin

Edit1.Enabled:=false;

Edit2.Enabled:=false;

Label1.Enabled:=false;

Label2.Enabled:=false;

Label3.Enabled:=true;

Edit3.Enabled:=true;

BitBtn1.Enabled:=true;N8.Enabled:=true;N13.Enabled:=true;

CheckBox1.Enabled:=false;

N5.Enabled:=false;

n:=strtoint(Edit1.Text);

m:=strtoint(Edit2.Text);

StringGrid1.ColCount:=m+2;

StringGrid1.RowCount:=n+2;

StringGrid1.FixedCols:=1;

StringGrid1.FixedRows:=1;

StringGrid1.FixedColor:=clmenu;

StringGrid2.ColCount:=m+1;

StringGrid2.RowCount:=n+1;

StringGrid2.FixedCols:=1;

StringGrid2.FixedRows:=1;

StringGrid2.FixedColor:=clmenu;

for i:=1 to n do

for j:=1 to m do

ishod[i,j]:=random(50);

while s<>'2' do

begin

for i:=1 to n do begin

a:= random(300);

s1:=s1+a;

zap[i]:=a;

StringGrid1.Cells[m+1,i]:=inttostr(zap[i]);

end;

for j:=1 to m do begin

b:= random(300);

s2:=s2+b;

potr[j]:=b;

StringGrid1.Cells[j,n+1]:=inttostr(potr[j]);

end;

if s1=s2 then s:='2' else

s1:=0; s2:=0;

end;

for i:=1 to m do begin

s:=inttostr(i);

StringGrid1.Cells[i,0]:='Пункт назначения'+s;

end;

for j:=1 to n do begin

s:=inttostr(j);

StringGrid1.Cells[0,j]:='Пункт отправления'+s;

end;

StringGrid1.Cells[m+1,0]:='Запасы';

StringGrid1.Cells[0,n+1]:='Потребности';

for i:=1 to n do

for j:=1 to m do

StringGrid1.Cells[j,i]:=inttostr(ishod[i,j]);

end;

procedure TForm1.Button2Click(Sender: TObject);

begin

Form1.Close;

form2.close;

end;

procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);

begin

case Key of

'0'..'9',#8:; // цифры и <Backspase>

#13: Edit2.SetFocus; // клавиша <Enter>

else Key:= Chr(0);

end;

end;

procedure TForm1.Edit2KeyPress(Sender: TObject; var Key: Char);

begin

case Key of

'0'..'9',#8:; // цифры и <Backspase>

#13: Edit2.SetFocus; // клавиша <Enter>

else Key:= Chr(0);

end;

end;

procedure TForm1.Button4Click(Sender: TObject);

var i,j:integer;

begin

CheckBox1.Enabled:=false;

Button1.Enabled:=false; N11.Enabled:=false;

Button5.Enabled:=true;N7.Enabled:=true;N18.Enabled:=true;

N6.Enabled:=false;

n:=strtoint(Edit1.Text);

m:=strtoint(Edit2.Text);

StringGrid1.ColCount:=m+2;

StringGrid1.RowCount:=n+2;

StringGrid1.FixedCols:=1;

StringGrid1.FixedRows:=1;

StringGrid1.FixedColor:=clmenu;

StringGrid2.ColCount:=m+1;

StringGrid2.RowCount:=n+1;

StringGrid2.FixedCols:=1;

StringGrid2.FixedRows:=1;

StringGrid2.FixedColor:=clmenu;

for i:=1 to m do begin

s:=inttostr(i);

StringGrid1.Cells[i,0]:='Пункт назначения'+s;

end;

for j:=1 to n do begin

s:=inttostr(j);

StringGrid1.Cells[0,j]:='Пункт отправления'+s;

end;

StringGrid1.Cells[m+1,0]:='Запасы';

StringGrid1.Cells[0,n+1]:='Потребности';

end;

procedure TForm1.FormCreate(Sender: TObject);

begin

Button1.Enabled:= false;N11.Enabled:=false;

Button4.Enabled:= false;N17.Enabled:=false;

Button5.Enabled:= false;N7.Enabled:=false;N18.Enabled:=false;

BitBtn1.Enabled:= false;N8.Enabled:=false; N13.Enabled:=false;

CheckBox1.Enabled:= false;

Edit3.Enabled:= false;

Label3.Enabled:= false;

StringGrid1.Enabled:= false;

StringGrid2.Enabled:= false;

end;

procedure TForm1.Edit1Change(Sender: TObject);

begin

if (length(Edit1.Text)<>0) and (length(edit2.Text)<>0) then begin

ac1:=true;Button1.Enabled:= true;CheckBox1.Enabled:= true;

StringGrid1.Enabled:=true;StringGrid2.Enabled:=true;

N5.Enabled:=true;N4.Enabled:=true; N11.Enabled:=true;

end else begin

ac1:=false;Button1.Enabled:= false;CheckBox1.Enabled:= false;

StringGrid1.Enabled:=false;StringGrid2.Enabled:=false;

N5.Enabled:=false;N4.Enabled:=false; N11.Enabled:=false;

end;

end;

procedure TForm1.Edit2Change(Sender: TObject);

begin

if (length(Edit1.Text)<>0) and (length(edit2.Text)<>0) then begin

ac1:=true;Button1.Enabled:= true;CheckBox1.Enabled:= true;

StringGrid1.Enabled:=true;StringGrid2.Enabled:=true;

N5.Enabled:=true;N4.Enabled:=true;N11.Enabled:=true;end

else begin

ac1:=false;Button1.Enabled:= false;CheckBox1.Enabled:= false;

StringGrid1.Enabled:=false;StringGrid2.Enabled:=false;

N5.Enabled:=false;N4.Enabled:=false; N11.Enabled:=false;

end;

end;

procedure TForm1.CheckBox1Click(Sender: TObject);

begin

StringGrid1.Options:=[goEditing];

activ:=activ+1;

Edit1.Enabled:=false;

Edit2.Enabled:=false;

Label1.Enabled:=false;

Label2.Enabled:=false;

N6.Enabled:=true;

if CheckBox1.Checked=true then begin

if ac1=true then begin

Button4.Enabled:=true;N6.Enabled:=true;N17.Enabled:=true;

Button1.Enabled:=false;N4.Enabled:=false;N11.Enabled:=false;

end;

end else begin

Button4.Enabled:=false;N6.Enabled:=false;N17.Enabled:=false;

Button1.Enabled:=true;N4.Enabled:=true;N11.Enabled:=true;

end;

end;

procedure TForm1.Button5Click(Sender: TObject);

var i,j,Jenya:integer;

begin

Jenya:=0;

for i:=1 to n+1 do

for j:=1 to m+1 do

if StringGrid1.Cells[j,i]<>'' then Jenya:=Jenya+1;

if Jenya=(((n+1)*(m+1))-1) then begin

BitBtn1.Enabled:=true; N8.Enabled:=true; N13.Enabled:=true;

Label3.Enabled:=true;

Edit3.Enabled:=true;

Button4.Enabled:=false; N8.Enabled:=true;N17.Enabled:=false;

N6.Enabled:=false;

N5.Enabled:=false;

n:=strtoint(Edit1.Text);

m:=strtoint(Edit2.Text);

s1:=0;s2:=0;

for i:=1 to n do begin

s1:=s1+strtoint(StringGrid1.Cells[m+1,i]);

end;

for j:=1 to m do begin

s2:=s2+strtoint(StringGrid1.Cells[j,n+1]);

end;

if s1<>s2 then begin

{showmessage('Для решения данной задачи необходимо, чтобы суммы запасов и потребностей совпадали');

exit;}form5.Show;

end else begin

for i:=1 to n do

for j:=1 to m do

ishod[i,j]:=strtoint(StringGrid1.Cells[j,i]);

for j:=1 to m do begin

potr[j]:=strtoint(StringGrid1.Cells[j,n+1]);

end;

for i:=1 to n do begin

zap[i]:=strtoint(StringGrid1.Cells[m+1,i]);

end;

Button5.Enabled:=false;N7.Enabled:=false;N18.Enabled:=false;

showmessage('Все введенные Вами данные приняты программой');

exit;

end;

end else begin

ShowMessage('Введите записи во все поля таблицы!!!');

exit;

end;

end;

procedure TForm1.BitBtn1Click(Sender: TObject);

var spez:array[1..100,1..100]of integer;

i,j,dx,min,max,sh,str,stl,k,l,i1,stoim,dlas1:integer;

vyh:boolean; mar:string;

begin

StringGrid2.Cells[0,0]:='Еденица продукции';

for i:=1 to n do

for j:=1 to m do

StringGrid2.Cells[j,i]:=inttostr(0);

for i:=1 to n do

for j:=1 to m do

spez[i,j]:=ishod[i,j];

vyh:=false;

while vyh<>true do

begin

dx:=0; sh:=0;max:=0; min:=0;

for i:=1 to n do

for j:=1 to m do

if spez[i,j]=(-1) then dx:=dx+1;

if dx=m*n then vyh:=true;

if dx<(m*n) then

begin

for i:=1 to n do

for j:=1 to m do

if spez[i,j]<>(-1) then min:=spez[i,j];

for i:=1 to n do

for j:=1 to m do

if (spez[i,j]<>(-1))and(spez[i,j]<min) then min:=spez[i,j];

for i:=1 to n do

for j:=1 to m do

if spez[i,j]=min then sh:=sh+1;

if sh=1 then

begin

for i:=1 to n do

for j:=1 to m do

if spez[i,j]=min then

begin

str:=i;

stl:=j;

end;

end;

if sh>1 then

begin

for i:=1 to n do

for j:=1 to m do

if spez[i,j]=min then

begin

for k:=1 to n do

if (k<>i)and(spez[k,j]>max) then

begin

max:=spez[k,j];

str:=i;

stl:=j;

end;

 

for l:=1 to m do

if (l<>j)and(spez[i,l]>max) then

begin

max:=spez[i,l];

str:=i;

stl:=j;

end;

end;

end;

if zap[str]<potr[stl] then

begin

StringGrid2.Cells[stl,str]:=inttostr(zap[str]);

potr[stl]:=potr[stl]-zap[str];

zap[str]:=0;

for i1:=1 to m do

spez[str,i1]:=-1;

end;

if potr[stl]<zap[str] then

begin

StringGrid2.Cells[stl,str]:=inttostr(potr[stl]);

zap[str]:=zap[str]-potr[stl];

potr[stl]:=0;

for i1:=1 to n do

spez[i1,stl]:=-1;

end;

if zap[str]=potr[stl] then

begin

StringGrid2.Cells[stl,str]:=inttostr(zap[str]);

potr[stl]:=0;

zap[str]:=0;

for i1:=1 to n do

spez[i1,stl]:=-1;

for i1:=1 to m do

spez[str,i1]:=-1;

end;

end;

end;

stoim:=0;

for i:=1 to n do

for j:=1 to m do

begin

stoim:=stoim+(strtoint(StringGrid2.Cells[j,i])*ishod[i,j]);

end;

inttostr(stoim);

Edit3.Text:=inttostr(stoim);

Button1.Enabled:=false;N4.Enabled:=false; N11.Enabled:=false;

BitBtn1.Enabled:=false;N8.Enabled:=false; N13.Enabled:=false;

BitBtn2.Enabled:=true;N9.Enabled:=true; N14.Enabled:=true;

end;

procedure TForm1.BitBtn2Click(Sender: TObject);

var i,j:integer;

begin

CheckBox1.Checked:=false;

BitBtn2.Enabled:=false;N9.Enabled:=false;N14.Enabled:=false;

for i:=1 to n do

for j:=1 to m do

Stringgrid2.Cells[j,i]:='';

for i:=1 to n+1 do

for j:=1 to m+1 do

Stringgrid1.Cells[j,i]:='';

Label1.Enabled:=true;

Label2.Enabled:=true;

Edit1.Enabled:=true;

Edit2.Enabled:=true;

Edit1.Text:='';

Edit2.Text:='';

m:=0;

n:=0;

activ:=0;

StringGrid1.ColCount:=1;

StringGrid1.RowCount:=1;

StringGrid2.ColCount:=1;

StringGrid2.RowCount:=1;

StringGrid2.Cells[0,0]:='';

Label3.Enabled:=false;

Edit3.Text:='';

Edit3.Enabled:=false;

end;

end.

 

unit Unit2;

interface

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

Dialogs, StdCtrls, Buttons, Mask,Registry, ExtCtrls;

type

TForm2 = class(TForm)

MaskEdit1: TMaskEdit;

BitBtn1: TBitBtn;

BitBtn2: TBitBtn;

BitBtn3: TBitBtn;

StaticText1: TStaticText;

Bevel1: TBevel;

procedure BitBtn3Click(Sender: TObject);

procedure FormActivate(Sender: TObject);

procedure BitBtn1Click(Sender: TObject);

procedure BitBtn2Click(Sender: TObject);

private

{ Private declarations }

public

pass,newpass:STRING;

VHODIM:boolean;

{ Public declarations }

end;

var

Form2: TForm2;

implementation

uses Unit3, Unit1_1, Unit4;

{$R *.dfm}

procedure TForm2.BitBtn3Click(Sender: TObject);

begin

Form2.Enabled:=False;

form3.Show;

end;

procedure TForm2.FormActivate(Sender: TObject);

begin

MaskEdit1.Text:= '';

MaskEdit1.SetFocus;

with TRegistry.Create do

begin

RootKey:= HKEY_LOCAL_MACHINE;

OpenKey('Software', True);

if not KeyExists('MyProject') then CreateKey('MyProject');

OpenKey('MyProject', True);

if not ValueExists('Password') then begin

newpass:= '';

WriteString('Password', newpass);

end

else

pass:= ReadString('Password');

end;

end;

procedure TForm2.BitBtn1Click(Sender: TObject);

begin

if MaskEdit1.Text = pass then begin

{-???????????????????,?????????????????,????????????????????????? -}

Form4.Show;

Form2.Hide;

VHODIM:=true;

end

else MaskEdit1.SetFocus;

end;

procedure TForm2.BitBtn2Click(Sender: TObject);

begin

Close;

end;

end.

 

 

unit Unit3;

interface

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

Dialogs, StdCtrls, Mask,Registry, ExtCtrls;

type

TForm3 = class(TForm)

MaskEdit1: TMaskEdit;

MaskEdit2: TMaskEdit;

MaskEdit3: TMaskEdit;

Label1: TLabel;

Label2: TLabel;

Label3: TLabel;

Bevel1: TBevel;

procedure FormActivate(Sender: TObject);

procedure MaskEdit1KeyPress(Sender: TObject; var Key: Char);

procedure MaskEdit2KeyPress(Sender: TObject; var Key: Char);

procedure MaskEdit3KeyPress(Sender: TObject; var Key: Char);

procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);

private

{ Private declarations }

public

{ Public declarations }

end;

var

Form3: TForm3;

v:boolean;

implementation

uses Unit2;

{$R *.dfm}

procedure TForm3.FormActivate(Sender: TObject);

begin

v:=False;

MaskEdit1.Text:= '';

MaskEdit2.Text:= '';

MaskEdit3.Text:= '';

MaskEdit1.Enabled:= true;

MaskEdit1.SetFocus;

MaskEdit2.Enabled:= false;

MaskEdit3.Enabled:= false

end;

procedure TForm3.MaskEdit1KeyPress(Sender: TObject; var Key: Char);

begin

if (key = #13) and (MaskEdit1.Text = Form2.pass) then

begin

MaskEdit2.Enabled:= true;

MaskEdit1.Enabled:= false;

MaskEdit2.SetFocus;

end;

end;

procedure TForm3.MaskEdit2KeyPress(Sender: TObject; var Key: Char);

begin

if key = #13 then begin

MaskEdit3.Enabled:= true;

MaskEdit3.SetFocus;

MaskEdit2.Enabled:= false;

end;

end;

procedure TForm3.MaskEdit3KeyPress(Sender: TObject; var Key: Char);

begin

if (key = #13) and (MaskEdit2.Text = MaskEdit3.Text) then begin

with TRegistry.Create do

begin

RootKey:= HKEY_LOCAL_MACHINE;

OpenKey('Software', True);

if not KeyExists('MyProject') then CreateKey('MyProject');

OpenKey('MyProject', True);

WriteString('Password', MaskEdit3.Text);

end;

v:=True;

Form3.Hide;

Form2.Enabled:=True;

end;

end;

procedure TForm3.FormCloseQuery(Sender: TObject; var CanClose: Boolean);

begin

Canclose:=v;

end;

end.

 

 

unit Unit4;

interface

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

Dialogs, ExtCtrls, StdCtrls;

type

TForm4 = class(TForm)

Image1: TImage;

Label1: TLabel;

Label2: TLabel;

Timer1: TTimer;

procedure FormCreate(Sender: TObject);

procedure Timer1Timer(Sender: TObject);

procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);

procedure Button1Click(Sender: TObject);

private

{ Private declarations }

public

sss:Boolean;

{ Public declarations }

end;

var

Form4: TForm4;

implementation

uses Unit1_1, Unit2;

{$R *.dfm}

var

Back, Picture: TBitMap; // фон и картинка

BackRct: TRect; // положение и размер области фона,

// которая должна быть восстановлена

 

x,y:integer; // текущее положение картинки

W,H: integer; // размеры картинки

procedure TForm4.FormCreate(Sender: TObject);

begin

{ Свойству AutoSize обязательно надо

присвоить значение False. Это можно

сделать во время создания формы.

}

sss:=False;

Image1.AutoSize:= False;

// создать два объекта - битовых образа

Back:= TBitmap.Create; // фон

Picture:= TBitmap.Create; // картинка

 

// загрузить и вывести фон

Back.LoadFromFile('11.bmp');

Image1.Width:= Back.Width;

Image1.Height:= Back.Height;

Image1.Canvas.Draw(0,0,Back);

// загрузить картинку, которая будет двигаться

Picture.LoadFromFile('22.bmp');

W:= Picture.Width;

H:= Picture.Height;

// определим "прозрачный" цвет

Picture.Transparent:= True;

// прозрачный цвет картинки определяет

// левый верхний пиксел картинки

Picture.TransParentColor:= Picture.Canvas.Pixels[1,1];

// начальное положение картинки

x:= -W;

y:= 320;

// определим сохраняемую область фона

BackRct:=Bounds(x,y,W,H);

end;

procedure TForm4.Timer1Timer(Sender: TObject);

begin

if Form2.VHODIM=true then begin

// восстановлением фона удалим рисунок

Image1.Canvas.CopyRect(BackRct,Back.Canvas,BackRct);

x:=x+100;

if (x > Image1.Width)and(Form2.VHODIM=true)and (sss=false) then begin

Form1.Show;Form4.Hide;sss:=true;

end;

if x > Image1.Width then

x:=-W;

// определим сохраняемую область фона

BackRct:=Bounds(x,y,W,H);

// выведем рисунок

Image1.Canvas.Draw(x,y,Picture);

end;

end;

procedure TForm4.FormCloseQuery(Sender: TObject; var CanClose: Boolean);

begin

// освободим память, выделенную

// для хранения битовых образов

Back.Free;

Picture.Free;

end;

procedure TForm4.Button1Click(Sender: TObject);

begin

Form1.Show;

form4.Hide;

end;

end.

 

 

unit Unit5;

interface

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

Dialogs, StdCtrls, Buttons;

type

TForm5 = class(TForm)

BitBtn1: TBitBtn;

BitBtn2: TBitBtn;

Label1: TLabel;

procedure BitBtn1Click(Sender: TObject);

procedure BitBtn2Click(Sender: TObject);

private

{ Private declarations }

public

sogl:boolean;

{ Public declarations }

end;

var

Form5: TForm5;

implementation

uses Unit1_1;

{$R *.dfm}

procedure TForm5.BitBtn1Click(Sender: TObject);

var i,j:integer;

begin

sogl:=true;

Form1.Button5.Enabled:=False;

Form1.N7.Enabled:=False;

Form1.N18.Enabled:=False;

if Form1.s1<Form1.s2 then begin

Form1.n:=Form1.n+1;

Form1.StringGrid1.ColCount:=Form1.m+2;

Form1.StringGrid1.RowCount:=Form1.n+2;

Form1.StringGrid1.FixedCols:=1;

Form1.StringGrid1.FixedRows:=1;

Form1.StringGrid1.FixedColor:=clmenu;

Form1.StringGrid2.ColCount:=Form1.m+1;

Form1.StringGrid2.RowCount:=Form1.n+1;

Form1.StringGrid2.FixedCols:=1;

Form1.StringGrid2.FixedRows:=1;

Form1.StringGrid2.FixedColor:=clmenu;

for i:=1 to Form1.m do begin

Form1.s:=inttostr(i);

Form1.StringGrid1.Cells[i,0]:='Пункт назначения'+Form1.s;

end;

for j:=1 to Form1.n do begin

Form1.s:=inttostr(j);

Form1.StringGrid1.Cells[0,j]:='Пункт отправления'+Form1.s;

end;

Form1.StringGrid1.Cells[Form1.m+1,0]:='Запасы';

Form1.StringGrid1.Cells[0,Form1.n+1]:='Потребности';

for j:=1 to Form1.m do begin

Form1.StringGrid1.Cells[j,Form1.n+1]:=Form1.StringGrid1.Cells[j,Form1.n];

Form1.StringGrid1.Cells[j,Form1.n]:='0';

end;

Form1.StringGrid1.Cells[Form1.m+1,Form1.n]:=inttostr(Form1.s2-Form1.s1);

Form5.Close;

end;

if Form1.s1>Form1.s2 then begin

Form1.m:=Form1.m+1;

Form1.StringGrid1.ColCount:=Form1.m+2;

Form1.StringGrid1.RowCount:=Form1.n+2;

Form1.StringGrid1.FixedCols:=1;

Form1.StringGrid1.FixedRows:=1;

Form1.StringGrid1.FixedColor:=clmenu;

Form1.StringGrid2.ColCount:=Form1.m+1;

Form1.StringGrid2.RowCount:=Form1.n+1;

Form1.StringGrid2.FixedCols:=1;

Form1.StringGrid2.FixedRows:=1;

Form1.StringGrid2.FixedColor:=clmenu;

for i:=1 to Form1.m do begin

Form1.s:=inttostr(i);

Form1.StringGrid1.Cells[i,0]:='Пункт назначения'+Form1.s;

end;

for j:=1 to Form1.n do begin

Form1.s:=inttostr(j);

Form1.StringGrid1.Cells[0,j]:='Пункт отправления'+Form1.s;

end;

Form1.StringGrid1.Cells[Form1.m+1,0]:='Запасы';

Form1.StringGrid1.Cells[0,Form1.n+1]:='Потребности';

for j:=1 to Form1.n do begin

Form1.StringGrid1.Cells[Form1.m+1,j]:=Form1.StringGrid1.Cells[Form1.m,j];

Form1.StringGrid1.Cells[Form1.m,j]:='0';

end;

Form1.StringGrid1.Cells[Form1.m,Form1.n+1]:=inttostr(Form1.s1-Form1.s2);

Form5.Close;

end;

for i:=1 to Form1.n do

for j:=1 to Form1.m do

Form1.ishod[i,j]:=strtoint(Form1.StringGrid1.Cells[j,i]);

for j:=1 to Form1.m do begin

Form1.potr[j]:=strtoint(Form1.StringGrid1.Cells[j,Form1.n+1]);

end;

for i:=1 to Form1.n do begin

Form1.zap[i]:=strtoint(Form1.StringGrid1.Cells[Form1.m+1,i]);

end;

end;

procedure TForm5.BitBtn2Click(Sender: TObject);

begin

close;

end;

end.

 

Содержание

 

Введение. 4

1 Аналитическая часть. 5

1.1 Описание и постановка задачи. 5

1.2 Описание и анализ математической модели. 7

1.3 Обоснование выбора инструментальных средств. 8

2 Технологическая часть. 9

2.1 Назначение и цель создания. 9

2.2 Требования к системе. 9

2.2.1 Требования к функциям системы.. 9

2.2.2 Требования к интерфейсу пользователя. 9

2.2.3 Требования к защите информации. 10

2.3 Перечень и описание входных данных. 10

2.4 Руководство к использованию.. 11

2.5 Результаты экспериментальной проверки. 12

3 Охрана труда и техники безопасности.. 13

Заключение. 16

Список используемой литературы. 17

Приложение А.. 18

Приложение Б. 22

 


Введение

 

Транспортная задача – это задача о наиболее экономичном плане перевозок груза. Транспортная задача является одной из самых распространенных специальных задач линейного программирования. Частные постановки задачи рассмотрены рядом специалистов по транспорту, например, А.Н. Толстым.

Первая строгая постановка транспортной задачи принадлежит Хичкоку, и поэтому в зарубежной литературе иногда ее называют проблемой Хичкока.

Первый точный метод решения транспортной задачи разработан советскими учеными Л.В. Канторовичем и М.К. Гавуриным.


Аналитическая часть

 

Описание и постановка задачи

 

Пусть в пунктах А1, А2, …, Аm производят некоторый однородный продукт, причем объем производства в пункте Аi составляет ai единиц (i = 1, 2, …, m). Допустим, что данный продукт потребляют в пунктах В1, …, Вn, а объем потребления в пункте Вj составляет bj единиц (j = 1, 2, …, n).

Предположим, что из каждого пункта производства возможна транспортировка продукта в любой пункт потребления. Транспортные издержки по перевозке из пункта Аi в пункт Вj единицы продукции равны cij (i = 1, 2, …, m; j = 1, 2, …, n).

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

Условия транспортной задачи удобно представить в следующем виде:

Пусть xij – количество продукта, перевозимого из пункта Аi в пункт Вj. Требуется определить множество переменных xij>0 (i = 1, 2, …, m; j = 1, 2, …, n), удовлетворяющих условиям

(i = 1, 2, …, m), (1.1)

(j = 1, 2, …, n), (1.2)

и таких, что целевая функция

(1.3)

достигает минимума.


Таблица 1.1 – Табличная форма записи условий транспортной задачи

Пункты производства
Пункты потребления

B1 B2 B3 Bn
Вj
ai

A1 c11 c12 c13 c1n a1
A2 c21 c22 c23 c2n a2
Am cm1 cm2 cm3 cmn am
bj
Аi

b1 b2 b3 bn
Объем производства
Объем потребления

 

Условие (1.1) гарантирует полный вывоз продукта из всех пунктов производства, а условие (1.2) означает полное удовлетворение спроса во всех пунктах потребления.

Различают транспортные задачи с закрытой и открытой формой. Закрытая модель характеризуется равенством сумм запасов и потребностей.

В открытой форме эти суммы не равны.

Необходимым и достаточным условием разрешимости транспортной задачи является равенство:

Если , то вводят фиктивный (n+1) пункт назначения с потребностью и полагают .

Если , то вводят фиктивный (m+1) пункт назначения с запасами и полагают .

 

 



Поделиться:


Последнее изменение этой страницы: 2016-12-27; просмотров: 98; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 13.59.34.87 (0.635 с.)