Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ООП_самостійне_опрацюв.doc
Скачиваний:
1
Добавлен:
01.04.2025
Размер:
1.22 Mб
Скачать

Значення властивостей компоненту stringGrid1

Властивість

Значення

Name

StringGrid1

ColCount

11

RowCount

11

FixedCols

1

FixedRows

1

Options . goEditing

TRUE

DefaultColWidth

16

DefaultRowHeight

14

Текст програми приведений в лістингу.

Лістинг. Пошук маршруту

unit road_;

interface|

uses|

Windows|, Messages|, SysUtils|, Classes|

Graphics|, Controls|, Forms|

Dialogs|, StdCtrls|, Grids|;

type|

TForml = class(TForm)

StringGridl|: TStringGrid|;

Edit1|: TEdit|;

Edit2|: TEdit|;

Label1|: TLabel|;

Label2|: TLabel|;

Label3|: TLabel|;

Button1|: TButton|;

Label4|: TLabel|;

procedure FormActivate(Sender: TObject);

procedure ButtonlClickfSender: TObject);

private|

{ Private declarations } public

{ Public declarations } end;

var|

Form1|: TForm1|;

implementation|

{$R *.DFM}

procedure TForml.FormActivate(Sender: TObject);

var|

i:integer|; begin|

// нумерація рядків

for i:=1 to 10 do

StringGridl|.Cells[0,i|]:=IntToStr(i); // нумерація колонок

for| i:=l| to| 10 do|

StringGridl|.Cells[1,0]:=IntToStr(i);

// опис зумовленої карти StringGridl|.Cells[1,2]:='1' StringGridl|.Cells[2,l|]:='1'

StringGridl|.Cells[1,3]:='1'

StringGridl|.Cells[3,1]:='1'

StringGridl|.Cells[1,4]:='1'

StringGridl|.Cells[4,1]:='1'

StringGridl|.Cells[3,7]:='1'

StringGridl|.Cells[7,3]:='1'

StringGridl|.Cells[4,6]:='1'

StringGridl|.Cells[6,4]:='1'

StringGridl|.Cells[5,6]:='1'

StringGridl|.Cells[6,5]:='1'

StringGridl|.Cells[5,7]:='1'

StringGridl|.Cells[7,5]:='1'

StringGridl|.Cells[6,7]:='1'

StringGridl|.Cells[7,6]:='1'

end|;

procedure| TForml|.ButtonlClick(Sender|: TObject|);

const|

N=10|;// к-ть вершин графа var|

map:array|[1..N,1..N]of| integer|; // Карта.map[i,j|]ne| 0

// якщо точки i і j сполучені|з'єднані|

road:array|[1..N]of| integer|;

// Дорога|люба| - номери точок карти

incl:array|[1..N]of| boolean|; // incl|[1]рівний TRUE|, якщо крапка|точка|

// з|із| номером i включена в road|

start,finish:integer|; // Початкова і кінцева|скінченна| точки

found:boolean|; i,j:integer|;

procedure| step|(s,f,p:integer|);

var|

с:integer|;// Номер крапки|точки|, в яку робимо|чинимо| черговий крок

i:integer|;

begin|

if s=f then begin

// Точки s і f збіглися !

found:=TRUE|;

Labell|.caption:=Labell.caption+#13+'Путь:';

for| i:=l| to| p-1| do|

Labell|.caption:=Labell.caption+' '

+IntToStr(road[i]); end

else| begin|

// вибираємо чергову точку for c:=l to N do

begin // перевіряємо всі вершини

if(map[s,c]<> 0)and(NOT incite1)

// крапка|точка| сполучена|з'єднана| з|із| поточною і не включена в маршрут

then| begin|

road|[p]:=c;// додамо|добавлятимемо| вершину в шлях|колію|

incl|[c]:=TRUE;// помітимо|позначимо| вершину як включену

step|(с,f,p+l|); incite|]:=FALSE; road|[p]:=0;

end|;

end|;

end|;

end;// кінець процедури step

begin|

Label1|.caption: =' ' ;

// ініціалізація масивів

for| i:=l| to| N do| road|[i]:=0;

for| i:=l| to| N do| incl|[i]:=FALSE;

// введення опису карти з|із| SrtingGrid|.Cells

for i:=l to N do

for j:=1 to N do

if StringGrid1.Cells[i,j] <> ''

then map[i,j]:=StrToInt(StringGridl.Cells[i, j] ;

else map[i,j]:=0;

start:=StrToInt|(Editl|.text);

finish:=StrToInt|(Edit2|.text);

road|[l]:=start;// внесемо крапку|точку| до маршруту

incl|[start|]:=TRUE;// помітимо|позначимо| її як включену

step|(start,finish,2|);//шукаємо другу точку маршруту

// перевіримо, чи знайдений хоч би|хоча би| один шлях|колія|

if not found

then Labell.caption:='Вказані крапки не сполучені!';

end|;

end|.

При запуску програми у момент активізації форми додатку|застосування| відбувається|походить| подія onActivate|, процедура обробки якого заповнює масив StringGridl|.cells значеннями, що представляють|уявляють| опис карти. Поверсі процедура нумерує рядки і стовпці таблиці, заповнюючи зафіксовані осередки|чарунок| першого стовпця і першого рядка StringGridl|.

Пошук маршруту ініціює процедура TForm1.Button1click, яка запускається клацанням на кнопці Пошук. Дана процедура для пошуку крапки, сполученої з початковою точкою, викликає процедуру step, яка після вибору першої крапки, сполученої з початковою, і включення її в маршрут викликає сама себе. При цьому як початкова точка задається вже не початкова, а поточна, тільки що включена в маршрут.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]