Pobierz cały dokument
sym
Rozmiar 4,8 KB

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
Wyst‘pił bł‘d podczas wyszukiwania.
Więcej podobnych podstron

216/7557, 239/2835, 231/3599, 203/1781, 227/8645, 192/5263, 177/1255, 156/2848, 187/4789, 190/3501, 724/5317, 715/2423, 705/7833, 732/9392, 731/7904,
Kontakt | Polityka prywatności