unit Class_Form1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Spin, Grids,
Class_Lin_Obmezh, ExtCtrls;
type
TIVector=array of integer;
TSVector=array of String;
Matrix=array of TIVector;
TForm1 = class(TForm)
StringGrid1: TStringGrid;
SpinEdit1: TSpinEdit;
SpinEdit2: TSpinEdit;
Label1: TLabel;
Label2: TLabel;
Button1: TButton;
Button2: TButton;
Button3: TButton;
RadioGroup1: TRadioGroup;
StringGrid2: TStringGrid;
Label3: TLabel;
Memo1: TMemo;
Button4: TButton;
OpenDialog1: TOpenDialog;
SaveDialog1: TSaveDialog;
Button5: TButton;
Button6: TButton;
Button7: TButton;
procedure SpinEdit1Change(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure SpinEdit2Change(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure Button3Click(Sender: TObject);
procedure RadioGroup1Click(Sender: TObject);
procedure Button4Click(Sender: TObject);
procedure Button5Click(Sender: TObject);
procedure Button6Click(Sender: TObject);
procedure FormClose(Sender: TObject);
procedure Button7Click(Sender: TObject);
function IsEmpty1(Sender: TObject):boolean;
function IsEmpty2(Sender: TObject):boolean;
end;
var
Form1: TForm1;
SLO_1:SLO;
implementation
{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject);
begin
StringGrid1.ColCount:=3;
StringGrid1.RowCount:=2;
StringGrid1.Cells[0,0]:='a1';
StringGrid1.Cells[1,0]:='=,<=,>=';
StringGrid1.Cells[2,0]:='Limit';
StringGrid2.Cells[0,0]:='x1';
end;
procedure TForm1.FormClose(Sender: TObject);
begin
SLO_1.Free;
end;
//-----------------IsEmpty1,2------------------------------
Function TForm1.IsEmpty1(Sender: TObject):boolean;
|
|
begin
result:=StringGrid1.Cells[0,1]='';
end;
Function TForm1.IsEmpty2(Sender: TObject):boolean;
begin
result:=StringGrid2.Cells[0,1]='';
end;
//-----------------Button_Exit-----------------------------
procedure TForm1.Button1Click(Sender: TObject);
begin
Close;
end;
//-----------------Ввід к-сті елементів ЛО та к-сті ЛО-----
procedure TForm1.SpinEdit1Change(Sender: TObject);
var
n,i,j:byte;
begin
Button2.Enabled:=True;
N:=SpinEdit1.Value;
StringGrid1.ColCount:=n+2;
StringGrid2.ColCount:=n;
for i:=0 to SpinEdit1.Value do
for j:=1 to SpinEdit2.Value do
begin
StringGrid1.Cells[i,j]:='';
StringGrid2.Cells[i,j]:='';
end;
for i:=0 to n-1 do
begin
StringGrid1.Cells[i,0]:='a'+IntToStr(i+1);
StringGrid2.Cells[i,0]:='x'+IntToStr(i+1);
end;
StringGrid1.Cells[n,0]:='=,<=,>=';
StringGrid1.Cells[n+1,0]:='Limit';
RadioGroup1Click(Sender);
end;
procedure TForm1.SpinEdit2Change(Sender: TObject);
var
n:byte;
begin
Button2.Enabled:=True;
N:=SpinEdit2.Value;
StringGrid1.RowCount:=n+1;
RadioGroup1Click(Sender);
end;
//-----------------Button Reset----------------------------
procedure TForm1.Button2Click(Sender: TObject);
var
i,j:integer;
begin
SpinEdit1.Value:=1;
SpinEdit2.Value:=1;
StringGrid1.ColCount:=3;
StringGrid1.RowCount:=2;
RadioGroup1.ItemIndex:=0;
for i:=0 to 2 do
for j:=1 to 1 do
StringGrid1.Cells[i,j]:='';
for i:=Memo1.Lines.Count downto 0 do
Memo1.Lines.Delete(i);
StringGrid1.Cells[0,1]:='';
Button2.Enabled:=False;
if SLO_1<>nil then
begin
SLO_1.Free;
SLO_1:=nil;
end;
end;
//-----------------Вибір способу вводу---------------------
procedure TForm1.RadioGroup1Click(Sender: TObject);
var
i,j,k:byte;
begin
randomize;
if RadioGroup1.ItemIndex=1 then
begin
for i:=0 to StringGrid1.ColCount-3 do
for j:=1 to StringGrid1.RowCount-1 do
StringGrid1.Cells[i,j]:=IntToStr(random(10)-5);
for i:=1 to StringGrid1.RowCount-1 do
begin
StringGrid1.Cells[SpinEdit1.Value+1,i]:=IntToStr(random(10));
k:=random(3);
if k=0 then
StringGrid1.Cells[SpinEdit1.Value,i]:='<='
else
if k=1 then
StringGrid1.Cells[SpinEdit1.Value,i]:='>='
else
if k=2 then
StringGrid1.Cells[SpinEdit1.Value,i]:='='
end;
end
else
for i:=0 to StringGrid1.ColCount-1 do
for j:=1 to StringGrid1.RowCount-1 do
StringGrid1.Cells[i,j]:='';
end;
//-----------------Вивід ЛО в Memo та стврення класу-------
procedure TForm1.Button3Click(Sender: TObject);
var
i:integer;
begin
if SLO_1<>nil then
begin
SLO_1.Free;
SLO_1:=nil;
end;
for i:=Memo1.Lines.Count downto 0 do
Memo1.Lines.Delete(i);
if IsEmpty1(Sender) then
begin
|
|
ShowMessage('Заповніть таблицю значень');
exit;
end;
SLO_1:=SLO.Create(SpinEdit2.Value);
//-----------------
SLO_1.Set_Sys(StringGrid1);
//-----------------
for i:=0 to high(SLO_1.Into_text) do
Memo1.Lines.Add(SLO_1.Into_text[i]);
end;
//-----------------Button Check Solution-------------------
procedure TForm1.Button4Click(Sender: TObject);
begin
if IsEmpty1(Sender) then
begin
ShowMessage('Заповніть таблицю значень');
exit;
end;
if IsEmpty2(Sender) then
begin
ShowMessage('Не введено жодного можливого розв`язку в таблицю!');
exit;
end;
Button3Click(Sender);
if SLO_1.Check(StringGrid2) then
ShowMessage('Даний розв`язок задовольняє системі лінійних обмежень')
else
ShowMessage('Даний розв`язок HE задовольняє системі лінійних обмежень');
if SLO_1<>nil then
begin
SLO_1.Free;
SLO_1:=nil;
end;
end;
//-----------------Button Open-----------------------------
procedure TForm1.Button5Click(Sender: TObject);
var
F:TextFile;
temp_FName,Str,temp_Str:string;
kilkist_Lo,kilkist_zminnuh,i,j,k:Integer;
begin
if OpenDialog1.Execute then
begin
Button2Click(Sender);
temp_FName:=Opendialog1.FileName;
AssignFile(F,temp_FName);
Reset(F);
readln(F,kilkist_Lo);
readln(F,kilkist_zminnuh);
SpinEdit2.Value:=kilkist_Lo;
SpinEdit1.Value:=kilkist_zminnuh;
//-----------------
for i:=1 to kilkist_Lo do
begin
readln(F,Str);
k:=1;
temp_Str:='';
for j:=1 to length(Str) do
if Str[j]=' ' then
begin
StringGrid1.Cells[k-1,i]:=temp_Str;
temp_Str:='';
k:=k+1;
end
else
temp_Str:=temp_Str+Str[j];
end;
//-----------------
for i:=1 to kilkist_Lo do
begin
Readln(F,Str);
StringGrid1.Cells[kilkist_zminnuh,i]:=Str;
end;
//-----------------
for i:=1 to kilkist_Lo do
begin
Readln(F,Str);
StringGrid1.Cells[kilkist_zminnuh+1,i]:=Str;
end;
//-----------------
CloseFile(F);
end;
end;
//-----------------Button Save-----------------------------
procedure TForm1.Button6Click(Sender: TObject);
var
F:TextFile;
temp_FName:string;
i:byte;
begin
if IsEmpty1(Sender) then
begin
ShowMessage('Заповніть таблицю значень');
exit;
end
else
begin
Button3Click(Sender);
if SaveDialog1.Execute then
begin
temp_FName:=Savedialog1.FileName;
AssignFile(F,temp_FName);
Rewrite(F);
writeln(F,IntToStr(SpinEdit2.Value));
writeln(F,IntToStr(SpinEdit1.Value));
for i:=0 to high(SLO_1.Get_SLO) do
writeln(F,SLO_1.Get_SLO[i].Get_koef_String);
for i:=0 to high(SLO_1.Get_SLO) do
writeln(F,SLO_1.Get_SLO[i].Znak);
for i:=0 to high(SLO_1.Get_SLO) do
writeln(F,IntToStr(SLO_1.Get_SLO[i].Lim));
CloseFile(F);
end;
end;
end;
//-----------------Button Sort Lo--------------------------
procedure TForm1.Button7Click(Sender: TObject);
var
i:byte;
begin
Button3Click(Sender);
if IsEmpty1(Sender) then
exit;
Memo1.Lines.Add('');
SLO_1.Sort_SLO;
for i:=0 to high(SLO_1.Into_text) do
Memo1.Lines.Add(SLO_1.Into_text[i]);
if SLO_1<>nil then
begin
SLO_1.Free;
SLO_1:=nil;
end;
end;
end.