Решение транспортной задачи методом Фогеля

Автор работы: Пользователь скрыл имя, 17 Марта 2010 в 20:23, Не определен

Описание работы

ВВЕДЕНИЕ
1.АНАЛИТИЧЕСКАЯ ЧАСТЬ
1.1.Описание и постановка задачи
1.2. Описание и анализ математической модели
1.3.Обоснование выбора инструментальных средств
2. ТЕХНОЛОГИЧЕСКАЯ ЧАСТЬ
2.1. Назначение и цель создания
2.2. Требования к системе
2.2.1 Требования к функциям системы
2.2.2.Требования к интерфейсу пользователя
2.2.3.Требования к защите информации
2.3.Перечень и описание входных данных
2.4.Руководство к использованию и эксплуатации
2.5.Результаты экспериментальной проверки
3.Охрана труда и техника безопасности
ЗАКЛЮЧЕНИЕ
СПИСОК ИСПОЛЬЗУЕМой литературы
ПРИЛОЖЕНИЯ

Файлы: 1 файл

пОЯСНИТ ЗАПИСКА по МОДЕЛИРОВАНИю.doc

— 1.13 Мб (Скачать файл)
  1. Для обеспечения оптимальной работоспособности и сохранения здоровья профессиональных пользователей на протяжении рабочей смены должны устанавливаться регламентированные перерывы. Продолжительность непрерывной работы с персональным компьютером без регламентированного перерыва не должна превышать 2 часов.
  1. При работе с персональным компьютером в ночную смену (c 22 до 6 час.), независимо от категории и вида трудовой деятельности, продолжительность регламентированных перерывов должна увеличиваться на 60 мин.
  2. Невыполнение требований настоящей инструкции является нарушением производственной дисциплины. Виновные в этом несут ответственность в порядке, установленном действующим законодательством.

Заключение

 

       В процессе выполнения курсового проекта  была написана программа для решения  транспортной задачи методом Фогеля, с использованием ЭВМ. Был глубоко изучен язык программирования DELPHI, многие его компоненты  и закреплены навыки объектно-ориентированного программирования. Так же была изучена тема «Решение транспортной задачи методом Фогеля». 

       Курсовой  проект состоит из двух частей – пояснительной записки, в корой рассмотрены все теоретические сведения, и программы, позволяющей автоматизировать процесс построения опорного плана методом Фогеля. 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Список  литературы

1. Исследование операций под редакцией Кремера

2. А.И.   Ларионов,  А.В. Юрченко – Экономико-математические   методы   в планировании

3. Н.Ш.    Кремер - Математическое    моделирование    и    модели    в планировании

  1. С. Вентцель - Исследование операций
  2. А. Калихман  - Сборник задач по математическому программированию
  3. Н.А.Осадчая – Моделирование производственных и экономических процессов, курс лекций, колледж ВКГТУ, Усть-Каменогорск, 2007 / с.
  4. Гофман В.Э., Мещеряков Е., Никифоров В.В., Хомоненко А.Д. Delphi 7 в подлиннике;
  5. Баженова И.Ю. Delphi 7: Самоучитель программиста;
  6. Белов В.В., Чистякова В.И. Программирование в Delphi: процедурное, объектно-ориентированное;
  7. А.Н. Вальвачев, К.А. Сурков, Д.А. Сурков, Ю.М. Четырько. Программирование на языке Delphi. Учебное пособие. — 2005.;
  8. Фленов Михаил - Библия Delphi 2007

 

Приложения А

    Текст программы

 
 

unit Unit3;

interface

uses

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

  Dialogs, StdCtrls, jpeg, ExtCtrls;

type

  TForm3 = class(TForm)

    Button1: TButton;

    Button2: TButton;

    Button3: TButton;

   Image1: TImage;

    procedure Button1Click(Sender: TObject);

    procedure Button2Click(Sender: TObject);

    procedure Button3Click(Sender: TObject);

  private

    { Private declarations }

  public

    { Public declarations }

  end;

var

  Form3: TForm3;

implementation

uses Unit1, Unit5;

{$R *.dfm}

procedure TForm3.Button1Click(Sender: TObject);

begin

form3.Hide;

form1.show;

end;

procedure TForm3.Button2Click(Sender: TObject);

begin

Close;end;

procedure TForm3.Button3Click(Sender: TObject);

begin

Application.HelpContext(0);

end;end.

unit Unit1;

interface

uses

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

  Dialogs, Grids, StdCtrls, ExtCtrls, Buttons, ShellAPi, ComCtrls, jpeg;

type

  TForm1 = class(TForm)

    Timer1: TTimer;

    Button1: TButton;

    Button2: TButton;

    StringGrid2: TStringGrid;

    StringGrid1: TStringGrid;

    StringGrid3: TStringGrid;

    Button4: TButton;

    Button3: TButton;

    Image1: TImage;

    Label4: TLabel;

    Label6: TLabel;

    Label3: TLabel;

    Label5: TLabel;

    Button5: TButton;

    procedure StringGrid1SetEditText(Sender: TObject; ACol, ARow: Integer;

      const Value: String);

    procedure Button1Click(Sender: TObject);

    procedure draw(pos,vert,hor:integer);

    procedure shag1;

   procedure shag3;

    procedure shag4;

    procedure shag5;

    procedure shag6;

    procedure shag8;

    procedure shag0;

    procedure Button2Click(Sender: TObject);

    procedure Timer1Timer(Sender: TObject);

    procedure Button4Click(Sender: TObject);

    procedure Button3Click(Sender: TObject);

    procedure Button5Click(Sender: TObject);

  private

    { Private declarations }

  public

    { Public declarations }

  end;

var

  Form1: TForm1;

  mass1:array[1..20,1..20] of integer;

  stolb,strok,c1,c2,c3,c4,k,p,smin,o,o1:integer;

  prv,prv2,prv3:boolean;

implementation

uses Unit2, Unit3, Unit4, Unit5;

{$R *.dfm}

//Вывод ошибки  «только цифры»

procedure TForm1.StringGrid1SetEditText(Sender: TObject; ACol,

ARow: Integer; const Value: String);

begin

if value<>'' then

try

mass1[acol,arow]:=strtoint(value);

except on Econverterror do begin showmessage(Только цифры!!!'); stringgrid1.cells[acol,arow]:=' '; end;end;

end;

//   Кнопка посчитать

procedure TForm1.Button1Click(Sender: TObject);

var i,j:integer;

begin

for o:=0 to 0 do begin

if p=1 then begin

for i:=1 to strok do

for j:=1 to stolb do

stringgrid1.Cells[j,i]:=inttostr(mass1[j,i]);

end;

shag0;

k:=0;

prv3:=false;

shag5;

if prv2=true then begin

shag1;

if prv3=false then begin

shag4;

while  prv=false do

case o of

0:shag8;

end;

timer1.Enabled:=true;

shag6;

end;

end else showmessage(‘Запасы не равны потребностям');

p:=1;

end;

end;

             //Загрузка картинок

procedure TForm1.draw(pos,vert,hor:integer);

var

B : TBitmap;

begin

B := TBitmap.Create;

if pos=1 then

B.LoadFromFile ('1.bmp') else B.LoadFromFile ('2.bmp');

form1.stringGrid1.Canvas.CopyRect(form1.stringGrid1.CellRect(vert, hor),

b.Canvas, Rect(0, 0, b.Height, b.Width));

end;

procedure TForm1.shag1;

var i,j:integer;

begin

try

for i:=1 to strok do

for j:=1 to stolb do

mass1[j,i]:=strtoint(stringgrid1.Cells[j,i]);

except on Econverterror do begin showmessage(Запасы не равны потребностям ');

prv3:=true;end;end;

for i:=1 to strok do

for j:=1 to stolb do

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

end;

                // Координаты чисел

procedure TForm1.shag3;

var i,j:integer;

buf:string;

begin

for i:=1 to strok do

for j:=1 to stolb do begin

if StringGrid1.cells[j,i]='-' then draw(2,j,i) else

begin draw(1,j,i);StringGrid1.Canvas.textout(j*51+34,

i*51+5,StringGrid1.Cells[j,i]);end;

StringGrid1.Canvas.textout(j*51+10,

i*51+30,inttostr(mass1[j,i]));end;

end;

//Кнопка очистить таблицу

procedure TForm1.Button2Click(Sender: TObject);

var i,j:integer;

begin

timer1.Enabled:=false;

for i:=1 to strok+1 do

for j:=1 to stolb+1 do

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

button1.Enabled:=true;

timer1.Interval:=1;

end;

procedure TForm1.shag4;

var

ind,i,j:integer;

begin

ind:=0;

for i:=1 to strok do

for j:=1 to stolb do

if stringgrid1.Cells[j,i]='' then inc(ind);

if ind=0 then prv:=true else prv:=false;

end;

// Заполнение запасов и потребностей

procedure TForm1.shag5;

var i,j,zap,potr:integer;

begin

zap:=0;potr:=0;

for i:=1 to strok+1 do

for j:=1 to stolb+1 do begin

if (i=strok+1) and (j<>stolb+1) then zap:=zap+strtoint(stringgrid1.Cells[j,i]);

if (j=stolb+1) and (i<>strok+1) then potr:=potr+strtoint(stringgrid1.Cells[j,i]);end;

if zap=potr then begin prv2:=true;stringgrid1.Cells[stolb+1,strok+1]:=inttostr(zap)+'='+inttostr(potr);end end;

procedure TForm1.Timer1Timer(Sender: TObject);

begin

shag3;

timer1.Interval:=10000;end;

        //Проверяет вырожденный или невырожденный

procedure TForm1.shag6;

var i,j,sc,col:integer;

begin

sc:=0;

col:=0;

for i:=1 to strok do

for j:=1 to stolb do

if stringgrid1.cells[j,i]<>'-' then

begin inc(sc);col:=col+strtoint(stringgrid1.cells[j,i])*mass1[j,i];end;

if sc=(strok+stolb-1) then

label5.Caption:='невырожденный' else label5.Caption:='вырожденный';

label6.Caption:=inttostr(col);

if col<smin then begin smin:=col;o1:=o;end;

end; 

             // Алгоритм Метода Фогеля

procedure TForm1.shag8;

var i,j,min,x,y,zapas,potreb,lol,max1,max2:integer;

begin

{ýòàï 1}

min:=100;

for i:=1 to strok do begin

for j:=1 to stolb do

if (mass1[j,i]<min) and (stringgrid1.cells[j,i]='') then begin min:=mass1[j,i];x:=i;y:=j;end;

stringgrid3.Cells[k,i-1]:=inttostr(min);

min:=100;

end;

min:=100;

for j:=1 to stolb do begin

for i:=1 to strok do

if (mass1[j,i]<min) and (stringgrid1.cells[j,i]='') then begin min:=mass1[j,i];end;

stringgrid2.Cells[j-1,k]:=inttostr(min);

min:=100;

end;

min:=100;

for i:=1 to strok do begin

for j:=1 to stolb do

if (mass1[j,i]<min)and (stringgrid1.cells[j,i]='')then begin if mass1[j,i]<>strtoint(stringgrid3.Cells[k,i-1]) then min:=mass1[j,i];end;

stringgrid3.Cells[k,i-1]:=inttostr(abs(strtoint(stringgrid3.Cells[k,i-1])-min));

min:=100;

Информация о работе Решение транспортной задачи методом Фогеля