Автор: Пользователь скрыл имя, 09 Ноября 2011 в 14:04, курсовая работа
В систему обработки поступают сообщения по одному через 3±1с., накапливаясь, если необходимо, в буфере емкостью в два сообщения (при отсутствии места в буфере сообщение теряется).
1. Введение 5
2. Общие теоретические сведения 5
3. Математическая модель решения поставленной задачи. 6
4. Блок-схема алгоритма решения задачи 9
5. Руководство пользователя. 10
6. Анализ результатов и выводы 11
7. Список использованной литературы. 12
Приложение А 13
После запуска программы откроется окно, представленное на рис. 3.
Рис. 3. Окно программы
Установите необходимую ёмкость буфера и нажмите на кнопку START.
После нажатия на кнопку начнется процесс моделирования системы, результат работы представлен на рис. 4.
Рис. 4. Результат работы программы
По результатам тестирования можно сделать следующие выводы:
Листинг
программы
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, TeEngine,
Series, ExtCtrls, TeeProcs, Chart, ComCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
Label1: TLabel;
Chart1: TChart;
Series1: TLineSeries;
Label2: TLabel;
Label3: TLabel;
Label4: TLabel;
Chart2: TChart;
Series2: TBarSeries;
TrackBar1: TTrackBar;
Label5: TLabel;
Label6: TLabel;
Label7: TLabel;
Label8: TLabel;
Label9: TLabel;
Label10: TLabel;
Label11: TLabel;
Label12: TLabel;
procedure Button1Click(Sender: TObject);
procedure TrackBar1Change(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
buffer, raspred:array[1..16] of integer;
count_out1, all_time,
max_buf, count_out2, count_work, count_in, buf_capacity,time:integer;
implementation
{$R *.dfm}
function getBufCount:integer;
var ii:integer;
cnt:integer;
begin
cnt:=0;
for ii:=1 to 16 do
begin
if buffer[ii]<>0 then inc(cnt);
end;
result:=cnt;
end;
procedure working(t:integer);
var y:boolean;
i:integer;
begin
y:=false;
i:=buf_capacity;
while y=false do
begin
dec(i);
if buffer[i]<>0 then
begin
Form1.Series1.AddXY(time,
y:=true;
inc(raspred[buffer[i]+t]);
all_time:=all_time+buffer[i]+
buffer[i]:=0;
end;
if i<=buf_capacity then
begin
y:=true;
end;
end;
end;
procedure addtobuf;
var
y:boolean;
i:integer;
begin
y:=false;
i:=0;
while y=false do
begin
inc(i);
if buffer[i]=0 then
begin
buffer[i]:=1;
y:=true;
end;
if i>=buf_capacity then
begin
if y<>true then
begin
y:=true;
inc(count_out1); //Ïîòåðÿííûé ïàêåò
Form1.Label1.Caption:=
end;
end;
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
var
i, time_get, time_do, time_work:integer;
flag:boolean;
begin
Label1.Caption:='0';
Label4.Caption:='0';
Label8.Caption:='0';
Label10.Caption:='0';
Label12.Caption:='0';
Series1.Clear;
Series2.Clear;
randomize;
time:=0;
all_time:=0;
count_out1:=0;
count_out2:=0;
count_work:=0;
count_in:=0;
max_buf:=0;
i:=0;
time_work:=0;
for i:=1 to 16 do
begin
buffer[i]:=0;
raspred[i]:=0;
end;
flag:=true;
buf_capacity:=TrackBar1.
time_do:=1;
time_get:=1;
while time<2000 do
begin
randomize;
inc(time);
//Èçìåíåíèå âðåìåíè
for i:=1 to buf_capacity do
begin
if buffer[i]<>0 then buffer[i]:=buffer[i]+1;
end;
//Äîáàâëåíèå íîâîãî çàïðîñà,
if time=time_get then
begin
addtobuf;
time_get:=time_get+2+random(3)
inc(count_in);
Label10.Caption:=inttostr(
end;
//Óäàëåíèå çàïðîñîâ > 8 ñåêóíä
for i:=1 to buf_capacity do
begin
if buffer[i]>8 then
begin
buffer[i]:=0;
inc(count_out2);//Óâåëè÷èâàåì
Label4.Caption:=inttostr(
end;
end;
//Îáðàáîòêà çàïðîñîâ
if time=time_do then
begin
time_work:=3+random(5);
time_do:=time_do+time_work;
working(time_work);
inc(count_work);
Label8.Caption:=inttostr(
end;
if (max_buf<getBufCount) then max_buf:=getBufCount;
end;
for i:=4 to 14 do
begin
if raspred[i]<>0 then Series2.Add(raspred[i], inttostr(i), clRed);
end;
Label12.caption:=floattostr(
//showmessage('Ìàêñèìàëüíàÿ çàïîëíåííîñòü áóôåðà: '+inttostr(max_buf));
end;
procedure TForm1.TrackBar1Change(Sender: TObject);
begin
Label6.Caption:= inttostr(Trackbar1.Position);
end;
end.
Информация о работе Система обработки сообщений с ограниченным временем прохождения