Решение задачи о смесях симплексным методом
Содержание
Введение
. Симплекс-метод
. Линейное
программирование
. Общая характеристика
задачи о смесях
. Аналитическое
решение
. Математическая
постановка задачи
. Разработка основных
алгоритмов решения задачи. Решение задачи в среде визуального программирования
Delphi
. Проектирование
интерфейса пользователя. Построение графа состояний интерфейса
. Разработка форм
ввода-вывода информации
. Контрольный пример
. Заключение
. Исходный код
Список использованной
литературы
Введение
В различных отраслях народного хозяйства возникает проблема составления
таких рабочих смесей на основе исходных материалов, которые обеспечивали бы
получение конечного продукта, обладающего определенными свойствами. К этой
группе задач относятся задачи о выборе диеты, составлении кормового рациона в
животноводстве, шихт в металлургии, горючих и смазочных смесей в
нефтеперерабатывающей промышленности, смесей для получения бетона в
строительстве и т. д.
Высокий уровень затрат на исходные сырьевые материалы и необходимость
повышения эффективности производства выдвигает на первый план следующую задачу:
получить продукцию с заданными свойствами при наименьших затратах на исходные
сырьевые материалы.
1.
Симплекс-метод
Симплекс-метод
- алгоритм решения оптимизационной <#"552543.files/image001.gif">400
|
|
|
Крекинг-бензин
|
250
|
|
|
|
Бензин прямой перегонки
|
300
|
|
|
|
Изопентат
|
250
|
|
|
|
Цена бензина (рублей за 1
тыс.л.)
|
120
|
100
|
150
|
|
5.
Математическая постановка задачи
Составим математическую модель задачи. Обозначим через t1 количество бензина А, через t2 количество бензина В, через t3 количество бензина С. Тогда,
целевая функция будет:
L=y1t1+ y2t2+ y3t3=120t1+100t2+150t3 →max
Система ограничений:
Приведем
систему ограничений к виду основной задачи линейного программирования (введем
новые переменные t4 , t5 ,t6 ,t7, которые входят в целевую функцию с нулевыми
коэффициентами):
Выберем
t1 , t2 ,t3 свободными переменными, а t4 , t5 ,t6 ,t7 -
базисными и приведем к стандартному виду для решения с помощью
симплекс-таблицы:
L=0-(-120t1-100t2-150t3)
Составим
симплекс-таблицу.
Это
решение опорное, т.к. все свободные члены положительны.
Т.
к. все коэффициенты в целевой функции отрицательные, то можно взять любой
столбец разрешающим (пусть t1). Выберем в качестве разрешающего элемента тот, для
которого отношение к нему свободного члена будет минимально (это t7)
Таблица
2
|
b
|
t1
|
t2
|
t3
|
|
L
|
0
|
|
-120
|
|
-100
|
|
-150
|
|
|
|
|
6000
|
|
60
|
|
60
|
|
180
|
|
t4
|
400
|
|
2
|
|
3
|
|
|
400/2=200
|
|
|
-100
|
|
-1
|
|
-1
|
|
-3
|
|
t5
|
250
|
|
3
|
|
1
|
|
2
|
|
250/3=83,3
|
|
|
-150
|
|
-1,5
|
|
-1,5
|
|
-4,5
|
|
t6
|
350
|
|
5
|
|
2
|
|
1
|
|
350/5=70
|
|
|
-250
|
|
-2,5
|
|
-2,5
|
|
-7,5
|
|
t7
|
100
|
|
2
|
|
1
|
|
3
|
|
100/2=50
|
|
|
50
|
|
0,5
|
|
0,5
|
|
1,5
|
|
Далее меняем t2 и t1 .
Таблица 3
|
b
|
t7
|
t2
|
t3
|
|
L
|
|
60
|
|
-40
|
|
30
|
|
|
|
|
4000
|
|
40
|
|
80
|
|
120
|
|
t4
|
300
|
|
-1
|
|
2
|
|
-1
|
|
300/2=150
|
|
|
-200
|
|
-2
|
|
-4
|
|
-6
|
|
t5
|
100
|
|
-1,5
|
|
-0,5
|
|
-2,5
|
|
|
|
|
50
|
|
0,5
|
|
1
|
|
-4,5
|
|
t6
|
50
|
|
-2,5
|
|
-0,5
|
|
-6,5
|
|
|
|
|
50
|
|
0,5
|
|
1
|
|
-7,5
|
|
t1
|
50
|
|
0,5
|
0,5
|
|
1,5
|
|
50/0,5=100
|
|
|
100
|
|
1
|
|
2
|
|
1,5
|
|
Таблица 3
|
b
|
t7
|
t1
|
t3
|
L
|
10000
|
|
100
|
|
80
|
|
150
|
|
|
|
|
|
|
|
|
|
|
t4
|
100
|
|
-3
|
|
-4
|
|
-7
|
|
|
|
|
|
|
|
|
|
|
t5
|
150
|
|
-1
|
|
1
|
|
-1
|
|
|
|
|
|
|
|
|
|
|
t6
|
|
-2
|
|
1
|
|
-5
|
|
|
|
|
|
|
|
|
|
|
t2
|
100
|
|
1
|
|
2
|
|
3
|
|
|
|
|
|
|
|
|
|
|
Т.к. коэффициенты при переменных в целевой функции положительны,
следовательно, это оптимальное решение.
Таким образом, t1 = t3 =0; t2=100; L=10000.
Т.е. для получения максимальной прибыли следует производить только бензин
В (100 тыс. л.), при этом выручка составит 10000 руб.
ОТВЕТ: для получения максимальной прибыли следует производить только
бензин В (100 тыс. л.), при этом выручка составит 10000 руб.
6. Разработка
основных алгоритмов решения задачи. Решение задачи в среде визуального
программирования Delphi
Анализ процесса обработки информации и выбор структур данных для ее
хранения
Для хранения первичных данных используются целочисленные переменные Count , Count2 и компонент StringGrid.
Переменные целочисленного типа tmp и k они указывают на количество столбцов
и строк.
Для вычисления минимального значения столбца и минимального значения
строки используются переменные целочисленного типа MinC, MinR.
Переменная логического типа Reshil используется для подсчёта и вывода пользователю максимальной прибыли,
которую можно будет получить при реализации найденного оптимального плана.
Переменные целочисленного типа Count, Count2 используются как счетчики в циклических
операторах.
Также для хранения промежуточных значений максимальной прибыли
используются переменные вещественного типа zna4TMP, zna4TMP2.
Переменная i целочисленного
типа используется для временного хранения данных.
Переменная вещественного типа zna4 используется для нахождения максимального значения прибыли во время
промежуточных расчетов. Для хранения коэффициента X при максимальном значении прибыли используется переменная
целочисленного типа a.
Переменная Boo логического
типа хранит итоговый результат-максимальная прибыль.
Для хранения и вычисления данных используется компонент StringGrid.
7.
Проектирование интерфейса пользователя. Построение графа состояний интерфейса
Рисунок 1- граф состояния интерфейса
8. Разработка
форм ввода-вывода информации
Рисунок 2 - Form1
1. компонент edit1
- ввод наименования ресурса;
2. компонент edit2
- ввод количества литров;
. компонент BitBtn1-добавляет новый ресурс в таблицу ;
. компонент BitBtn2 - изменяет ресурс добавленный в таблицу;
. компонент BitBtn3 -удаляет ресурс из таблицы;
. компонент StringGrid1 - таблица для ввода-вывода данных;
. компонент RadioButton1-компонент выбирает максимальную прибыль предприятия;
. компонент RadioButton2-компонент выбирает минимальные затраты предприятия;
. компонент BitBtn4-
выход из программы;
. компонент BitBtn5-
очищает таблицу ввода данных;
. компонент BitBtn6-
переход на Form2;
. компонент BitBtn7-справка;
Рисунок 3 - Form2
1. компонент edit1
- ввод наименования ресурса;
2. компонент edit2
- ввод стоимости ресурса за одну единицу товара;
. компонент BitBtn1-добавляет новый ресурс в таблицу ;
. компонент BitBtn2 - изменяет ресурс добавленный в таблицу;
. компонент BitBtn3 -удаляет ресурс из таблицы;
. компонент StringGrid1 - таблица для ввода-вывода данных;
. компонент BitBtn4-выход
из программы;
. компонент BitBtn6-возвращает
пользователя на Form1;
. компонент BitBtn7-переход
на Form3;
Рисунок 4 - Form3
1. компонент StringGrid1 - таблица вывода результата;
2. компонент BitBtn1-выход
из программы;
. компонент BitBtn2-очищает
таблицу вывода результата;
. компонент BitBtn3-возвращает
пользователя на Form2;
симплекс метод delphi
9.
Контрольный пример
10. Заключение
В процессе написания данной курсовой работы были углублены знания в таких
дисциплинах, как: “Основы алгоритмизации и программирования”, “Основы
программирования в среде программирования Delphi” и “Математические методы”. Также в процессе работы
над курсовой работой были изучены множественные информационные источники разной
предметной направленности в таких сферах, как “Объектно-ориентированное
программирование”, “Алгоритмизация”, “Программирование в среде Delphi”, “Динамическое программирование” и
“Экономической оптимизации”.
В результате данной работы были достигнуты поставленные цели и задачи, а
именно:
- изучен теоретический материал решения задачи линейного
программирования симплексным методом для нахождения оптимального плана;
- разработан алгоритм решения данной задачи о смесях для
нахождения максимальной прибыли или минимальных затрат предприятия;
- автоматизирован процесс решения поставленной задачи
симплексным методом на нахождения максимальной прибыли предприятия;
- разработана программа для решения поставленной задачи
симплексным методом для нахождения максимальной прибыли и минимальных затрат
предприятия;
Разработанный программный продукт не может использоваться в реальной
сфере экономической оптимизации, а также его не могут применять, как студенты
изучающие дисциплину “Математические методы”, так и преподаватели преподающие
её. Студентам программный продукт не поможет решить сложные задачи, провести
самоконтроль или разобраться в решении задач такого типа благодаря тому, что в
процессе работы программы пользователю выводится процесс нахождения
оптимального плана распределения инвестиций между предприятиями. Преподавателям
же он не поможет облегчить процесс проверки решений подобных задач у студентов.
11.
Исходный код
Unit1;, Messages, SysUtils, Variants, Classes, Graphics,
Controls, Forms,, Grids, StdCtrls, Buttons, ComCtrls, Menus;= class(TForm):
TGroupBox;: TEdit;: TEdit;: TBitBtn;: TBitBtn;: TLabel;: TLabel;: TStringGrid;:
TLabel;: TGroupBox;: TBitBtn;: TBitBtn;: TBitBtn;: TBitBtn;: TGroupBox;:
TBitBtn;: TBitBtn;: TBitBtn;: TEdit;: TLabel;: TEdit;: TLabel;: TStringGrid;:
TLabel;: TLabel;: TGroupBox;: TStringGrid;: TLabel;: TGroupBox;: TStringGrid;:
TBitBtn;: TBitBtn;: TGroupBox;: TMemo;: TRichEdit;: TButton;: TButton;:
TButton;: TRadioButton;: TRadioButton;BitBtn6Click(Sender:
TObject);Edit1KeyPress(Sender: TObject; var Key: Char);BitBtn1Click(Sender:
TObject);StringGrid1Click(Sender: TObject);BitBtn7Click(Sender:
TObject);FormCreate(Sender: TObject);BitBtn2Click(Sender:
TObject);Edit2KeyPress(Sender: TObject; var Key: Char);BitBtn4Click(Sender:
TObject);BitBtn5Click(Sender: TObject);Edit3KeyPress(Sender: TObject; var Key:
Char);Edit4KeyPress(Sender: TObject; var Key: Char);BitBtn3Click(Sender:
TObject);BitBtn9Click(Sender: TObject);BitBtn8Click(Sender:
TObject);StringGrid2Click(Sender: TObject);StringGrid3KeyPress(Sender: TObject;
var Key: Char);BitBtn11Click(Sender: TObject);BitBtn10Click(Sender:
TObject);Button1Click(Sender: TObject);Button2Click(Sender:
TObject);Button3Click(Sender: TObject);
{ Private declarations }
{ Public declarations };: TForm1;
{$R *.dfm}Otchistka();.stringgrid1.RowCount
:=2;.stringgrid1.Cells [0,form1.stringgrid1.RowCount - 1] :=
'';.stringgrid1.Cells [1,form1.stringgrid1.RowCount - 1] :=
'';.stringgrid2.RowCount :=2;.stringgrid2.Cells [0,form1.stringgrid2.RowCount -
1] := '';.stringgrid2.Cells [1,form1.stringgrid2.RowCount - 1] := '';.stringgrid3.RowCount
:=2;.stringgrid2.Cells [0,form1.stringgrid2.RowCount - 1] :=
'';.stringgrid2.Cells [1,form1.stringgrid2.RowCount - 1] :=
'';.stringgrid3.ColCount :=2;.stringgrid3.RowCount
:=2;;Otvet();count,count2:integer;
boo:boolean;.Memo1.Lines.Add('Выгодно производить/использовать следующую
продукцию:');
for count:=1 to form1.StringGrid4.RowCount -1 docount2:=0 to
form1.StringGrid2.RowCount -1 doform1.StringGrid4.Cells[0,count] =
form1.StringGrid2.Cells[0,count2] then.Memo1.Lines.Add (form1.StringGrid4.Cells[0,count]+
' в количестве ' + form1.StringGrid4.Cells[1,count]+' ед.');;:=false;count:=1 to
form1.StringGrid4.RowCount -1 docount2:=0 to form1.StringGrid1.RowCount -1
doform1.StringGrid4.Cells[0,count] = form1.StringGrid1.Cells[0,count2]
then:=true;;;boo then.Memo1.Lines.Add('');
form1.Memo1.Lines.Add('При этом будут такие излишки ресурсов:');
for count:=1 to form1.StringGrid4.RowCount -1 docount2:=0 to
form1.StringGrid1.RowCount -1 doform1.StringGrid4.Cells[0,count] =
form1.StringGrid1.Cells[0,count2] then.Memo1.Lines.Add
(form1.StringGrid4.Cells[0,count]+ ' в количестве ' +
form1.StringGrid4.Cells[1,count]+' ед.');;;.Memo1.Lines.Add('');form1.RadioButton2.Checked
then.Memo1.Lines.Add('Затраты при таком плане использования составят ' + floattostr((-1)*strtofloat(form1.StringGrid4.Cells[1,1]))+'
у.е.').Memo1.Lines.Add('Прибыль при таком плане производства составит ' + form1.StringGrid4.Cells[1,1]+' у.е.');;zapolni();Count:integer;.StringGrid3.Cells[1,0]:='ОФР';Count:=1 to
form1.stringgrid1.RowCount-1 do.StringGrid3.RowCount
:=form1.StringGrid3.RowCount
+1;.StringGrid3.Cells[0,Count+1]:=form1.StringGrid1.Cells[0,Count];;.StringGrid3.Cells[0,1]:='Прибыль';.StringGrid3.Cells[1,1]:='0';Count:=1
to form1.stringgrid2.RowCount-1 do.StringGrid3.ColCount := form1.StringGrid3.ColCount+1;.StringGrid3.Cells[Count+1,0]:=form1.StringGrid2.Cells[0,Count];;Count:=1
to form1.StringGrid1.RowCount -1
do.StringGrid3.Cells[1,Count+1]:=form1.StringGrid1.Cells[1,Count];Count:=1 to
form1.StringGrid2.RowCount -1 do.StringGrid3.Cells[Count+1,1]:=form1.StringGrid2.Cells[1,Count];;ZapEnd();Count,count2,tmp,k:integer;:=1;form1.RadioButton2.Checked
then k:=-1;.StringGrid4.RowCount
:=form1.StringGrid3.RowCount;.StringGrid4.ColCount :=
form1.StringGrid3.ColCount;count:=0 to form1.StringGrid3.RowCount-1 docount2:=0
to form1.StringGrid3.ColCount-1 do.StringGrid4.Cells [Count2,count]
:=form1.StringGrid3.Cells [Count2,count];count:=1 to
form1.StringGrid3.RowCount-1 docount2:=1 to form1.StringGrid3.ColCount-1
do.StringGrid4.Cells [Count2,count] :=floattostr(k*strtofloat(form1.StringGrid3.Cells
[Count2,count]));count:=1 to form1.StringGrid4.ColCount -1
do.StringGrid4.Cells[count,1]:=floattostr(strtofloat(form1.StringGrid4.Cells[count,1])*(-1));:=form1.StringGrid4.ColCount;.StringGrid4.ColCount
:= tmp + form1.StringGrid3.RowCount -2;Count:=2 to form1.StringGrid3.RowCount
-1 do.StringGrid4.Cells [count+tmp-2,0]:=form1.StringGrid3.Cells
[0,count];;count:=tmp to form1.StringGrid4.ColCount-1 docount2:=1 to
form1.StringGrid4.RowCount - 1 doform1.StringGrid4.Cells [count,0]=
form1.StringGrid4.Cells [0,count2] then.StringGrid4.Cells
[count,count2]:='1'.StringGrid4.Cells
[count,count2]:='0';;Proverka():boolean;Count,Count2:integer;:boolean;:=true;.StringGrid3.Cells
[1,1]:='0';Count:=1 to form1.StringGrid3.RowCount -1 doCount2:=1 to
form1.StringGrid3.ColCount -1 doform1.StringGrid3.Cells [Count2,Count]=''
then:=false;.Label5.Caption :='Ошибка заполнения таблицы. Найдено
пустое поле!';
end;
proverka:=boo;;SimplexMetod(n:boolean);Count,Count2,MinC,MinR:integer;,zna4,zna4TMP,zna4TMP2:double;,reshil:boolean;:=false;:=false;count:=1
to form1.StringGrid4.ColCount -1 dostrtofloat(form1.StringGrid4.Cells
[count,1])<0 then boo:=true;boo then:=2;:=strtofloat(form1.StringGrid4.Cells
[2,1]);count:=2 to form1.StringGrid4.ColCount -1
dostrtofloat(form1.StringGrid4.Cells [count,1])<zna4
then:=strtofloat(form1.StringGrid4.Cells
[count,1]);:=count;;TMP:=strtofloat(form1.StringGrid4.Cells
[1,2]);TMP2:=strtofloat(form1.StringGrid4.Cells
[MinC,2]);:=zna4TMP/zna4TMP2;:=2;Count:=2 to form1.StringGrid4.RowCount -1
doTMP:=strtofloat(form1.StringGrid4.Cells
[1,count]);TMP2:=strtofloat(form1.StringGrid4.Cells [MinC,count]);zna4TMP2>0
then:=zna4TMP/zna4TMP2;zna4<MinEl
then:=zna4;:=Count;;;;:=strtofloat(form1.StringGrid4.Cells[MinC,MinR]);count:=1
to form1.StringGrid4.ColCount -1
do.StringGrid4.Cells[count,MinR]:=floattostr(strtofloat(form1.StringGrid4.Cells[count,MinR])/MinEl);count:=1
to form1.StringGrid4.ColCount -1 doCount2:=1 to form1.StringGrid4.RowCount -1
do(count<>MinC)and(count2<>MinR) then.StringGrid4.Cells
[count,count2]:=floattostr(strtofloat(form1.StringGrid4.Cells
[count,count2])-strtofloat(form1.StringGrid4.Cells
[count,MinR])*strtofloat(form1.StringGrid4.Cells
[MinC,count2]));.StringGrid4.Cells[0,MinR]:=form1.StringGrid4.Cells[MinC,0];count:=1
to form1.StringGrid4.RowCount - 1 doform1.StringGrid4.Cells [MinC,0]=
form1.StringGrid4.Cells [0,count] then.StringGrid4.Cells
[MinC,count]:='1'.StringGrid4.Cells [MinC,count]:='0';.Label5.Caption :='Решение найдено!!!';:=true;;reshil
or
n;;DvSimplexMetod(n:boolean);Count,Count2,MinC,MinR:integer;,zna4,zna4TMP,zna4TMP2:double;,reshil,dv:boolean;:=false;:=form1.RadioButton2.Checked;:=false;count:=2
to form1.StringGrid4.ColCount -1 dostrtofloat(form1.StringGrid4.Cells
[count,1])<0 then boo:=true;count:=2 to form1.StringGrid4.RowCount -1
dostrtofloat(form1.StringGrid4.Cells [1,count])<0 then boo:=true;boo
then:=2;:=strtofloat(form1.StringGrid4.Cells [1,2]);count:=2 to
form1.StringGrid4.RowCount -1 dostrtofloat(form1.StringGrid4.Cells [1,count])<zna4
then:=strtofloat(form1.StringGrid4.Cells
[1,count]);:=count;;TMP:=strtofloat(form1.StringGrid4.Cells
[2,1]);TMP2:=strtofloat(form1.StringGrid4.Cells
[2,MinR]);:=zna4TMP/zna4TMP2;:=2;Count:=2 to form1.StringGrid4.ColCount -1
doTMP:=strtofloat(form1.StringGrid4.Cells
[count,1]);TMP2:=strtofloat(form1.StringGrid4.Cells
[count,MinR]);(zna4TMP>0) and (zna4TMP2<0)
then:=zna4TMP/zna4TMP2;abs(zna4)<abs(MinEl)
then:=zna4;:=Count;;;;:=strtofloat(form1.StringGrid4.Cells[MinC,MinR]);count:=1
to form1.StringGrid4.ColCount -1
do.StringGrid4.Cells[count,MinR]:=floattostr(strtofloat(form1.StringGrid4.Cells[count,MinR])/MinEl);count:=1
to form1.StringGrid4.ColCount -1 doCount2:=1 to form1.StringGrid4.RowCount -1
do(count<>MinC)and(count2<>MinR) then.StringGrid4.Cells
[count,count2]:=floattostr(strtofloat(form1.StringGrid4.Cells
[count,count2])-strtofloat(form1.StringGrid4.Cells
[count,MinR])*strtofloat(form1.StringGrid4.Cells
[MinC,count2]));.StringGrid4.Cells[0,MinR]:=form1.StringGrid4.Cells[MinC,0];count:=1
to form1.StringGrid4.RowCount - 1 doform1.StringGrid4.Cells [MinC,0]=
form1.StringGrid4.Cells [0,count] then.StringGrid4.Cells
[MinC,count]:='1'.StringGrid4.Cells [MinC,count]:='0';.Label5.Caption :='Решение найдено!!!';:=true;;reshil
or n;;TForm1.BitBtn6Click(Sender: TObject);.Close;;TForm1.Edit1KeyPress(Sender:
TObject; var Key: Char);key of
#8: ;
#13: edit2.SetFocus ;
'a'..'z': ;
'A'..'Z': ;
'а'..'я': ;
'А'..'Я': ;
'0'..'9': ;key:=#0;;;TForm1.BitBtn1Click(Sender:
TObject);Count:integer;:boolean;:=true;(edit1.Text ='')or(edit2.Text ='')
then:=false;.Caption :='Заполните все поля ввода.';;Count
:= 1 to stringgrid1.RowCount do(edit1.Text = stringgrid1.Cells [0,Count])
then:=false;;boo then(stringgrid1.RowCount = 2) and (stringgrid1.Cells[0,1]='')
then.RowCount := stringgrid1.RowCount.RowCount := stringgrid1.RowCount +
1;.Cells [0,stringgrid1.RowCount - 1] := edit1.Text;.Cells
[1,stringgrid1.RowCount - 1] := edit2.Text;.Caption :='Ресурс добавлен!';.SetFocus();.Caption
:='Такой ресурс
уже есть';;TForm1.StringGrid1Click(Sender: TObject);i
:integer;:=stringgrid1.Row;.Text := stringgrid1.Cells [0,i];.Text :=
stringgrid1.Cells [1,i];.Caption := '';;TForm1.BitBtn7Click(Sender:
TObject);Count,i:integer;:boolean;:=true;Count := 1 to stringgrid1.RowCount
do(edit1.Text = stringgrid1.Cells [0,Count]) then:=Count;:=false;;;boo then
label5.Caption :='Такого ресурса нет в списке!';
end.Cells [0,i] := edit1.Text;.Cells [1,i] :=
edit2.Text;.Caption :='Ресурс изменен.';;;TForm1.FormCreate(Sender: TObject);.Cells [0,0]:='Наименование';.Cells [1,0]:='ОФР';.Cells [0,0]:='Наименование';.Cells [1,0]:='Стоимость';;TForm1.BitBtn2Click(Sender:
TObject);Count,i:integer;:boolean;:=true;Count := 1 to stringgrid1.RowCount
do(edit1.Text = stringgrid1.Cells [0,Count]) then:=Count;:=false;;;boo then
label5.Caption :='Такого ресурса нет в списке!';
end.Rows[i].Clear ;Count := i to stringgrid1.RowCount-1
do.Cells [0,Count]:=stringgrid1.Cells [0,Count+1];.Cells
[1,Count]:=stringgrid1.Cells [1,Count+1];;.RowCount := stringgrid1.RowCount
-1;.Caption :='Ресурс стерт.';;;TForm1.Edit2KeyPress(Sender: TObject; var Key: Char);key
of
#8: ;
#13: bitbtn1.SetFocus;
'0'..'9': ;
#110:;
#46:;key:=#0;;;TForm1.BitBtn4Click(Sender: TObject);.Caption
:='';groupbox5.Visible = true then.Visible := false;.Visible := true;.Visible
:=false;.Visible :=false;.Clear();.Enabled :=false;form1.RadioButton2.Checked
then(False)(False);();;groupbox4.Visible = true thenProverka() then.Visible :=
false;.Visible := true;.Visible :=true;.Visible :=true;.Caption := '<Ответ>';();;;groupbox3.Visible = true
thenstringgrid2.Cells[0,1]<>'' then.Visible := false;.Visible :=
true;.ColCount :=2;.RowCount :=2;();label5.Caption :='Подуктов нет?!';;groupbox1.Visible = true
thenstringgrid1.Cells[0,1]<>'' then.Enabled := true;.Visible :=
false;.Visible := true;label5.Caption :='Ресурсы
не могут отсутствовать!';;;TForm1.BitBtn5Click(Sender:
TObject);.Caption :='';groupbox3.Visible = true then.Enabled := false;.Visible
:= false;.Visible := true;;groupbox4.Visible = true then.Visible := false;.Visible
:= true;;groupbox5.Visible = true then.Visible := false;.Visible :=
true;.Visible :=false;.Visible :=false;.Caption := 'Дальше -->';.Enabled
:=true;;groupbox6.Visible = true then.Visible := false;.Visible :=
true;.Visible :=true;.Visible :=true;.Enabled
:=true;;;TForm1.Edit3KeyPress(Sender: TObject; var Key: Char);key of
#8: ;
#13: edit4.SetFocus ;
'a'..'z': ;
'A'..'Z': ;
'а'..'я': ;
'А'..'Я': ;
'0'..'9': ;key:=#0;;;TForm1.Edit4KeyPress(Sender: TObject;
var Key: Char);key of
#8: ;
#13: bitbtn3.SetFocus;
'0'..'9': ;
#110:;
#46:;key:=#0;;;TForm1.BitBtn3Click(Sender:
TObject);Count:integer;:boolean;:=true;(edit3.Text ='')or(edit4.Text ='')
then:=false;.Caption :='Заполните все поля ввода.';;Count
:= 1 to stringgrid2.RowCount do(edit3.Text = stringgrid2.Cells [0,Count])
then:=false;;boo then(stringgrid2.RowCount = 2) and (stringgrid2.Cells[0,1]='')
then.RowCount := stringgrid2.RowCount.RowCount := stringgrid2.RowCount +
1;.Cells [0,stringgrid2.RowCount - 1] := edit3.Text;.Cells [1,stringgrid2.RowCount
- 1] := edit4.Text;
label5.Caption :='Продукт добавлен!';
edit3.SetFocus();.Caption :='Такой продукт уже есть';;TForm1.BitBtn9Click(Sender:
TObject);Count,i:integer;:boolean;:=true;Count := 1 to stringgrid2.RowCount
do(edit3.Text = stringgrid2.Cells [0,Count]) then:=Count;:=false;;;boo then
label5.Caption :='Такого продукта нет в списке!';
end.Rows[i].Clear ;Count := i to stringgrid2.RowCount-1
do.Cells [0,Count]:=stringgrid2.Cells [0,Count+1];.Cells
[1,Count]:=stringgrid2.Cells [1,Count+1];;.RowCount := stringgrid2.RowCount
-1;.Caption :='Продукт стерт.';;;TForm1.BitBtn8Click(Sender:
TObject);Count,i:integer;:boolean;:=true;Count := 1 to stringgrid2.RowCount
do(edit3.Text = stringgrid2.Cells [0,Count]) then:=Count;:=false;;;boo then
label5.Caption :='Такого продукта нет в списке!';
end.Cells [0,i] := edit3.Text;.Cells [1,i] := edit4.Text;
label5.Caption :='Продукт изменен.';
end;;TForm1.StringGrid2Click(Sender: TObject);i
:integer;:=stringgrid2.Row;.Text := stringgrid2.Cells [0,i];.Text :=
stringgrid2.Cells [1,i];.Caption := '';;TForm1.StringGrid3KeyPress(Sender:
TObject; var Key: Char);key of
#8: ;
#13:;
'0'..'9': ;
#110:;
',': ;
#46:;key:=#0;;;TForm1.BitBtn11Click(Sender:
TObject);form1.RadioButton2.Checked then(True)(True);;TForm1.BitBtn10Click(Sender:
TObject);form1.RadioButton2.Checked then(False)(False);;
//заполняем и выполняем
bitBtn5.Enabled:=true;Proverka() then.Visible :=
false;.Visible := true;.Visible :=true;.Visible :=true;.Caption := '<Ответ>';();;;TForm1.Button2Click(Sender:
TObject);.Visible :=false;.Visible :=false;.Caption := 'Дальше -->';.Enabled :=true;.Visible :=
true;.Visible := false;.Visible := false;.Visible := false;.Visible :=
false;.Caption:='';();;TForm1.Button3Click(Sender: TObject);
begin.MessageBox('Данный программный продукт был разработан Гринёвой
Татьяной.'+ #13 +' Использование данного продукта разрешено только в учебных
целях.','О программе.');;.
Список использованной литературы
1 Зайченко Ю.П., Шумилова С.А. Исследование операций.
2 Вентцель. Е. С. Элементы динамического
программирования / Е. С.
Карасев А.Н., Н.Ш. Кремер, Т.Н. Савельева
«Математические методы в экономике», М. 2000
Лищенко «Линейное и нелинейное программирование», М.
2003
А.Н. Карасев, Н.Ш. Кремер, Т.Н. Савельева «Математические
методы в экономике», М.2000
Интернет источники:
<http://cyberfac.ru/>
<http://emm.ostu.ru/l>
<http://matekonomika.narod.ru/>
7 О.О. Замков, А.В.
Толстопятенко, Ю.Н. Черемных «Математические методы
<http://institutiones.com/download/books/1039-matematicheskie-metodi-v-ekonomike.html>»