sym


MAIN MODULE mprog1;
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:
igo sym byc tym co slynie
N GW TRAP SYM
1 Progn i sym gosp Istota prognozowania
MED CW 3 PID sym kom
SYM0 0 Install Config
sym
2 Progn i sym gosp Narzędz anal ekonom Ruch okrężny
sym
sym
5 Progn i sym gosp TWO wprow cz 1
4 Progn i sym gosp Zastosowanie prognoz R
Obwody 3 f sym
3 Progn i sym gosp Analiza syt fin
7 Progn i sym gosp Klasyfikacja
screen sym trzecia

więcej podobnych podstron