
- •Министерство образования и науки Республики Беларусь
- •1 Описание программы
- •Общие сведения
- •1.2 Функциональное назначение программы
- •1.3 Описание логической структуры программы
- •1.4 Используемые программные средства
- •1.5 Вызов программы
- •1.6 Входные данные
- •1.7 Выходные данные
- •2 Руководство пользователю
- •2.1 Назначение программы
- •2.2 Условия выполнения программы
- •2.3Выполнение программы
- •2.4 Сообщения оператору
- •Список использованных источников
- •Приложение 1 Блок-схема
- •Приложение 2 Текст программы:
2.4 Сообщения оператору
В ходе работы с программой пользователю необходимо ввести исходные данные.
Исходными данными являются:
1. события, переходы, ребра (рис.2.1);
2. количество маркеров на событиях, вес ребер (рис.2.1);
Рисунок 2.1: Ввод данных в окно программы
«Курсовой проект по теме ”Простые сети Петри”».
Результатом работы программы является вывод на экран путь прохождения маркера (ов) по сети:(рис2.1.);
Рисунок 2.2: Вывод решения в окне программы
« Курсовой проект по теме ”Простые сети Петри ”».
Программа оснащена системой вызова помощи и руководств, благодаря которым работать с программой может даже неподготовленный пользователь.
Вывод
В результате выполнения курсовой работы была изучена одна из задач моделирования и управления – временные сети Петри, которая помогает при решении задач функциональной спецификации и верификации программного обеспечения, организации вычислительных процессов и т.д. Предложенный алгоритм реализован в виде программы, написанной на языке Delphi5.0. Программа имеет высокое быстродействие, при этом требует минимальных вычислительных ресурсов:
IBM-совместимый компьютер, оснащенный мышью;
Оперативная память - 8 Мб и не менее 1 Mbсвободного места на жестком диске;
Операционная система Windows 95и выше.
В программе создан удобный и понятный интерфейс, понятный как начинающему пользователю, так и к специалисту в области автоматизированных систем управления.
Список использованных источников
А.А. Лескин, П.А. Мальцев, А.М. Спиридонов “ Сети Петри в моделировании и управлении ”— Л.: “Наука ”, 1989.
Б.В. Никульшин, А.А. Иванчиков, О.Н.Сиверенцева “Лабораторный практикум по курсу “Основы автоматизированного управления” Мн: БГУИР, 1999.
С. Бобровский “Delphi5: учебный курс ” — СПб: Издательство ”Питер”, 2000.
М. Кэнту “ Delphi5 для профессионалов ” — СПб.: “Питер”, 2001.
Приложение 1 Блок-схема
Ввод
исходных данных
Нет
Да
Маркер
сбрасывается на переход
Нет
Да
Маркер
сбрасывается на событие
Нет
Да
Приложение 2 Текст программы:
var
Form1: TForm1;
A,B,C,N,M,E:array[0..7,0..100] of integer;
D:array[0..2,0..2] of integer;
w,i,je,jr,jl,il,j1,h,l,z,f,f1,f2,f3,kl,kk,h12,k112,l111:integer;
h112,k111,p112:string;
implementation
uses Unit2, Unit3, Unit4, Unit6, Unit5;
{$R *.DFM}
procedure TForm1.FormPaint(Sender: TObject);
var
q:integer;
begin
q:=20;
Canvas.Pen.Color:=clBlack;
while q<=1200 do begin
Canvas.MoveTo(0,q);
Canvas.LineTo(1200,q);
Canvas.MoveTo(q,0);
Canvas.LineTo(q,1200);
q:=q+20;
end;
Canvas.Brush.Color:=clRed;
Canvas.Pen.Color:=clRed;
for f:=1 to f1 do
if A[1,f]<>0 then
Canvas.Ellipse(A[1,f]-10,A[2,f]-10,A[1,f]+10,A[2,f]+10);
for f:=1 to f2 do
if B[1,f]<>0 then
Canvas.Rectangle(B[1,f]-10,B[2,f]-2,B[1,f]+10,B[2,f]+2);
for f:=1 to f3 do
if C[1,f]<>0 then begin
Canvas.MoveTo(C[1,f],C[2,f]);
Canvas.LineTo(C[3,f],C[4,f]);
end
end;
procedure TForm1.ToolButton1Click(Sender: TObject);
begin
w:=1;
end;
procedure TForm1.ToolButton2Click(Sender: TObject);
begin
w:=2;
end;
procedure TForm1.ToolButton3Click(Sender: TObject);
begin
w:=3;
end;
procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
var
x1,x2,y1,y2,k,del,k1,l1:integer;
x3,y3,x11,y11:extended;
begin
if Button=mbLeft then begin
Canvas.Brush.Color:=clRed;
Canvas.Pen.Color:=clRed;
case w of
1:
begin
x3:=int(x/10);
y3:=int(y/10);
if x3/2<>int(x3/2) then
x11:=(x3+1) else x11:=x3;
if y3/2<>int(y3/2) then
y11:=(y3+1) else y11:=y3;
x:=strtoint(floattostr(x11));
y:=strtoint(floattostr(y11));
x1:=x*10-10;
x2:=x*10+10;
y1:=y*10-10;
y2:=y*10+10;
Canvas.Ellipse(x1,y1,x2,y2);
A[1,je]:=x*10;
A[2,je]:=y*10;
je:=je+1;
f1:=f1+1;
end;
2:
begin
x3:=int(x/10);
y3:=int(y/10);
if x3/2<>int(x3/2) then
x11:=(x3+1) else x11:=x3;
if y3/2<>int(y3/2) then
y11:=(y3+1) else y11:=y3;
x:=strtoint(floattostr(x11));
y:=strtoint(floattostr(y11));
x1:=x*10-10;
x2:=x*10+10;
y1:=y*10-10;
y2:=y*10+10;
Canvas.Pen.Color:=clBtnFace;
Canvas.Brush.Color:=clBtnFace;
Canvas.Rectangle(x1,y1,x2,y2);
Canvas.Pen.Color:=clBlack;
Canvas.MoveTo(x2+10,y1+10);
Canvas.LineTo(x1-10,y1+10);
Canvas.MoveTo(x1+10,y2+10);
Canvas.LineTo(x1+10,y1-10);
x1:=x*10-10;
x2:=x*10+10;
y1:=y*10-2;
y2:=y*10+2;
Canvas.Brush.Color:=clRed;
Canvas.Pen.Color:=clRed;
Canvas.Rectangle(x1,y1,x2,y2);
B[1,jr]:=x*10;
B[2,jr]:=y*10;
jr:=jr+1;
f2:=f2+1;
end;
3:
begin
x3:=int(x/10);
y3:=int(y/10);
if x3/2<>int(x3/2) then
x11:=(x3+1) else x11:=x3;
if y3/2<>int(y3/2) then
y11:=(y3+1) else y11:=y3;
x:=strtoint(floattostr(x11));
y:=strtoint(floattostr(y11));
if j1=1 then begin
C[1,jl]:=x*10;
C[2,jl]:=y*10;
end;
if j1=2 then begin
C[3,jl]:=x*10;
C[4,jl]:=y*10;
C[6,jl]:=1;
k112:=jl
end;
D[1,j1]:=x*10;
D[2,j1]:=y*10;
if j1-1>0 then
if D[1,j1]<>0 then begin
Canvas.Brush.Color:=clRed;
Canvas.Pen.Color:=clRed;
Canvas.MoveTo(D[1,j1-1],D[2,j1-1]);
Canvas.LineTo(D[1,j1],D[2,j1]);
k1:=strtoint(floattostr(int((D[1,j1-1]+3*D[1,j1])/4)));
l1:=strtoint(floattostr(int((D[2,j1-1]+3*D[2,j1])/4)));
Canvas.Ellipse(k1-3,l1-3,k1+3,l1+3);
if j1=2 then begin
jl:=jl+1;
for il:=1 to 2 do
for j1:=1 to 2 do
D[il,j1]:=0;
j1:=0;
end;
end;
j1:=j1+1;
f3:=f3+1;
end;
4:
begin
x3:=int(x/10);
y3:=int(y/10);
if x3/2<>int(x3/2) then
x11:=(x3+1) else x11:=x3;
if y3/2<>int(y3/2) then
y11:=(y3+1) else y11:=y3;
x:=strtoint(floattostr(x11));
y:=strtoint(floattostr(y11));
if j1=1 then begin
M[1,jl]:=x*10;
M[2,jl]:=y*10;
end;
if j1=2 then begin
M[3,jl]:=x*10;
M[4,jl]:=y*10;
C[6,jl]:=1;
end;
D[1,j1]:=x*10;
D[2,j1]:=y*10;
if j1-1>0 then
if D[1,j1]<>0 then begin
for kk:=1 to 100 do
if M[1,jl]=C[1,kk] then
if M[2,jl]=C[2,kk] then
if M[3,jl]=C[3,kk] then
if M[4,jl]=C[4,kk] then begin
kl:=kk;
Canvas.Pen.Color:=clBtnFace;
Canvas.Brush.Color:=clBtnFace;
k1:=strtoint(floattostr(int((D[1,j1-1]+3*D[1,j1])/4)));
l1:=strtoint(floattostr(int((D[2,j1-1]+3*D[2,j1])/4)));
k112:=k1;
l111:=l1;
Form5.Show;
end;
if j1=2 then begin
jl:=jl+1;
for il:=1 to 2 do
for j1:=1 to 2 do
D[il,j1]:=0;
j1:=0;
end;
end;
j1:=j1+1;
end;
5:
begin
x3:=int(x/10);
y3:=int(y/10);
if x3/2<>int(x3/2) then
x11:=(x3+1) else x11:=x3;
if y3/2<>int(y3/2) then
y11:=(y3+1) else y11:=y3;
x:=strtoint(floattostr(x11));
y:=strtoint(floattostr(y11));
x1:=x*10-10;
x2:=x*10+10;
y1:=y*10-10;
y2:=y*10+10;
Canvas.Pen.Color:=clBtnFace;
Canvas.Brush.Color:=clBtnFace;
Canvas.Rectangle(x1,y1,x2,y2);
Canvas.Pen.Color:=clBlack;
Canvas.MoveTo(x2+10,y1+10);
Canvas.LineTo(x1-10,y1+10);
Canvas.MoveTo(x1+10,y2+10);
Canvas.LineTo(x1+10,y1-10);
for del:=1 to f1 do begin
if A[1,del]=x*10 then
if A[2,del]=y*10 then begin
A[1,del]:=0;
A[2,del]:=0;
A[3,del]:=0;
end;
if B[1,del]=x*10 then
if B[2,del]=y*10 then begin
B[1,del]:=0;
B[2,del]:=0;
B[3,del]:=0;
B[4,del]:=0;
end;
end;
end;
end;
end;
if Button=mbRight then
case w of
1:
begin
x3:=int(x/10);
y3:=int(y/10);
if x3/2<>int(x3/2) then
x11:=(x3+1) else x11:=x3;
if y3/2<>int(y3/2) then
y11:=(y3+1) else y11:=y3;
x:=strtoint(floattostr(x11));
y:=strtoint(floattostr(y11));
x1:=x*10;
y1:=y*10;
for h:=1 to f1 do begin
if A[1,h]=x1 then
if A[2,h]=y1 then begin
h12:=h;
Form6.Show;
end;
Canvas.Pen.Color:=clBtnFace;
Canvas.Brush.Color:=clBtnFace;
end;
end;
2:
begin
x3:=int(x/10);
y3:=int(y/10);
if x3/2<>int(x3/2) then
x11:=(x3+1) else x11:=x3;
if y3/2<>int(y3/2) then
y11:=(y3+1) else y11:=y3;
x:=strtoint(floattostr(x11));
y:=strtoint(floattostr(y11));
x1:=x*10-10;
x2:=x*10+10;
y1:=y*10-10;
y2:=y*10+10;
Canvas.Pen.Color:=clBtnFace;
Canvas.Brush.Color:=clBtnFace;
Canvas.Rectangle(x1,y1,x2,y2);
Canvas.Pen.Color:=clBlack;
Canvas.MoveTo(x2+10,y1+10);
Canvas.LineTo(x1-10,y1+10);
Canvas.MoveTo(x1+10,y2+10);
Canvas.LineTo(x1+10,y1-10);
x1:=x*10-2;
x2:=x*10+2;
y1:=y*10-10;
y2:=y*10+10;
Canvas.Brush.Color:=clRed;
Canvas.Pen.Color:=clRed;
Canvas.Rectangle(x1,y1,x2,y2);
end;
end;
end;
procedure TForm1.ToolButton5Click(Sender: TObject);
begin
w:=4;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
if Button1.Caption='Start' then Button1.Caption:='Stop'
else Button1.Caption:='Start';
Timer1.Enabled:=Not(Timer1.Enabled);
end;
procedure TForm1.Timer1Timer(Sender: TObject);
var
t,v,x1,x2,y1,y2,z,z5,z6,z7,z8,z9,z11:integer;
begin
Label1.Caption:=inttostr(strtoint(Label1.Caption)+1);
for z5:=1 to 100 do begin
for z6:=1 to 100 do begin
if C[1,z6]=A[1,z5] then begin
if C[2,z6]=A[2,z5] then begin
if C[6,z6]>A[3,z5] then begin
C[7,z6]:=2;
end;
end;
end;
end;
end;
for z6:=1 to 100 do begin
for z7:=1 to 100 do begin
if C[3,z7]=C[3,z6] then begin
if C[4,z7]=C[4,z6] then begin
if C[7,z6]=2 then begin
if C[7,z7]=0 then C[7,z7]:=1;
end;
end;
end;
end;
end;
for z8:=1 to 100 do begin
for z9:=1 to 100 do begin
if A[1,z9]=C[1,z8] then begin
if A[2,z9]=C[2,z8] then begin
if C[6,z8]<=A[3,z9] then begin
if C[7,z8]=2 then begin
C[7,z8]:=0;
for z11:=1 to 100 do begin
if C[3,z11]=C[3,z8] then begin
if C[4,z11]=C[4,z8] then begin
C[7,z11]:=0;
end;
end;
end;
end;
end;
end;
end;
end;
end;
for t:=1 to f1 do begin
if A[3,t]>=1 then begin
for v:=1 to f3 do
if C[6,v]<=A[3,t] then begin
if C[1,v]=A[1,t] then
if C[2,v]=A[2,t] then begin
if C[7,v]=0 then begin
x1:=A[1,t]-10;
x2:=A[1,t]+10;
y1:=A[2,t]-10;
y2:=A[2,t]+10;
Canvas.Brush.Color:=clRed;
Canvas.Pen.Color:=clRed;
Canvas.Ellipse(x1,y1,x2,y2);
x1:=A[1,t];
y1:=A[2,t];
C[5,v]:=C[6,v];
A[3,t]:=A[3,t]-C[6,v];
h112:=inttostr(A[3,t]);
Canvas.Brush.Color:=clBtnFace;
Canvas.Pen.Color:=clBtnFace;
Canvas.TextOut(x1-3,y1-5,h112);
end;
end;
end;
end;
end;
for t:=1 to f3 do
if C[5,t]>=1 then begin
for v:=1 to f2 do
if B[1,v]=C[3,t] then
if B[2,v]=C[4,t] then begin
B[3,v]:=B[3,v]+C[5,t];
C[5,t]:=0;
end;
end;
for t:=1 to f2 do
if B[3,t]>=1 then begin
z:=0;
for v:=1 to f3 do begin
if C[1,v]=B[1,t] then begin
if C[2,v]=B[2,t] then begin
if B[3,t]>=C[6,v] then begin
C[5,v]:=C[6,v];
if C[5,v]>z then z:=C[5,v];
end;
end;
end;
end;
B[3,t]:=0;//B[3,t]-z;
B[4,t]:=E[1,t]+1;
end;
for t:=1 to f3 do
if C[5,t]>=1 then begin
for v:=1 to f1 do
if A[1,v]=C[3,t] then
if A[2,v]=C[4,t] then begin
A[3,v]:=A[3,v]+C[5,t];
C[5,t]:=0;
x1:=C[3,t];
y1:=C[4,t];
Canvas.Pen.Color:=clBtnFace;
Canvas.Brush.Color:=clBtnFace;
h112:=inttostr(A[3,v]);
Canvas.TextOut(x1-3,y1-5,h112);
end;
end;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
i:=1;
je:=1;
jr:=1;
jl:=1;
j1:=1;
f1:=0;
f2:=0;
f3:=0;
label1.Caption:='0';
end;
procedure TForm1.ToolButton8Click(Sender: TObject);
begin
w:=5;
end;
procedure TForm1.Button2Click(Sender: TObject);
var
new,ne:integer;
begin
for new:=1 to 7 do
for ne:=1 to 100 do begin
A[new,ne]:=0;
B[new,ne]:=0;
C[new,ne]:=0;
N[new,ne]:=0;
M[new,ne]:=0;
E[new,ne]:=0;
end;
for new:=1 to 2 do
for ne:=1 to 2 do
D[new,ne]:=0;
label1.Caption:='0';
Form1.Repaint;
end;
procedure TForm1.Button4Click(Sender: TObject);
begin
Form3.Show;
end;
procedure TForm1.Button5Click(Sender: TObject);
begin
Form4.Show;
end;
procedure TForm1.BitBtn1Click(Sender: TObject);
begin
Form1.Close;
end;
end.