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

for j:=1 to SpinEdit1.Value do

if x[i,j]>0 then

F:=F+x[i,j]*c[i,j];

Memo1.Lines.Add('Результат: '+IntToStr(F));

end;

end.


Информация о работе «Решение задач линейного программирования транспортной задачей»
Раздел: Информатика, программирование
Количество знаков с пробелами: 18870
Количество таблиц: 18
Количество изображений: 2

Похожие работы

Скачать
34424
6
3

... задачи линейного программирования, они очень сложны и решаются специальными, обычно многостадийными приемами с использованием эвристических элементов. 3. Решение задач   3.1. Решение задачи линейного программирования   3.1.1.Постановка задачи Сформулируем задачу: Определить значения переменных, обеспечивающие минимизацию целевой функции. Составим целевую функцию и зададим ограничения. ...

Скачать
62893
11
17

... . При этом значения cij соответствуют коэффициентам целевой функции исходной замкнутой транспортной задачи (1) и в последующем не изменяются. Элементы xij соответствуют значениям переменных промежуточных решений транспортной задачи линейного программирования и изменяются на каждой итерации алгоритма. Если в некоторой ячейке xij=0, то такая ячейка называется свободной, если же xij>0, то такая ...

Скачать
15346
5
0

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

Скачать
19145
12
5

... F = 27*100 + 30*30 + 24*70 + 18*190 + 21*60 + 23*120 + 31*80 = 15110 Результат: Затраты на распределение товаров между магазинами найденные методом наименьшей стоимости составят 15110 рублей.   2.6 Применение возможностей электронных таблиц при решении транспортной задачи   Для решения транспортной задачи также можно применять электронные таблицы (Microsoft Office Excel ). Для решения ...

0 комментариев


Наверх