podstawy symulacji kod jakis


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 projekt
jakis kod
Wyk6 ORBITA GPS Podstawowe informacje
Podstawowe informacje o Rybnie
3 podstawy teorii stanu naprezenia, prawo hookea
kod z WOŚP polecane chomiki by closer9
zestawy cwiczen przygotowane na podstawie programu Mistrz Klawia 6
podstaw uniw
Jezyk angielski arkusz I poziom podstawowy (5)
07 GIMP od podstaw, cz 4 Przekształcenia
Podstawy dzialania routerow i routingu

więcej podobnych podstron