курсовая. Курс_Юртова. Курсовая работа по дисциплине Теория информационных процессов и систем
Скачать 129.37 Kb.
|
ЗаключениеВ данной курсовой работе успешно были разработаны концептуальная, математическая и машинная модели процесса функционирования СМО. Полученные на ЭВМ результаты моделирования процесса функционирования СМО отражают основные особенности функционирования реального объекта и позволяют качественно и количественно оценить его поведение. На основе полученных оценок характеристик можно сделать следующие выводы и дать соответствующие рекомендации. В целом создание программы, моделирующей систему массового обслуживания, можно считать удачным. Алгоритм разрабатывался максимально простой и эффективный. Результаты моделирования показали не только эффективность работы данной системы, но и возможные пути повышения её производительности. Список использованных источниковБусленко Н.П. Моделирование сложных систем // – М.: Наука, 1978. - 51с. Лифшиц А.Л. Статистическое моделирование СМО, М., 1978. -216 с. Мухин О. И. Моделирование систем. Конспект лекций - 1985. - 95с. Советов Б.Я., Яковлев С.А. Моделирование систем // Учебник для ВУЗов -М.: Высшая школа, 1985. - 224 с. Советов Б.Я., Яковлев С.А. Моделирование систем // Курсовое проектирование -М.: Высшая школа, 1988. - 232 с. Приложение А(обязательное) Листинг программы unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, Spin, ExtCtrls, TeEngine, Series, TeeProcs, Chart; type TForm1 = class(TForm) Button1: TButton; ListBox1: TListBox; GroupBox1: TGroupBox; GroupBox2: TGroupBox; Image1: TImage; Label1: TLabel; Label3: TLabel; GroupBox4: TGroupBox; Label6: TLabel; seNak: TSpinEdit; Label7: TLabel; seNak2: TSpinEdit; Label2: TLabel; Label4: TLabel; Chart1: TChart; Series1: TBarSeries; procedure Button1Click(Sender: TObject); procedure FormCreate(Sender: TObject); private { Private declarations } public { Public declarations } procedure Kanal; procedure Istok; procedure Kanal_2; end; var Form1: TForm1; ZKan,zkan_2:boolean; t1,t2,n,t,tIstok,InSig,VNak,Sboy,OutSig,tkan,SZKan,SZNak,sekanal_2,sboy_2,outsig_2,SZNak_2,szkan_2,tkan_2,vnak_2:integer; in_k1:byte; { var nak_2:byte;{накопитель для канала № 2} {colnak1-кол-во сигналов, пройденных через накопитель 1} {in_k1-true-сигнал обслуж-ся каналом № 1, false-сигнал обслуж-ся каналом № 2} implementation {$R *.dfm} procedure TForm1.Button1Click(Sender: TObject); var j:integer; begin VNak:=0; {Накопитель} Sboy:=0; sboy_2:=0; InSig:=0;{подсчет посланных сигналов} OutSig:=0;{подсчет количества сигналов, покинувших систему обслуженными} vnak_2:=0; outsig_2:=0; SZNak:=0;{подсчет средней занятости накопителя в сигналах} SZNak_2:=0;{подсчет средней занятости накопителя в сигналах} SZKan:=0;{подсчет количества единиц времени, которое канал находится в состоянии занятости} szkan_2:=0; ZKan:=False; {состояние канала} ZKan_2:=false; in_k1:=0; ListBox1.Items.Clear; T:=0; tIstok:=T+7+random(7); Series1.Clear; Repeat Istok; Kanal; kanal_2; SZNak:=SZNak+VNak; SZNak_2:=SZNak_2+VNak_2; inc(t); Series1.Add(vnak); {добавление данных в диаграмму о накопителе №1} Until T>400; with ListBox1.Items do begin { zkan_2:boolean;sekanal_2,sboy_2,outsig_2,szkan_2,tkan_2:integer;} { Add('Должно поступить сигналов: '+IntToStr(400 div 10));} Add('Поступло сигналов: '+IntToStr(InSig)); Add('Обработано сигналов каналом № 1: '+IntToStr(OutSig)); Add('Обработано сигналов каналом № 2: '+IntToStr(OutSig_2)); Add('Сбойных сигналов: '+IntToStr(Sboy+sboy_2)); if ZKan then Inc(VNak); Add('Учтенных сигналов: '+IntToStr(VNak+vnak_2+Sboy+sboy_2+OutSig+OutSig_2)); if ZKan_2 then Inc(VNak); if t-t1<3 then Inc(VNak); if t-t2<3 then Inc(VNak); Add('Осталось в системе сигналов: '+IntToStr(VNak)); Add('Средняя занятость накопителя № 1 (в сиг.): ' + FloatToStrF(SZNak/400,ffNumber,8,2)); Add('Средняя занятость накопителя № 1 (в %): ' + IntToStr(Round(SZNak/400/seNak.Value*100))); Add('Средняя занятость накопителя № 2 (в сиг.): ' + FloatToStrF(SZNak_2/400,ffNumber,8,2)); Add('Средняя занятость накопителя № 2 (в %): ' + IntToStr(Round(SZNak_2/400/seNak2.Value*100))); Add('Средняя занятость канала № 1 (в %): '+ IntToStr(Round(SZKan/400*100))); Add('Средняя занятость канала № 2 (в %): '+ IntToStr(Round(SZKan_2/400*100))); end; end; procedure TForm1.Kanal; begin if ZKan then begin Dec(tKan); Inc(SZKan);{подсчет количества единиц времени, которое канал находится в состоянии занятости} if tKan=0 {время, оставшееся до конца обработки сигнала} then begin ZKan:=False; if in_k1=1 then begin Inc(OutSig){подсчет количества сигналов, покинувших канал № 1 обслуженными}; t1:=t; end else begin if vnak_2 else inc(sboy_2); end; end; end; if not ZKan and (VNak>0) then begin Dec(VNak); if in_k1=1 then in_k1:=0 else in_k1:=1; ZKan:=True; if in_k1=1 then tKan:=2+16+random(5){18+/-2:количество единиц времени, отводимое на обработку одного сигнала} else tKan:=2; end; end; procedure TForm1.Istok; begin { if T mod N=0 then tIstok:=T+7+random(7); {источник} if T=tIstok then begin tIstok:=T+7+random(7); {источник} Inc(InSig); {подсчет посланных сигналов} if VNak then begin Inc(VNak); end else Inc(Sboy); end; end; procedure TForm1.FormCreate(Sender: TObject); begin randomize; end; procedure TForm1.Kanal_2; begin if ZKan_2 then begin Dec(tKan_2); Inc(SZKan_2);{подсчет количества единиц времени, которое канал находится в состоянии занятости} if tKan_2=0 {время, оставшееся до конца обработки сигнала} then begin ZKan_2:=False; Inc(OutSig_2);{подсчет количества сигналов, покинувших систему обслуженными} t2:=t; end; end; if not ZKan_2 and (VNak_2>0) then begin Dec(VNak_2); ZKan_2:=True; tKan_2:=16+random(5);{количество единиц времени, отводимое на обработку одного сигнала} end; end; end. Приложение Б (обязательное) Статистические данные
3>3> |