madi29 | Дата: Воскресенье, 08.06.2014, 10:37 | Сообщение # 1 |
Рядовой
Группа: Пользователи
Сообщений: 1
Статус: Offline
| program Project1;
{$APPTYPE CONSOLE}
uses SysUtils;
VAR que:array[1..100] of integer; {массив очереди} chan:array[1..100] of integer; {массив квналов} tsk:array[1..100] of real; {массив суммарного времени пребывания в соответствующем состоянии} tq,ts:real; nq,ns:integer; m,a,b:integer; niu,lambda,qua,i,tnext:real; time:integer; j:integer; flg:boolean; tm:integer;
procedure compressque(ind:integer); {Cжимает очередь, начиная с ячейки № ind} var i:integer;
begin i:=ind; while (i<100) do begin que:=que[i+1]; i:=1+i; end; // writeln('query compressed'); {запрос сжатый} end;
function add2chan(ind:integer):boolean; {Заявку из ячейки очереди № ind добавляет в канал} var flag:boolean; i:integer; begin flag:=true; i:=1; while ((i<=m)and flag) do begin if chan=0 then begin tsk[ind]:=0; chan:=ind; flag:=false; // writeln('zadacha ',ind,' kanal dobawlen ',i); {задача добавлен канал} end; i:=i+1; end; add2chan:=not(flag); end;
function canstop(t:real;par:real):boolean; {Определяет вре-мя нахождения каждой заявки в очереди} var x:real; y:real; begin x:=1-exp(-par*t); y:=random; if y<x then canstop:=true else canstop:=false; end;
function add2sys(ind:integer):boolean; {Добавляет завку в систему.} var flag:boolean; i:integer; begin flag:=true; i:=1; while ((i<=m)and flag) do begin if chan=0 then begin tsk[ind]:=0; chan:=ind; flag:=false; ns:=ns+1; // writeln('zadacha ',ind ,' kanal dobawlen ',i); {добавлен канал} end; i:=i+1; end; if flag then begin i:=1; while ((i<=100)and flag) do begin if que=0 then begin que:=ind; flag:=false; nq:=nq+1; ns:=ns+1; // writeln('zadacha ',ind,' zapros dobawlen'); {добавлен запрос} end; i:=i+1; end; end; if flag then begin //writeln('zapros perepolnen!!!'); {запрос переполнен} halt(0); end; end;
procedure processchan; {Обслуживание заявки в канале} var i:integer; begin for i:=1 to m do begin if chan<>0 then if canstop(tsk[chan],lambda) then begin //writeln('task ',chan,' left the channel ',i); {левый канал} tsk[chan]:=-1; chan:=0; end else begin ts:=ts+qua; tsk[chan]:=tsk[chan]+qua; end; end; end;
procedure processque; var i:integer; begin for i:=1 to 100 do begin if que<>0 then if add2chan(que) then compressque(i); end;
for i:=1 to 100 do begin if que<>0 then if canstop(tsk[que],niu) then begin // writeln('task ',que,' left the query'); {оставил запрос} tsk[que]:=-1; que:=0; compressque(i);
end else begin tq:=tq+qua; tsk[que]:=tsk[que]+qua; end; end; end;
begin randomize; writeln('wwedite parametri rawnomernogo raspredelenija'); {закон распределения характеризующий моменты времени поступления требований в систему} readln(a,b); writeln('wwedite intensiwnost postuplenija zajawok i intensiwnost obsluziwanija'); readln(niu,lambda); writeln('wwedite chislo kanalow'); {введите число каналов} readln(m); writeln('uslowie'); {введите время непременное условие} readln(qua); writeln('wwedite wremja rassmotrenija'); {введите время рассмотрения} readln(time); for j:=1 to 100 do tsk:=-1;
i:=0; while(i<time) do {main time cycle} {основное время цикла} begin // writeln(' > wremja ',i:3:4,' iz ',time);
{ readkey; }
if i=0 then {first time} {первый раз} begin tsk[1]:=0; add2sys(1); tnext:=random*(b-a)+a; {формула нахождения равномерного расспределения на а и б} writeln('srednjaja dlinna zajawok w ocheredi ',tnext:4:1); {следующая задача должна находиться в} end
else begin if i>tnext then {add new task} {добавление новой задачи} begin tnext:=i+random*(b-a)+a; {формула нахождения равномерного расспределения на а и б} // writeln('next task should appear at ',tnext:4:4); {следующая задача должна находиться в} flg:=true; j:=1; while((j<=100) and flg) do begin if tsk=-1 then begin tsk :=0; add2sys(j); flg:=false; end; j:=j+1; end; if flg then begin // writeln('system overflow!!!'); {система перелива} halt(0); end; end;
processchan; processque; end; i:=i+qua; end; if nq<>0 then // writeln('srednee wremja zaprosa',tq/nq:4:4) {среднее время запроса} else // writeln('srednee wremja zaprosa',tq/nq:4:4); {среднее время запроса} // writeln('nikakih zadach ne bilo w zaprose'); {никакие задачи не были в запросе } //writeln('srednee wremja sistemi',ts/ns:4:4); {среднее время системы} readln; end.
|
|
| |
diamFC | Дата: Понедельник, 09.06.2014, 11:50 | Сообщение # 2 |
Полковник
Группа: Администраторы
Сообщений: 207
Статус: Offline
| Блок-схема в архиве. Блок-схемы сделаны с помощью программы diamFC, которую вы можете скачать по этой ссылке: http://diamfc.ucoz.ru/load/0-0-0-1-20 Программа БЕСПЛАТНО сделает блок-схемы для задач, в которых меньше 30 строк кода.
|
|
| |