Читайте также:
|
|
1. Васильев С.В., Комар В.И., Цыркунов В.М. Практика инфекциониста. Минск. 1993.
2. Временные протоколы обследования и лечения больных в амбулаторно-поликлинических и стационарных лечебно-профилактических учреждениях. Минск. 1999.
3. Приказ МЗ РБ № 66 от 20 апреля 1993 года «О мерах по снижению заболеваемости вирусными гепатитами в Республике Беларусь».
4. Справочник по диетологии. Под редакцией А.А. Покровского. Москва. Медицина. 1992.
ЛАБОРАТОРНАЯ РАБОТА №1
КАЛЕНДАРЬ СОБЫТИЙ
Цель работы: ознакомление со структурой и обслуживанием календаря событий систем имитационного моделирования.
ТЕОРЕТИЧЕСКАЯ ЧАСТЬ
Учет и регистрация планируемых временных событий в процессе имитационного моделирования осуществляются с помощью особого файла (списка) – календаря событий. Планируемые события заносятся в календарь в любые моменты системного времени в соответствии с логикой работы модели, отображающей поведение исследуемого объекта. При этом в очередную запись календаря вносятся характеристики (атрибуты) планируемого события, его код (класс события) и время наступления. Записи календаря упорядочены по времени наступления событий в порядке возрастания. Процессор имитационного моделирования в нужные моменты времени извлекает из календаря очередную запись с ближайшим событием и реализует его, осуществляя необходимые для этого изменения в модели.
Рассмотрим программу, демонстрирующую формат календаря, операции по планированию и перегруппировке событий в календаре и извлечению из календаря события с минимальным временем исполнения.
program kalendar;
uses crt;
type
ta1=array [1..10] of integer;
ta2=array [1..12,1..10] of integer;
var
i,j,kevnt,matr,dtime,nnq1,tnow:integer;
f:file of ta2;
a,b,a1,a2,attr:ta1;
a3:ta2;
procedure grup;
var
l,k,h,i,j,n:integer;
begin
writeln(' Подпрограмма перегруппировки');
seek(f,0);
read(f,a3);
n:=1;
while a3[matr+2,n]=0 do
begin
for k:=1 to nnq1-1 do
for l:=1 to matr+2 do
begin
a3[l,k]:=a3[l,k+1];
a3[l,k+1]:=0;
end;
n:=n+1;
end;
h:=nnq1 div 2;
i:=0;
while h<>0 do
begin
for j:=h+1 to nnq1 do
begin
i:=j-h;
for k:=1 to matr+2 do
a[k]:=a3[k,j];
repeat
for k:=1 to matr+2 do
b[k]:=a3[k,i];
if (a[matr+2]<b[matr+2])and(a[matr+2]>0) then
begin
for k:=1 to matr+2 do
a3[k,i+h]:=b[k];
i:=i-h;
end;
until (i<=0)or(a[matr+2]>=b[matr+2])or(a[matr+2]=0);
for k:=1 to matr+2 do
a3[k,i+h]:=a[k];
end;
h:=h div 2;
end;
seek(f,0);
write(f,a3);
writeln(' Вывод нового календаря');
for i:=1 to nnq1 do
begin
for j:=1 to matr+2 do
write(a3[j,i],' ');write(' ');
end;
writeln;
end;
procedure schdl(kevnt,dtime:integer;a4:ta1);
var
i,j:integer;
begin
for i:=1 to matr do a2[i]:=a4[i];writeln('атрибуты события ',a1[1]);
a2[matr+1]:=kevnt;writeln('код события ',kevnt);
a2[matr+2]:=tnow+dtime;writeln('время события ', tnow+dtime);
seek(f,0);
read(f,a3);
j:=1;
while a3[matr+1,j]<>0 do j:=j+1;
for i:=1 to matr+2 do a3[i,j]:=a2[i];
seek(f,0);
write(f,a3);
writeln(' Вывод календаря');
for i:=1 to nnq1 do
begin
for j:=1 to matr+2 do
write(a3[j,i],' ');write(' ');
end;
writeln;
grup;
end;
procedure rmove;
var
i,j:integer;
begin
seek(f,0);
read(f,a3);
i:=a3[matr+1,1];
writeln(' Код извлеченного события ',i);
writeln(' Время извлеченного события ',a3[matr+2,1]);
for j:=1 to matr+3 do a3[j,1]:=0;
for j:=1 to matr do attr[j]:=a3[j,1];
seek(f,0);
write(f,a3);
writeln(' Вывод календаря');
for i:=1 to nnq1 do
begin
for j:=1 to matr+2 do
write(a3[j,i],' ');write(' ');
end;
writeln;
grup;
end;
begin
clrscr;
matr:=1;
nnq1:=3;
tnow:=4;
assign(f,'kalend.dat');
rewrite(f);
for i:=1 to nnq1 do
for j:=1 to matr+2 do
a3[j,i]:=0;
seek(f,0);
write(f,a3);
a1[1]:=_;
writeln(' Планирование первого события');
schdl(_,_,a1);
writeln(' Планирование второго события');
schdl(_,_,a1);
writeln(' Планирование третьего события');
schdl(_,_,a1);
writeln(' Извлечение ближайшего события');
rmove;
writeln('Имитация завершена');
end.
В программе используются следующие величины:
kevnt – код планируемого события,
matr – количество атрибутов,
dtime – интервал свершения планируемого события,
nnq1- число записей календаря,
tnow – системное время.
При проведении операций с календарем данные из файла календаря f копируются в массив a3. Для формирования очередной записи используется вспомогательный массив a2, куда поступают атрибуты события (из массива a1), код и интервал свершения. Извлечение атрибутов события производится в специализированный массив atrib.
С целью восстановления структуры календаря после операций планирования и извлечения записи вызывается подпрограмма перегруппировки grup. Последняя либо сдвигает весь календарь влево на одну запись (после извлечения события), либо расставляет записи по закону «меньшее вперед», сравнивая между собой времена свершения запланированных событий.
Дата добавления: 2014-12-19; просмотров: 40 | Поможем написать вашу работу | Нарушение авторских прав |