Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь FAQ Написать работу КАТЕГОРИИ: АрхеологияБиология Генетика География Информатика История Логика Маркетинг Математика Менеджмент Механика Педагогика Религия Социология Технологии Физика Философия Финансы Химия Экология ТОП 10 на сайте Приготовление дезинфицирующих растворов различной концентрацииТехника нижней прямой подачи мяча. Франко-прусская война (причины и последствия) Организация работы процедурного кабинета Смысловое и механическое запоминание, их место и роль в усвоении знаний Коммуникативные барьеры и пути их преодоления Обработка изделий медицинского назначения многократного применения Образцы текста публицистического стиля Четыре типа изменения баланса Задачи с ответами для Всероссийской олимпиады по праву Мы поможем в написании ваших работ! ЗНАЕТЕ ЛИ ВЫ?
Влияние общества на человека
Приготовление дезинфицирующих растворов различной концентрации Практические работы по географии для 6 класса Организация работы процедурного кабинета Изменения в неживой природе осенью Уборка процедурного кабинета Сольфеджио. Все правила по сольфеджио Балочные системы. Определение реакций опор и моментов защемления |
Описание и постановка задачи↑ Стр 1 из 3Следующая ⇒ Содержание книги
Поиск на нашем сайте
Содержание
Введение. 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 – Табличная форма записи условий транспортной задачи
Условие (1.1) гарантирует полный вывоз продукта из всех пунктов производства, а условие (1.2) означает полное удовлетворение спроса во всех пунктах потребления. Различают транспортные задачи с закрытой и открытой формой. Закрытая модель характеризуется равенством сумм запасов и потребностей. В открытой форме эти суммы не равны. Необходимым и достаточным условием разрешимости транспортной задачи является равенство: Если , то вводят фиктивный (n+1) пункт назначения с потребностью и полагают . Если , то вводят фиктивный (m+1) пункт назначения с запасами и полагают .
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Последнее изменение этой страницы: 2016-12-27; просмотров: 133; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 18.220.134.161 (0.012 с.) |