MAIN MODULE prog1;
FROM SimMod IMPORT StartSimulation, SimTime, StopSimulation;
FROM RandMod IMPORT RandomObj;
FROM StatMod IMPORT IStatObj, ITimedStatObj, TSINTEGER, SREAL, RStatObj;
FROM IOMod IMPORT StreamObj, ALL FileUseType;
FROM ListMod IMPORT QueueList;
TYPE
KolejkaObj = OBJECT; FORWARD;
OtoczenieObj = OBJECT(RandomObj)
lambda: REAL;
kolejka: KolejkaObj;
liczbaKlientow: INTEGER;
ASK METHOD Init(IN lbd: REAL; IN kol: KolejkaObj;
IN lk: INTEGER);
TELL METHOD GenerujKlientow();
END OBJECT;
GniazdoObj = OBJECT(RandomObj)
mi: REAL;
kolejka: KolejkaObj;
zajete: BOOLEAN;
czasObslugi: SREAL;
ASK METHOD Init(IN m: REAL; IN kol: KolejkaObj);
TELL METHOD Obsluguj();
END OBJECT;
KlientRec = RECORD
czasWej: REAL;
END RECORD;
KolejkaObj = OBJECT(QueueList)
maxDlugosc: INTEGER;
gniazdo: GniazdoObj;
dlugosc: TSINTEGER;
ASK METHOD Init(IN maxdl: INTEGER;
IN gnd: GniazdoObj);
ASK METHOD Wstaw(IN klient: KlientRec);
ASK METHOD Usun() : KlientRec;
END OBJECT;
OBJECT OtoczenieObj;
ASK METHOD Init(IN lbd: REAL; IN kol: KolejkaObj; IN lk: INTEGER);
BEGIN
lambda := lbd;
liczbaKlientow := lk;
kolejka := kol;
END METHOD;
TELL METHOD GenerujKlientow();
VAR i: INTEGER;
kl: KlientRec;
BEGIN
FOR i := 1 TO liczbaKlientow;
WAIT DURATION Exponential(1.0 / lambda)
ON INTERRUPT
END WAIT;
NEW(kl);
ASK kolejka TO Wstaw(kl);
END FOR;
END METHOD;
END OBJECT;
OBJECT GniazdoObj;
ASK METHOD Init(IN m: REAL; IN kol: KolejkaObj);
BEGIN
mi := m;
kolejka := kol;
END METHOD;
TELL METHOD Obsluguj();
VAR kl: KlientRec;
BEGIN
zajete := TRUE;
WHILE ASK kolejka TO numberIn > 0
kl := ASK kolejka TO Usun();
WAIT DURATION Exponential(1.0 / mi)
ON INTERRUPT
END WAIT;
czasObslugi := SimTime - kl.czasWej;
DISPOSE(kl);
END WHILE;
zajete := FALSE;
END METHOD;
END OBJECT;
OBJECT KolejkaObj;
ASK METHOD Init(IN maxdl: INTEGER; IN gnd: GniazdoObj);
BEGIN
maxDlugosc := maxdl;
gniazdo := gnd;
END METHOD;
ASK METHOD Wstaw(IN klient: KlientRec);
BEGIN
IF maxDlugosc > numberIn
INC(dlugosc);
klient.czasWej := SimTime;
Add(klient);
IF NOT ASK gniazdo TO zajete
TELL gniazdo TO Obsluguj;
END IF;
ELSE
DISPOSE(klient);
END IF;
END METHOD;
ASK METHOD Usun() : KlientRec;
VAR kl :KlientRec;
BEGIN
kl := ASK SELF TO Remove();
dlugosc := numberIn;
RETURN kl;
END METHOD;
END OBJECT;
VAR
gen: OtoczenieObj;
gzd: GniazdoObj;
kol: KolejkaObj;
plik: StreamObj;
monITS: ITimedStatObj;
monRS: RStatObj;
BEGIN
NEW(gen);
NEW(gzd);
NEW(kol);
ASK gen TO Init(1.5, kol, 1000);
ASK gzd TO Init(2.0, kol);
ASK kol TO Init(10, gzd);
TELL gen TO GenerujKlientow();
StartSimulation;
NEW(plik);
ASK plik TO Open("wyniki.txt", Output);
ASK plik TO WriteString("srednia dlugosc kolejki: ");
monITS := GETMONITOR(ASK kol TO dlugosc, ITimedStatObj);
ASK plik TO WriteReal(ASK monITS TO Mean, 10, 4);
ASK plik TO WriteLn;
ASK plik TO WriteString("sredni czas obslugi klienta: ");
monRS := GETMONITOR(ASK gzd TO czasObslugi, RStatObj);
ASK plik TO WriteReal(ASK monRS TO Mean, 10, 4);
ASK plik TO WriteLn;
ASK plik TO Close;
DISPOSE(plik);
DISPOSE(gen);
DISPOSE(gzd);
DISPOSE(kol);
END MODULE.
Wyszukiwarka
Podobne podstrony:
podstawy symulacji projektjakis kodWyk6 ORBITA GPS Podstawowe informacjePodstawowe informacje o Rybnie3 podstawy teorii stanu naprezenia, prawo hookeakod z WOŚP polecane chomiki by closer9zestawy cwiczen przygotowane na podstawie programu Mistrz Klawia 6podstaw uniwJezyk angielski arkusz I poziom podstawowy (5)07 GIMP od podstaw, cz 4 PrzekształceniaPodstawy dzialania routerow i routinguwięcej podobnych podstron