Задача о замени оборудования
2011
Содержание
Введение |
3 | |
Постановка задачи и описание модели |
4 | |
Контрольный пример |
6 | |
Разработка алгоритма |
||
Разработка блок схем |
||
Код программы |
||
Оформление пояснительной |
||
ВВЕДЕНИЕ
Во всем мире существует множество предприятий, которые используют для производства своей продукции машинное оборудование. Поэтому при его внедрении нужно составлять оптимальный план использования и замены оборудования. Задачи по замене оборудования рассматриваются как многоэтапный процесс, который характерен для динамического программирования, так как каждый последующий шаг основывается на предыдущем.
Многие предприятия сохраняют или заменяют оборудование по своему усмотрению, не применяя методы динамического программирования. Применять эти методы целесообразно, так как это позволяет наиболее четко максимизировать прибыль или минимизировать затраты на обновление парка машин.
Задача о замене оборудования состоит
в определении оптимальных
- Постановка задачи и описание модели
Рассматривается плановый период из нескольких лет, в начале которого имеется одна машина фиксированного возраста. В процессе работы машина дает ежегодный доход, требует эксплуатационных затрат и имеет остаточную стоимость, причем все перечисленные характеристики зависят от возраста машины. В любой год машину можно сохранить или продать по остаточной стоимости и купить новую по известной цене (которая может меняться со временем). Задача состоит в следующем: для каждого года в плановом периоде надо решить – сохранять имеющуюся на этот период машину или продать ее и купить новую с тем, чтобы суммарная прибыль за весь плановый период была максимальной.
Переход системы S из одного состояния в другое за 1 год в зависимости от принятого решения можно изобразить графически (рис. 1).
Рис.1 – Переход системы S из состояния «новое» состояние за 1 год
Введем в рассмотрение функцию – величину суммарного дохода (прибыли) за последние n лет планового периода при условии, что в начале этого периода из n лет имеется машина возраста t.
Функции , , …, , учитывающие вклад последующих шагов в общий эффект, называются функциями Беллмана – по фамилии американского математика Р. Беллмана, создателя метода динамического программирования. С помощью этих функций ведется анализ задач динамического программирования. Очевидно, если мы сумеем вычислить и найти политику замен, то это и будет решение задачи.
Введем условные обозначения:
t |
– |
Возраст машины: t = 0, 1, 2, … (t = 0 – соответствует использованию новой машины, t = 1 – соответствует использованию машины возраста 1 год и так далее); |
Z(t) |
– |
Стоимость продукции, производимой за 1 год на машине возраста t; |
U(t) |
– |
Эксплутационные затраты за 1 год на машину возраста t; |
S(t) |
– |
Остаточная стоимость машины возраста t; |
T |
– |
Текущее время в плановом периоде; |
P(T) |
– |
Цена новой машины в году t; |
|
– |
Начальный возраст машины; |
N |
– |
Длина планового периода. |
Предположим, что к началу последнего года планового периода n = 1 у нас имеется машина возраста t. В нашем распоряжении две возможности. Рассмотрим их.
Возможность первая: сохранить машину и, следовательно, получить за последний год доход
Z(t) – U(t).
Возможность вторая: продать имеющуюся машину и купить новую, что обеспечит в последний год доход
S(t) – P + Z(0) – U(0).
Рассмотрим все возможные
В случае сохранения машины доход за рассматриваемый период определяется выражением:
В случае замены машины аналогичной имеем:
Для принятия решения необходимо вычислить функцию Беллмана, которая имеет вид:
(1.1)
- Описание алгоритма решения
Входные данные:
- N – длина планового периода;
- Z(N) – стоимость продукции, производимой в t – м году на машине возраста t;
- U(N) – эксплуатационные затраты за один год на машину возраста t;
- S(N) – остаточная стоимость машины возраста t;
- P(N) – цена новой машины в t-м году.
Выполнение операций:
- проверка корректности входных данных
- все входные данные не должны быть отрицательными
- Z(N) – строго убывает
- U(N) – строго возрастает
- вычисление и запись в таблицу 2.2;
- вычисление где n = 1, N – 1, t = 0, N – 1
Выходные данные:
- таблица решения(матрица f), где черным цветом обозначена политика сохранения машины и красным – замена.
Дополнительные переменные
Save = f(1, t) + f(i, t+1) – промежуточный результат, характерезующая сохранение оборудования;
Zam = s(t) – p(t) +f(1,0)+f(i,1) – промежуточный результат, характерезующая замену оборудования.
Функция проверки входных данных
Test_data
- Контрольный пример
Пусть функции Z(t), U(t) заданы табл.3 2.1.
Дано:
Длина планового периода N равна 10 годам,
Таблица 2.1
t |
0 |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
Z(t) |
20 |
20 |
20 |
19 |
19 |
18 |
18 |
17 |
17 |
16 |
15 |
U(t) |
10 |
11 |
12 |
12 |
13 |
13 |
14 |
14 |
15 |
15 |
15 |
Ограничимся машиной возраста меньше 10 лет. Для простоты решения нужно принять:
- Остаточная стоимость машины равна 0 (S(t) = 0);
- Цена новой машины со временем не меняется и равна 10 условным единицам (P(t) = P = 0);
- Длина планового периода равно 10 (N = 10)
Используя формулы и (1.1), можно вычислить значения функций Беллмана при различных n и t. Значения функций будут вписываться в таблицу 2.2.
Таблица 2.2
t
|
0 |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
|
10 |
9 |
8 |
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
|
19 |
17 |
15 |
13 |
11 |
9 |
9 |
9 |
9 |
9 |
9 |
|
27 |
24 |
21 |
18 |
17 |
17 |
17 |
17 |
17 |
17 |
17 |
|
34 |
30 |
26 |
24 |
24 |
24 |
24 |
24 |
24 |
24 |
24 |
|
40 |
35 |
32 |
31 |
30 |
30 |
30 |
30 |
30 |
30 |
30 |
|
45 |
41 |
39 |
37 |
36 |
35 |
35 |
35 |
35 |
35 |
35 |
|
51 |
48 |
45 |
43 |
41 |
41 |
41 |
41 |
41 |
41 |
41 |
|
58 |
54 |
51 |
48 |
48 |
48 |
48 |
48 |
48 |
48 |
48 |
|
64 |
60 |
56 |
55 |
54 |
54 |
54 |
54 |
54 |
54 |
54 |
|
70 |
65 |
63 |
61 |
60 |
60 |
60 |
60 |
60 |
60 |
60 |
Решение:
(0) = Z(0) – U(0) = 20 – 10 = 10
(1) = Z(1) – U(1) = 20 – 11 = 9
(2) = Z(2) – U(2) = 20 – 12 = 8
(3) = Z(3) – U(3) = 19 – 12 = 7
(4) = Z(4) – U(4) = 19 – 13 = 6
(5) = Z(5) – U(5) = 18 – 13 = 5
(6) = Z(6) – U(6) = 18 – 14 = 4
(7) = Z(7) – U(7) = 17 – 14 = 3
(8) = Z(8) – U(8) = 17 – 15 = 2
(9) = Z(9) – U(9) = 16 – 15 = 1
(10) = Z(10) – U(10) = 15 – 15 = 0
Из вычислений выше видно, что машина возраста 10 лет не выгодна, потому что она не приносит доходов.
Так как тогда формула (1.1) примет вид:
сохранение оборудования
сохранение оборудования
сохранение оборудования
сохранение оборудования
сохранение оборудования
сохранение оборудования
замена оборудования
замена оборудования
замена оборудования
замена оборудования
замена оборудования
Аналогично выполняются
Утойчивость программы
Имя проекта вводится любые символы кроме: «.»; «/»; «,»; «[»; «]»;«{»; «}».
Длина планового периода это целое число от 2 до 99.
Z(t), U(t), S(t), P(T), P, S – положительное число дробного типа;
Z(t) – числа строго убывают;
U(t) – числа строго возрастают.
Заключение
В ходе выполнения курсовой работы было рассмотрено динамическое программирование – это область математического программирования, включающая совокупность приемов и средств для нахождения оптимального решения, а также оптимизации каждого шага в системе и выработке стратегии управления, то есть процесс управления можно представить как многошаговый процесс.
К классу задач динамического программирования относится множество различных задач. В данной курсовой работе был расссмотрен раздел «Задачи о замене оборудования» и реализован программный продукт для нахождения оптимального плана замены оборудования.
В роли инструмента для разработки программного продукта была использована среда Delphi.
Список используемой литературы
- Вентцель Е.С. Элементы динамического программирования
.- М.: Наука, 1964. - Карманов В.Г. Математическое программирование. –М.: Наука, 1986.
- Терехов Л.Л. Экономико-математические методы.- М.: Статистика, 1972.
Приложения
Листинг программы
Главный модуль. Этот модуль выполняет функции:
- в нем описан основной интерфейс пользователя
- управление проектами (добавление, изменение, открытие)
- ввод данных
unit Main;
unit Main;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Menus, StdCtrls, Grids, ExtCtrls, Buttons, ComCtrls, ToolWin, ImgList;
type
TForm_Main = class(TForm)
MainMenu1: TMainMenu;
N1: TMenuItem;
N_New: TMenuItem;
P_In_data: TPanel;//панель входных данных
SG_Tabl_input: TStringGrid;
ED_S: TLabeledEdit;
Ed_P: TLabeledEdit;
N_Save: TMenuItem;
N_load: TMenuItem;
N_open_otchet: TMenuItem;
N3: TMenuItem;
ImageList1: TImageList;
OD_file: TOpenDialog;
N2: TMenuItem;
Panel1: TPanel;
BitBtn1: TBitBtn;
BitBtn2: TBitBtn;
Panel2: TPanel;
RE_Help: TRichEdit;
N_SetColor: TMenuItem;
ColorDialog1: TColorDialog;
N_Font: TMenuItem;
FontDialog1: TFontDialog;
Label1: TLabel;
Label2: TLabel;
BitBtn3: TBitBtn;
N_exit: TMenuItem;
N4: TMenuItem;
BitBtn4: TBitBtn;
BitBtn5: TBitBtn;
BitBtn6: TBitBtn;//таблица входных данных
procedure ED_SKeyPress(Sender: TObject; var Key: Char);
procedure N_SaveClick(Sender: TObject);
procedure N_loadClick(Sender: TObject);
function B_ZapolnClick(Sender: TObject):boolean;
procedure BitBtn1Click(Sender: TObject);
procedure NewProjectClick(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure ToolButton3Click(Sender: TObject);
procedure N_NewClick(Sender: TObject);
procedure N2Click(Sender: TObject);
procedure BitBtn2Click(Sender: TObject);
procedure SG_Tabl_inputKeyPress(Sender: TObject; var Key: Char);
procedure N_SetColorClick(Sender: TObject);
procedure N_FontClick(Sender: TObject);
procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
procedure BitBtn3Click(Sender: TObject);
procedure N_exitClick(Sender: TObject);
procedure N4Click(Sender: TObject);
procedure BitBtn4Click(Sender: TObject);
procedure BitBtn5Click(Sender: TObject);
procedure BitBtn6Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form_Main: TForm_Main;
ProgramWay: string;
procedure EnterData(FromFile: boolean;
n: integer = 0;
P: boolean = false;
S: boolean = false;
sNam: string ='');
procedure OpenProject (PFile: string);
procedure ResizeProject (n: integer; P: boolean; S: boolean);
implementation
{$R *.dfm}
uses
variable, Enter_setting, view_result, UnitOpenProject, functions, Help;
var
Mash : Tcar;
DirProject, NameProject : string;
procedure OpenProject (PFile: string);
begin
NameProject := PFile;
if Mash <> nil then
begin
//MessageBox(
//ShowMessage('Вы действительно хотите открыть новый проект');
//exit;
end;
mash := Tcar.create;
if mash.LoadFromFile(NameProject) then
begin
EnterData(true);
end
else
begin
Mash.Destroy;
Mash := nil;
end;
end;
procedure SetPanel;
var
i : integer;
begin
with Form_Main do
begin
P_In_data.Visible := true;
SG_Tabl_input.ColCount := Mash.n + 2;
SG_Tabl_input.RowCount := 3;
Ed_p.Visible := false;
Ed_s.Visible := false;
Panel2.Visible := false;
for i := 1 to Mash.n + 1 do
SG_Tabl_input.Cells[i, 0]:= IntToStr(i - 1);
SG_Tabl_input.Cells[0, 1]:='Z(t)';
SG_Tabl_input.Cells[0, 2]:='U(t)';
if Mash.PConst then
Ed_p.Visible := true
else
begin
SG_Tabl_input.RowCount := SG_Tabl_input.RowCount + 1;
SG_Tabl_input.Cells[0,SG_Tabl_
end;
if Mash.SConst then
Ed_s.Visible := true
else
begin
SG_Tabl_input.RowCount := SG_Tabl_input.RowCount + 1;
SG_Tabl_input.Cells[0,SG_Tabl_
end;
SG_Tabl_input.Height := SG_Tabl_input.DefaultRowHeight *
(SG_Tabl_input.RowCount + 1);
end;
end;
procedure ResizeProject (n: integer; P: boolean; S: boolean);
begin
Mash := Tcar.create(n, P, S);
setPanel;
end;
procedure EnterData(FromFile: boolean;
n: integer = 0;
P: boolean = false;
S: boolean = false;
sNam: string = '');
var
i: integer;
begin
if FromFile then
begin
setPanel;
with Form_Main do
begin
for I := 0 to mash.n do
begin
SG_Tabl_input.Cells[i+1,1] := FloatToStr(Mash.z[i]);
SG_Tabl_input.Cells[i+1,2] := FloatToStr(Mash.u[i]);
end;//for I := 0 to mash.n do
if Mash.PConst then
Ed_p.Text := FloatToStr(Mash.p[0])
else
for I := 0 to mash.n do
SG_Tabl_input.Cells[i+1,3] := FloatToStr(Mash.p[i]);
if Mash.SConst then
Ed_S.Text := FloatToStr(Mash.s[0])
else
for I := 0 to mash.n do
if Mash.PConst then
SG_Tabl_input.Cells[i+1,3] := FloatToStr(Mash.s[i])
else
SG_Tabl_input.Cells[i+1,4] := FloatToStr(Mash.s[i]);
end;//with Form_Main do
end
else
begin
Mash := Tcar.create(n, P, S);
setPanel;
NameProject := dirProject + sNam;
end;
end;
procedure TForm_Main.BitBtn1Click(
begin
OpenFileProject;
end;
procedure TForm_Main.BitBtn2Click(
begin
NewProjectClick(Sender);
end;
procedure TForm_Main.BitBtn3Click(
begin
close;
end;
procedure TForm_Main.BitBtn4Click(
begin
//изменить настройки проекта
SetProject(NameFile(
end;
procedure TForm_Main.BitBtn5Click(
begin
if mash = nil then
begin
ShowMessage('Вы не создали или не открыли проект');
exit;
end;
mash := TCar.create(SG_Tabl_input.
if B_ZapolnClick(sender) then
begin
mash.decision;
mash.SaveToHTML(NameProject);
OpenOtchet(NameProject);
end;
end;
procedure TForm_Main.BitBtn6Click(
begin
close;
end;
function TForm_Main.B_ZapolnClick(
var
i, j: Integer;
begin
for i := 1 to SG_Tabl_input.RowCount - 1 do
begin
for j := 1 to SG_Tabl_input.ColCount - 1 do
if SG_Tabl_input.Cells[j, i] = '' then
begin
result := false;
showMessage('Не заполнены все поля');
exit;
end;
end;
for i := 1 to SG_Tabl_input.ColCount - 1 do
begin
mash.z[i - 1] := StrToFloat(SG_Tabl_input.
Mash.u[i - 1] := StrToFloat(SG_Tabl_input.
end;
if mash.PConst then
mash.p[0] := StrToFloat(Ed_p.Text)
else
for i := 1 to SG_Tabl_input.ColCount - 1 do
begin
mash.P[i - 1] := StrToFloat(SG_Tabl_input.
end;
if mash.SConst then
mash.s[0] := StrToFloat(Ed_s.Text)
else
if mash.PConst then
for I := 1 to SG_Tabl_input.ColCount - 1 do
mash.s[i
- 1] := StrToFloat(SG_Tabl_input.
else
for I := 1 to SG_Tabl_input.ColCount - 1 do
mash.s[i
- 1] := StrToFloat(SG_Tabl_input.
if Mash.test_data then
result := true
//ShowMessage('данные верны')
else
begin
ShowMessage('данные не верны');
result := false;
end;
end;
procedure TForm_Main.ED_SKeyPress(
begin
if ((#46 = key) or ('.' = key)) and (pos(',', ED_S.Text) > 0) then
key := #0;
if #46 = key then
key := ',';
if not(('0' <= key) and (key <= '9') or (key = #8) or (',' = key)) then
key := #0;
end;
procedure TForm_Main.FormCloseQuery(
var
varin : variant;
begin
if mash <> nil then
begin
varin := messageBox(Handle,'Сохранить
проект перед выходом?','Выход'
mb_YesNoCancel or mb_iconquestion);
if varin = mrYes then
N_SaveClick(Sender);
if varin = mrNo then
CanClose := true;
if varin = mrCancel then
CanClose := false;
end;
end;
procedure TForm_Main.FormCreate(Sender: TObject);
begin
NameProject := '';
ProgramWay := DirInit(ParamStr(0));
DirProject := ProgramWay + ProjectFolder;
mash := nil;
panel2.Top := (Form_Main.Height div 2) - (panel2.Height div 2);
panel2.Left := (Width div 2) + (panel2.Width div 2) - 150;
RE_Help.Lines.LoadFromFile('
end;
procedure TForm_Main.N_exitClick(Sender: TObject);
begin
Close;
end;
procedure TForm_Main.N_FontClick(Sender: TObject);
begin
if Fontdialog1.Execute then
Font := Fontdialog1.Font;
end;
procedure TForm_Main.N_loadClick(Sender: TObject);
{загрузка данных из файла}
begin
if Mash <> nil then
begin
//MessageBox(
//ShowMessage('Вы действительно хотите открыть новый проект');
//exit;
end;
mash := Tcar.create;
if OD_file.Execute then
begin
ShowMessage(DeleteExtension(
NameProject := DeleteExtension(OD_file.
DirProject := DirInit(Od_file.FileName);
end
else
exit;
if mash.LoadFromFile(NameProject) then
begin
EnterData(true);
end
else
begin
freeandnil(Mash);//
end;
end;
procedure TForm_Main.N_NewClick(Sender: TObject);
{создать проект}
begin
newElem;
end;
procedure TForm_Main.N_SaveClick(Sender: TObject);
{сохранение данных}
begin
if mash = nil then
ShowMessage('Не создан проект')
else
if B_ZapolnClick(sender) then
Mash.SaveToFile( NameProject);
end;
procedure TForm_Main.N_SetColorClick(
begin
if ColorDialog1.Execute then
color := ColorDialog1.Color;
end;
procedure TForm_Main.SG_Tabl_
var
I, flag: Integer;
str: string;
begin
ED_SKeyPress(sender, key);
if key = '.' then
key := ',';
if key = ',' then
begin
str := SG_Tabl_input.Cells[SG_Tabl_
flag := 0;
for I := 0 to length(str) do
if str[i] = ',' then
inc(flag);
if flag > 0 then
key := #0;
end;
end;
procedure TForm_Main.ToolButton3Click(
begin
OpenFileProject;
end;
procedure TForm_Main.N2Click(Sender: TObject);
//окно открытия проекта
begin
FormOpenProjects.ShowModal;
end;
procedure TForm_Main.N4Click(Sender: TObject);
//открытие справки
begin
help.Form1.ShowModal;
end;
procedure TForm_Main.NewProjectClick(
//Создание нового проекта
begin
if mash <> nil then
begin
Mash := nil;
P_In_data.Visible := false;
end;
newElem;
end;
end.
Модуль создания и изменение параметров проекта. Модуль выполняет функцию, ввод настроек проекта (длину планового периода, имя проекта, изменяется или нет остаточная стоимость и цена новой машины).
unit Enter_setting;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, functions, ComCtrls;
type
TForm_enter = class(TForm)
Ed_n: TEdit;
But_set: TButton;
CheckSconst: TCheckBox;
CheckPconst: TCheckBox;
Ed_patch: TEdit;
Label1: TLabel;
Label2: TLabel;
UpDown1: TUpDown;
B_resize: TButton;
procedure But_setClick(Sender: TObject);
procedure Ed_nKeyPress(Sender: TObject; var Key: Char);
procedure UpDown1Click(Sender: TObject; Button: TUDBtnType);
procedure FormActivate(Sender: TObject);
procedure Ed_patchKeyPress(Sender: TObject; var Key: Char);
procedure B_resizeClick(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form_enter: TForm_enter;
procedure SetProject(s:string; n:integer; pCon,sCon:boolean);
procedure newElem;
implementation
{$R *.dfm}
uses
Main;
procedure newElem;
begin
Form_enter.Ed_Patch.Enabled := true;
Form_enter.ShowModal;
end;
procedure SetProject(s:string; n:integer; pCon,sCon:boolean);
begin
Form_enter.Ed_Patch.Enabled := false;
Form_enter.Ed_Patch.Text := s;
Form_enter.But_set.Visible := false;
Form_enter.B_resize.Visible := true;
Form_enter.Ed_n.Text := IntToStr(n);
Form_enter.UpDown1.Position := n;
Form_enter.CheckPconst.Checked := pCon;
Form_enter.CheckSconst.Checked := sCon;
Form_enter.ShowModal;
end;
procedure TForm_enter.B_resizeClick(
var
n: integer;
begin
Form_enter.But_set.Visible := true;
Form_enter.B_resize.Visible := false;
n := StrToInt(Ed_n.Text);
if n > 0 then
begin
ResizeProject (n, CheckPconst.Checked, CheckSconst.Checked);
Form_enter.Ed_Patch.Enabled := true;
close;
end
else
ShowMessage('вы не правильно ввели' +
'длину плановуого периода');
end;
procedure TForm_enter.But_setClick(
var
n, i: integer;
begin
if Trim(Ed_patch.Text) = '' then
begin
ShowMessage('Вы не ввели имя проекта'+ #10 + #13 +
' Пожалуйста введите имя');
Ed_patch.SetFocus;
exit;
end;
n := StrToInt(Ed_n.Text);
if n > 0 then
begin
for i:=0
to main.Form_Main.SG_Tabl_input.
main.Form_Main.SG_Tabl_input.
EnterData(false, n, CheckPconst.Checked, CheckSconst.Checked,
Ed_Patch.Text);
end
else
ShowMessage('вы не правильно ввели' +
'длину плановуого периода');
close;
end;
procedure TForm_enter.Ed_nKeyPress(
begin
if not(('0' <= key) and (key <= '9') or (key = #8)) then
key := #0;
end;
procedure TForm_enter.Ed_patchKeyPress(
begin
if key = '.' then
key := #0;
end;
procedure TForm_enter.FormActivate(
begin
UpDown1.Position := StrToInt(ED_n.Text);
end;
procedure TForm_enter.UpDown1Click(
begin
ED_n.Text := IntToStr(UpDown1.Position);
end;
end.
Модуль открытия нового проекта. Этот модуль выводит пользователю все существующие проекты франящиеся в папке с программой для выбора пользователя проекта для открытия
unit UnitOpenProject;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Buttons;
type
TFormOpenProjects = class(TForm)
LB_File: TListBox;
B_open: TButton;
BitBtn1: TBitBtn;
B_new: TButton;
procedure FormActivate(Sender: TObject);
procedure FormCanResize(Sender: TObject; var NewWidth, NewHeight: Integer;
var Resize: Boolean);
procedure LB_FileDblClick(Sender: TObject);
procedure B_openClick(Sender: TObject);
procedure B_newClick(Sender: TObject);
procedure BitBtn1Click(Sender: TObject);
procedure LB_FileKeyPress(Sender: TObject; var Key: Char);
private
{ Private declarations }
public
{ Public declarations }
end;
var
FormOpenProjects: TFormOpenProjects;
procedure OpenFileProject ();
implementation
{$R *.dfm}
uses
Functions, variable, main;
var
dir : string;
procedure OpenFileProject ();
begin
FormOpenProjects.ShowModal;
FormOpenProjects.B_new.Visible := false;
FormOpenProjects.LB_File.
FormOpenProjects.B_open.
//FormOpenProjects.Visible := true;
end;
procedure ListFileDir(Path: string; FileList: TStrings);
var
SR: TSearchRec;
begin
if FindFirst(Path + '*.bin', faAnyFile, SR) = 0 then
begin
repeat
if (SR.Attr <> faDirectory) then
begin
FileList.Add(copy(SR.Name,0,
end;
until FindNext(SR) <> 0;
FindClose(SR);
end;
end;
procedure TFormOpenProjects.
begin
//main.Form_Main.Destroy;
close;
end;
procedure TFormOpenProjects.B_newClick(
begin
Form_Main.N_NewClick(sender);
close;
end;
procedure TFormOpenProjects.B_openClick(
begin
LB_file.Visible := true;
B_new.Visible := false
end;
procedure TFormOpenProjects.
begin
LB_File.Clear;
dir := DirInit(ParamStr(0))+
ListFileDir(Dir, LB_File.Items);
end;
procedure TFormOpenProjects.
NewHeight: Integer; var Resize: Boolean);
begin
resize := false;
end;
procedure TFormOpenProjects.LB_
begin
if LB_File.ItemIndex = -1 then

- Задача о максимальном потоке. Алгоритм Форда. Теорема Форда-Фалкерсона
- Задача о минимизации стоимости перегона транспортных средств
- Задача о назначении. Метод Вогеля. Венгерский метод
- Задача о назначениях
- Задача о назначениях
- Задача о назначениях
- Задача о назначениях
- Задача коммивояжора
- Задача линейного программирования
- Задача линейного программирования: нахождение оптимального плана
- Задача линейного программирования (симплекс-метод)
- Задача нахождения кратчайшего пути
- Задача об использовании сырья
- Задача о замене оборудования