Курсовая работа: Решение задач линейного программирования транспортной задачей
Таблица 15
Оценивание ячеек на 4 шаге
1-A |
|
1-B |
|
1-E |
|
2-C |
+7 |
-6 |
+12 |
-8 |
+5 |
-6 |
+6 |
-5 |
+5 |
-1 |
+5 |
-6 |
+5 |
-3 |
+6 |
-4 |
5 |
3 |
1 |
3 |
3-C |
|
3-A |
|
3-B |
|
3-D |
+8 |
-4 |
+6 |
-1 |
+13 |
-8 |
+7 |
-5 |
+6 |
-5 |
+3 |
-4 |
+3 |
-4 |
+3 |
-4 |
+3 |
-4 |
+4 |
+4 |
+1 |
+4 |
4.2 Решение задачи с помощью Microsoft Excel
Программным продуктом, незаменимым в
офисной работе, является электронная таблица Microsoft Excel. При помощи этого
продукта можно анализировать большие массивы данных. В Excel можно использовать
более 400 математических, статистических, финансовых и других специализированных
функций, связывать различные таблицы между собой, выбирать произвольные форматы
представления данных, создавать иерархические структуры. Воистину безграничны
методы графического представления данных: помимо нескольких десятков встроенных
типов диаграмм, можно создавать свои, настраиваемые типы, помогающие наглядно
отразить тематику диаграммы. Те, кто только осваивает работу с Excel, по
достоинству оценят помощь "мастеров" - вспомогательных программ,
помогающих при создании диаграмм.

Рисунок 1. Создание общей таблицы

Рисунок 2. Поиск решения

Рисунок 3. Добавление ограничений

Рисунок 4. Вывод целевой функции
4.3 Листинг программы
program PTransport;
uses
Forms,
UTransport in 'UTransport.pas' {Form1};
{$R *.RES}
begin
Application.Initialize;
Application.CreateForm(TForm1,
Form1);
Application.Run;
end.
object Form1: TForm1
Left = 192
Top = 107
Width = 522
Height = 332
Caption = 'Транспортная задача 1.0 Beta'
Color = clBtnFace
Font.Charset =
DEFAULT_CHARSET
Font.Color = clWindowText
Font.Height = -11
Font.Name = 'MS Sans
Serif'
Font.Style = []
OldCreateOrder = False
PixelsPerInch = 96
TextHeight = 13
object Label1: TLabel
Left = 8
Top = 8
Width = 36
Height = 13
Caption = 'Строки'
end
object Label2: TLabel
Left = 72
Top = 8
Width = 44
Height = 13
Caption = 'Столбцы'
end
object SpinEdit1:
TSpinEdit
Left = 8
Top = 24
Width = 49
Height = 22
MaxValue = 10
MinValue = 2
TabOrder = 0
Value = 2
end
object SpinEdit2:
TSpinEdit
Left = 72
Top = 24
Width = 49
Height = 22
MaxValue = 10
MinValue = 2
TabOrder = 1
Value = 2
end
object Button1: TButton
Left = 48
Top = 56
Width = 75
Height = 25
Caption = 'Создать'
TabOrder = 2
OnClick = Button1Click
end
object Button2: TButton
Left = 144
Top = 16
Width = 50
Height = 25
Caption = 'Ввод'
TabOrder = 3
Visible = False
OnClick = Button2Click
end
object Memo1: TMemo
Left = 144
Top = 56
Width = 185
Height = 177
ReadOnly = True
TabOrder = 4
Visible = False
end
end
unit UTransport;
interface
uses
Windows, Messages,
SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, Spin, Mask;
type
TForm1 = class(TForm)
SpinEdit1: TSpinEdit;
SpinEdit2: TSpinEdit;
Label1: TLabel;
Label2: TLabel;
Button1: TButton;
Button2: TButton;
Memo1: TMemo;
procedure
Button1Click(Sender: TObject);
procedure
Button2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
c, x : Array [1..10,
1..10] of Integer;
a, b : Array [1..10] of
Integer;
F : Integer;
implementation
{$R *.DFM}
procedure
TForm1.Button1Click(Sender: TObject);
var
i, i1, j1, j : Byte;
s : TControl;
begin
Label1.Hide;
Label2.Hide;
SpinEdit1.Hide;
SpinEdit2.Hide;
Button1.Hide;
Button2.Show;
i:=SpinEdit2.Value;
j:=SpinEdit1.Value;
for i1:=1 to i do
for j1:=1 to j do
begin
s:=TMaskEdit.Create(Form1);
s.Width:=25;
s.Left:=i1*25;
s.Top:=j1*21;
s.Name:='Matrix'+IntToStr(j1)+IntToStr(i1);
(TControl(s) as
TMaskEdit).Text:='';
(TControl(s) as
TMaskEdit).EditMask:='999;0; ';
Form1.InsertControl(s);
end;
for i1:=1 to j do
begin
s:=TMaskEdit.Create(Form1);
s.Width:=25;
s.Left:=i*25+35;
s.Top:=i1*21;
s.Name:='Matrix'+'0'+IntToStr(i1);
(TControl(s) as
TMaskEdit).Text:='';
(TControl(s) as
TMaskEdit).EditMask:='999;0; ';
Form1.InsertControl(s);
end;
for j1:=1 to i do
begin
s:=TMaskEdit.Create(Form1);
s.Width:=25;
s.Left:=j1*25;
s.Top:=j*21+31;
s.Name:='Matrix'+IntToStr(j1)+'0';
(TControl(s) as
TMaskEdit).Text:='';
(TControl(s) as
TMaskEdit).EditMask:='999;0; ';
Form1.InsertControl(s);
end;
Button2.Left:=i*25+25-Button2.Width;
Button2.Top:=j*21+62;
Memo1.Show;
Memo1.Left:=i*25+75;
Memo1.Top:=21;
end;
procedure
TForm1.Button2Click(Sender: TObject);
var
s : String;
i, j : Byte;
ss : TControl;
begin
for i:=0 to
Form1.ComponentCount-1 do
if (Form1.Components[i] is
TMaskEdit) then
begin
s:=Form1.Components[i].Name;
if (s[7]<>'0') and
(s[8]<>'0') then
begin
ss:=(Form1.Components[i]
as TControl);
c[StrToInt(s[8]),StrToInt(s[7])]:=StrToInt((ss
as TMaskEdit).Text);
end
else
if (s[7]='0') then
begin
ss:=(Form1.Components[i]
as TControl);
a[StrToInt(s[8])]:=StrToInt((ss
as TMaskEdit).Text);
end
else
if (s[8]='0') then
begin
ss:=(Form1.Components[i]
as TControl);
b[StrToInt(s[7])]:=StrToInt((ss
as TMaskEdit).Text);
end
end;
s:='';
Memo1.Lines.Add('Начальные данные');
for j:=1 to
SpinEdit1.Value do
begin
for i:=1 to
SpinEdit2.Value do
s:=s+IntToStr(c[i, j])+'
';
s:=s+IntToStr(a[j]);
Memo1.Lines.Add(s);
s:='';
end;
for i:=1 to
SpinEdit2.Value do
s:=s+IntToStr(b[i])+' ';
Memo1.Lines.Add(s);
for i:=1 to
SpinEdit1.Value do
for j:=1 to
SpinEdit2.Value do
x[i,j]:=-1;
i:=1;
j:=1;
Repeat
if a[i]>b[j] then
begin
x[j,i]:=b[j];
a[i]:=a[i]-b[j];
b[j]:=0;
Inc(j);
end
else
begin
x[j,i]:=a[i];
b[j]:=b[j]-a[i];
a[i]:=0;
Inc(i);
end;
Until
(i>SpinEdit1.Value) and (j>=SpinEdit2.Value);
Memo1.Lines.Add('');
s:='';
for j:=1 to
SpinEdit1.Value do
begin
for i:=1 to
SpinEdit2.Value do
if x[i,j]>=0 then
s:=s+IntToStr(x[i, j])+' '
else
s:=s+'0 ';
Memo1.Lines.Add(s);
s:='';
end;
for i:=1 to SpinEdit2.Value
do
Страницы: 1, 2, 3, 4, 5, 6 |