Программа поиска соединительного пути в 3-звенной КС. Алгоритм решения программы. Анализ полученных результатов, страница 5

end;

{Реакция на нажатие кнопки «Очистить»}

procedure TForm1.SpeedButton3Click(Sender: TObject);

var i,j:byte;

R:TGridRect;

begin

R.Left:=1;R.Top:=1;R.Right:=4;R.Bottom:=4; {Закрашиваем таблицы}

T1.Selection:=R;

T2.Selection:=R;

T3.Selection:=R;

Num:=0;  {Номер эксперимента =0}

for i:=1 to 4 do  {очищаем таблицы}

for j:=1 to 4 do

begin

T1.Cells[i,j]:='';

T2.Cells[i,j]:='';

T3.Cells[i,j]:='';

end;

for i:=1 to 10 do

for j:=0 to 1 do

begin

SG1.Cells[i,j]:='';

SG2.Cells[i,j]:='';

end;

SpeedButton2.Enabled:=false; {Активируем и деактивируем кнопки}

SpeedButton1.Enabled:=true;

SpeedButton3.Enabled:=false;

Speedbutton4.Enabled:=false;

Speedbutton5.Enabled:=false;

Speedbutton7.Enabled:=false; 

end;

{реакция на «Задать АК»}

procedure TForm1.SpeedButton2Click(Sender: TObject);

var Yes:boolean;

i:byte;

R:TGridRect;

begin

R.Left:=1;R.Top:=1;R.Right:=4;R.Bottom:=4;

T1.Selection:=R;

T2.Selection:=R;

T3.Selection:=R;

inc(Num); {Номер эксперимента = +1}

randomize;

Yes:=false;

Repeat        {проверяем на наличие свободных АК}

k:=random(4);

for i:=0 to 3 do

if a[1,i,k]=1 then

Yes:=true;

until Yes=true;

AK:=random(4)+k*4; {Задаём АК }

H:=random(4);      {Задаём путь}

SG1.Cells[Num,0]:=inttostr(AK);

SG1.Cells[Num,1]:=inttostr(H);

Rashchet;   {вызываем процедуру расчета}

if Num=8 then Speedbutton2.Enabled:=false;  {деактивируем кнопку}

end;

{Реакция на «Графич. Пр.» }

procedure TForm1.SpeedButton5Click(Sender: TObject);

var R,R1:TRect;

begin

form1.Enabled:=false;   {Запрещаем форму 1 и рисуем путь на форме 2}

R1:=Rect((AK mod 4)*20,0,(AK mod 4)*20+20,55);

case AK div 4 of

0:form2.Image3.Top:=20;

1:form2.Image3.Top:=77;

2:form2.Image3.Top:=135;

3:form2.Image3.Top:=192;

end;

R:=Rect(0,0,20,55);

form2.Image3.Canvas.CopyRect(R,form2.Image2.Canvas,R1);

R1:=Rect(H*67,0,H*67+67,58);

R:=Rect(0,0,67,58);

form2.Image5.Canvas.CopyRect(R,form2.Image4.Canvas,R1);

case E of

0:form2.Image5.Top:=9;

1:form2.Image5.Top:=66;

2:form2.Image5.Top:=124;

3:form2.Image5.Top:=181;

end;

R:=Rect(0,0,79,231);

R1:=Rect((k*4+kom1)*79,0,(k*4+kom1)*79+79,231);

form2.Image7.Canvas.CopyRect(R,form2.Image6.Canvas,R1);

R1:=Rect(kom2*79,0,kom2*79+79,231);

form2.Image8.Canvas.CopyRect(R,form2.Image6.Canvas,R1);

form2.show;   {выводим форму 2 на экран}

end;

{реакция на «Выделить маршрут»}

procedure TForm1.SpeedButton7Click(Sender: TObject);

var GO:TGridRect;

begin  {Выделяем пройденные точки в таблицах}

GO.Left:=kom1+1;GO.Top:=k+1;GO.Right:=kom1+1;GO.Bottom:=k+1;

T1.Selection:=GO;

GO.Left:=kom1+1;GO.Top:=E+1;GO.Right:=kom1+1;GO.Bottom:=E+1;

T2.Selection:=GO;

GO.Left:=H+1;GO.Top:=E+1;GO.Right:=H+1;GO.Bottom:=E+1;

T3.Selection:=GO;

speedbutton7.Enabled:=false;

end;

{ Р. На «Занулить»}

procedure TForm1.SpeedButton4Click(Sender: TObject);

begin

a[1,kom1,k]:=0;     {Зануляем}

a[2,kom1,E]:=0;

a[3,H,E]:=0;

T1.Cells[kom1+1,k+1]:='0';

T2.Cells[kom1+1,E+1]:='0';

T3.Cells[H+1,E+1]:='0';

Speedbutton4.Enabled:=false;

end;

end.

{Модуль Unit2}

unit Unit2;

interface

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

Dialogs, ExtCtrls, ImgList;

type

TForm2 = class(TForm)

Image1: TImage;

Image2: TImage;

Image3: TImage;

Image4: TImage;

Image5: TImage;

Image6: TImage;

Image7: TImage;

Image8: TImage;

procedure FormClose(Sender: TObject; var Action: TCloseAction);

private

{ Private declarations }

public

{ Public declarations }

end;

var

Form2: TForm2;

implementation

uses Unit1;

{$R *.dfm}

procedure TForm2.FormClose(Sender: TObject; var Action: TCloseAction);

begin

form1.enabled:=true; {при закрытии формы 2 активируем форму 1}

end;

end.