background image

 

 

WOJSKOWA AKADEMIA TECHNICZNA 

 

 

 

Podstawy symulacji

 

Zadanie laboratoryjne nr 2

 

 

 

 

 

 

 

Prowadzący : dr inż. Jarosław Rulka 
Grupa: I7G2S1 
Wykonawca: 

Łukasz Kołodziejski 

 

background image

Napisać program symulujący działanie sieci SMO jak na rysunku: 

 

Przy realizacji zadania należy przyjąć następujące dane z listy przedstawionej poniżej: 
a) 

rozkład zmiennych T

j

: (nrDz + i) mod 6 + 1; 

b) 

rozkład zmiennych O

i

: (nrDz + i + 1) mod 6 + 1; 

c)  L

i

: (nrDz + i) mod 2 + 1; 

d)  AL

i

: (nrDz + i + 2) mod 3 + 1; 

e)  R

j

 = (nrDz + i + 5) mod 3 + 1; 

f)  M

i

 = (nrDz + i + 2) mod 4 + 1; 

g) 

Blokowanie zgłoszeń 1. SMO; 

h)  Klienci niecierpliwi w SMO

i

 : N

i

 = (nrDz + i)  mod 4 (ograniczony czas oczekiwania na rozpoczęcie obsługi); 

gdzie: 
i – numer SMO; 
j – numer strumienia; 
T

j

 – zmienna losowa oznaczająca czas pomiędzy kolejnymi napływami zgłoszeń do systemu; 

O

i

 – zmienna losowa oznaczająca czas obsługi pojedynczego zgłoszenia w gnieździe; 

N

i

 – zmienna losowa oznaczająca czas niecierpliwości zgłoszenia (gdy i = 0 => zgłoszenia cierpliwe); 

R

j

 – zmienna losowa oznaczająca wielkość paczki zgłoszeń (wchodzących w tej samej chwili) j-tego strumienia; 

p

k

 – prawdopodobieństwa przemieszczenia się zgłoszenia po danym łuku; 

L

i

 – długość kolejki i-tego SMO; 

AL.

i

 – algorytmy kolejek (w przypadku istnienia kolejki z priorytetami należy przyjąć, że zgłoszenia posiadają 

priorytety); 
1.  Rozkłady zmiennych losowych: 

1.1.  Wykładniczy 
1.2.  Erlanga 
1.3.  Normalny 
1.4.  Jednostajny 
1.5.  Trójkątny 
1.6.  Weibulla 

2.  Długości kolejek pojedynczych SMO 

2.1.  ograniczone (możliwe straty) 
2.2.  nieograniczone 

3.  Algorytm kolejek: 

3.1.  FIFO 
3.2.  LIFO 
3.3.  Z priorytetami 

4.  Liczba stanowisk obsługi w gniazdach (1-M) 
5.  Ilość zgłoszeń jednocześnie napływających do systemu (1-R) 
Pozostałe dane należy określać na początku symulacji. 

 

SMO 

SMO 

O

O

SMO 

O

T

p

1-p

p

p

background image

Rozwiązanie dla numeru 2

Rozkłady zmiennej losowej oznaczający czas pomiędzy kolejnymi napływami zgłoszeń do systemu: 
T1 – rozkład jednostajny 
Paczka R1 = 1 
Rozkłady zmiennych losowych oznaczających czas obsługi pojedynczego zgłoszenia w gnieździe
O1 – rozkład trójkątny 
O2 – rozkład Weibull’a 
O3 – rozkład wykładniczy 
Długości kolejek SMO
L1 – nieograniczona 
L2 – ograniczona 
L3 – nieograniczona 
Algorytmy kolejek
AL1 – z priorytetami 
AL2 – FIFO 
AL3 – LIFO 
Liczba stanowisk obsługi
M1 – 2 
M2 – 3 
M3 – 4 
Zmienne losowe oznaczające czas niecierpliwości zgłoszenia
N1 – rozkład normalny 
N2 – zgłoszenie cierpliwe 
N3 – rozkład wykładniczy 
Blokowanie zgłoszeń w 1 SMO
 
Sposób rozwiązania 
Na początku generowani są klienci, którzy udają się do pierwszej kolejki (z priorytetami) po jednym 
kliencie. Do każdego klienta zostaje przypisany priorytet i prawdopodobieństwo przejść między 
elementami systemu. Z pierwszej kolejki klient przechodzi do pierwszego gniazda obsługi o rozkładzie 
trójkątnym i ilości stanowisk obsługi  równej 2, aby zostać  tam obsłużonym. Po wyjściu z pierwszego 
gniazda klient z nadanym mu wcześniej prawdopodobieństwem p1 pójdzie do gniazda numer 2 o 
rozkładzie Weibull’a z trzema stanowiskami obsługi, bądź z prawdopodobieństwem 1-p1 uda się do 
trzeciego gniazda o rozkładzie wykładniczym z czterema stanowiskami obsługi. Po wyjściu z gniazda 
drugiego ,klient może powrócić do niego (prawdopodobieństwo p2) , bądź opuścić system. Po 
wyjściu z gniazda trzeciego klient może powrócić do gniazda pierwszego (prawdopodobieństwo p3), 
bądź opuścić system.  Jeżeli powróci do systemu, to prawdopodobieństwo, że przy następnym 
wyborze też pozostanie w systemie zostanie zmniejszone. 
 
 
 
 
 
 

background image

Użyte rozkłady: 
-Rozkład jednostajny: 

 

-Rozkład trójkątny:  
 

 

-Rozkład Weibulla: 

Gęstość: 

 

 

Dystrybuanta: 

 

 
-Rozkład wykładniczy: 

Gęstość: 

 

 

Dystrybuanta: 

 

 

 

 

background image

 
 
 
Kod programu: 

MAIN MODULE wooka; 
 
(*=====================================================================biblioteki=========*) 
 
FROM IOMod IMPORT ReadKey; (*we/wy*) 
FROM RandMod IMPORT RandomObj, Random; (*liczby pseudolosowe*) 
FROM ListMod IMPORT QueueList; (*struktury z rekordami*) 
FROM GrpMod IMPORT QueueObj, StackObj, RankedObj; (*struktury z obiektami*) 
FROM SimMod IMPORT SimTime, StartSimulation, TriggerObj; (*operacje zwiazane z symulacja*) 
FROM StatMod IMPORT SREAL, RStatObj,ITimedStatObj, TSINTEGER; (*monitory statyczne , zmienne real, wazony czasem*) 
FROM IOMod IMPORT StreamObj, ALL FileUseType;  
 
 
(*======================================================================obiekty===========*) 
 
TYPE 
GeneratorObj = OBJECT; FORWARD; 
Kolejka1Obj = OBJECT; FORWARD; 
Kolejka2Obj = OBJECT; FORWARD; 
Kolejka3Obj = OBJECT; FORWARD; 
Okienko1Obj = OBJECT; FORWARD; 
Okienko2Obj = OBJECT; FORWARD; 
Okienko3Obj = OBJECT; FORWARD; 
KlientObj = OBJECT; FORWARD; 
 
GeneratorObj = OBJECT(RandomObj); 
 

kom: BOOLEAN; 

 

lo: REAL; 

 

hi: REAL; 

 

GenLos: RandomObj; 

 

Kolejka1: Kolejka1Obj; 

 

showst: INTEGER; 

 

TELL METHOD Generuj(IN LiczbaOsob:INTEGER); 

 

ASK METHOD Ustaw(IN l: REAL; IN h: REAL; IN Kol:Kolejka1Obj; IN showst2:INTEGER; IN kw:BOOLEAN); 

 
END OBJECT; 
 
Kolejka1Obj = OBJECT(RankedObj); 
 

kom: BOOLEAN; 

 

dlugosc: TSINTEGER; 

 

okienko1: Okienko1Obj; 

 

przyjete: INTEGER; 

 

odrzucone: INTEGER; 

 

ASK METHOD Wstaw(IN Kl:KlientObj; IN kw:BOOLEAN); 

 

ASK METHOD Ustaw(IN okien: Okienko1Obj); 

END OBJECT; 
 
Kolejka2Obj = OBJECT(QueueObj); 
 

kom: BOOLEAN; 

 

ograniczenie: INTEGER; 

 

okienko2: Okienko2Obj; 

 

dlugosc: TSINTEGER; 

 

przyjete: INTEGER; 

 

odrzucone: INTEGER; 

 

ASK METHOD Wstaw(IN Kl:KlientObj; IN kw:BOOLEAN); 

 

ASK METHOD Ustaw(IN okien: Okienko2Obj; IN ogran: INTEGER); 

background image

END OBJECT; 
 
Kolejka3Obj = OBJECT(StackObj); 
 

kom: BOOLEAN; 

 

dlugosc: TSINTEGER; 

 

przyjete: INTEGER; 

 

odrzucone: INTEGER; 

 

okienko3: Okienko3Obj; 

 

ASK METHOD Wstaw(IN Kl:KlientObj; IN kw:BOOLEAN); 

 

ASK METHOD Ustaw(IN okien: Okienko3Obj); 

END OBJECT; 
 
Okienko1Obj = OBJECT(RandomObj); 
 

kom: BOOLEAN; 

 

min: REAL; 

 

mode: REAL; 

 

max: REAL; 

 

Kolejka1: Kolejka1Obj; 

 

Kolejka2: Kolejka2Obj; 

 

Kolejka3: Kolejka3Obj; 

 

los:RandomObj; 

 

stanowiska: TSINTEGER; 

 

TELL METHOD Obsluguj(); 

 

ASK METHOD Ustaw(IN mi:REAL; IN mo:REAL; IN ma:REAL; IN Kol1: Kolejka1Obj; IN Kol2:Kolejka2Obj; IN Kol3:Kolejka3Obj; IN 

kw:BOOLEAN); 
END OBJECT; 
 
Okienko2Obj = OBJECT(RandomObj); 
 

kom: BOOLEAN; 

 

shape: REAL; 

 

scale: REAL; 

 

czasprzebywania:SREAL; 

 

los:RandomObj; 

 

Kolejka2: Kolejka2Obj; 

 

stanowiska: TSINTEGER; 

 

TELL METHOD Obsluguj(); 

 

ASK METHOD Ustaw(IN sh: REAL; IN sc: REAL; IN kol:Kolejka2Obj; IN kw:BOOLEAN); 

END OBJECT; 
 
Okienko3Obj = OBJECT(RandomObj); 
 

kom: BOOLEAN; 

 

meanwyk: REAL; 

 

czasprzebywania:SREAL; 

 

Kolejka3: Kolejka3Obj; 

 

Kolejka1: Kolejka1Obj; 

 

los:RandomObj; 

 

stanowiska: TSINTEGER; 

 

TELL METHOD Obsluguj(); 

 

ASK METHOD Ustaw(IN meanw: REAL; IN kol: Kolejka3Obj; IN kol1: Kolejka1Obj; IN kw:BOOLEAN); 

END OBJECT; 
 
KlientObj = OBJECT(RandomObj); 
 

Nr: INTEGER; 

 

CzasWejscia: REAL; 

 

Kolejka1:Kolejka1Obj; 

 

show: BOOLEAN; 

 

ASK METHOD ustawCzas(); 

 

ASK METHOD usun(); 

 

ASK METHOD ustaw(IN numer: INTEGER; IN kol:Kolejka1Obj; IN show2:BOOLEAN); 

END OBJECT; 
 
OBJECT GeneratorObj; 

background image

 

ASK METHOD Ustaw(IN l: REAL; IN h: REAL; IN Kol:Kolejka1Obj; IN showst2:INTEGER; IN kw:BOOLEAN); 

 

BEGIN 

 

 

kom:=kw; 

 

 

lo:=l; 

 

 

hi:=h; 

 

 

Kolejka1:=Kol; 

 

 

showst:=showst2; 

 

END METHOD; 

 
 

TELL METHOD Generuj(IN LiczbaOsob:INTEGER); 

 

VAR 

 

 

i:INTEGER; 

 

 

kl:KlientObj; 

 

 

showst2:BOOLEAN; 

 

BEGIN 

 

 

FOR i:=1 TO LiczbaOsob BY 1 

 

 

 

WAIT DURATION UniformReal(lo,hi); 

 

 

 

END WAIT; 

 

 

 

NEW(kl); 

 

 

 

IF (showst = i) OR (showst = 0) 

 

 

 

 

showst2:=TRUE; 

 

 

 

ELSE 

 

 

 

 

showst2:=FALSE; 

 

 

 

END IF; 

 

 

 

ASK kl TO ustaw(i,Kolejka1,showst2); 

 

 

 

IF (kom) 

 

 

 

 

OUTPUT(SimTime," -powstal nowy klient o numerze [", ASK kl TO Nr,"]."); 

 

 

 

END IF; 

 

 

 

ASK Kolejka1 TO Wstaw(kl, kom); 

 

 

END FOR; 

 

END METHOD; 

END OBJECT; 
 
OBJECT Kolejka1Obj; 
 

ASK METHOD Wstaw(IN Klient:KlientObj; IN kw:BOOLEAN); 

 

BEGIN 

 

 

 

kom:=kw; 

 

 

 

Add(Klient); 

 

 

 

ASK Klient TO ustawCzas; 

 

 

 

IF (kom) 

 

 

 

OUTPUT(SimTime, " -klient o numerze [", ASK Klient TO Nr, "] zostal wprowadzony do kolejki [1]"); 

 

 

 

END IF; 

 

 

 

dlugosc:=numberIn; 

 

 

 

IF ASK okienko1 TO stanowiska < 2 

 

 

 

 

INC(przyjete); 

 

 

 

 

TELL okienko1 TO Obsluguj; 

 

 

 

ELSE 

 

 

 

 

INC(odrzucone); 

 

 

 

END IF; 

 

END METHOD; 

 

ASK  METHOD Ustaw(IN gnd:Okienko1Obj); 

 

BEGIN 

 

 

okienko1:=gnd; 

 

END METHOD; 

END OBJECT; 
 
OBJECT Kolejka2Obj; 
 

ASK METHOD Wstaw(IN Klient:KlientObj; IN kw:BOOLEAN); 

 

BEGIN 

 

 

 

kom:=kw; 

 

 

IF ograniczenie > numberIn; 

 

 

 

Add(Klient); 

background image

 

 

 

 

IF (kom) 

 

 

 

 

OUTPUT(SimTime, " -klient o numerze [", ASK Klient TO Nr, "] zostal wprowadzony do kolejki 

[2]"); 
 

 

 

 

END IF; 

 

 

 

dlugosc:=numberIn; 

 

 

 

IF ASK okienko2 TO stanowiska < 3 

 

 

 

 

INC(przyjete); 

 

 

 

 

TELL okienko2 TO Obsluguj; 

 

 

 

ELSE 

 

 

 

 

INC(odrzucone); 

 

 

 

END IF; 

 

 

ELSE 

 

 

 

IF (kom) 

 

 

 

OUTPUT(SimTime, " -klient o numerze [", ASK Klient TO Nr,"] zostal odrzucony z kolejki [2]"); 

 

 

 

END IF; 

 

 

 

DISPOSE(Klient); 

 

 

 

 

END IF; 

 

END METHOD; 

 

 

 

ASK METHOD Ustaw(IN gnd: Okienko2Obj; IN ogran:INTEGER); 

 

BEGIN 

 

 

okienko2:=gnd; 

 

 

ograniczenie:=ogran; 

 

END METHOD; 

END OBJECT; 
 
OBJECT Kolejka3Obj; 
 

ASK METHOD Wstaw(IN Klient:KlientObj; IN kw:BOOLEAN); 

 

BEGIN 

 

 

 

kom:=kw; 

 

 

 

Add(Klient); 

 

 

 

IF (kom) 

 

 

 

OUTPUT(SimTime, " -klient o numerze [", ASK Klient TO Nr, "] zostal wprowadzony do kolejki [3]"); 

 

 

 

END IF; 

 

 

 

dlugosc:=numberIn; 

 

 

 

IF ASK okienko3 TO stanowiska < 4 

 

 

 

 

INC(przyjete); 

 

 

 

 

TELL okienko3 TO Obsluguj; 

 

 

 

ELSE 

 

 

 

 

INC(odrzucone); 

 

 

 

END IF; 

 
 

END METHOD; 

 

 

 

ASK METHOD Ustaw(IN gnd: Okienko3Obj); 

 

BEGIN 

 

 

okienko3:=gnd; 

 

END METHOD; 

END OBJECT; 
 
OBJECT Okienko1Obj; 
 

ASK METHOD Ustaw(IN mi:REAL; IN mo:REAL; IN ma:REAL; IN Kol1: Kolejka1Obj; IN Kol2:Kolejka2Obj; IN Kol3:Kolejka3Obj; IN 

kw:BOOLEAN); 
 

BEGIN 

 

 

kom:=kw; 

 

 

min:=mi; 

 

 

mode:=mo; 

 

 

max:=ma; 

 

 

Kolejka1:=Kol1; 

 

 

Kolejka2:=Kol2; 

 

 

Kolejka3:=Kol3; 

 

 

NEW(los); 

background image

 

 

stanowiska:=0; 

 

END METHOD; 

 

 

 

TELL METHOD Obsluguj(); 

 

VAR  

 

 

kl:KlientObj; 

 

 

zmlos:REAL; 

 

BEGIN 

 

 

 

 

 

WHILE ASK Kolejka1 TO numberIn > 0 

 

 

INC(stanowiska); 

 

 

 

kl:=ASK Kolejka1 TO Remove(); 

 

 

 

IF (kom) 

 

 

 

OUTPUT(SimTime, "  -rozpoczeto obsluge klienta o numerze [", ASK kl TO Nr,"] w okienku [1] | stan 

stanowiska:", stanowiska); 
 

 

 

END IF; 

 

 

 

WAIT DURATION Triangular(min,mode,max) 

 

 

 

ON INTERRUPT 

 

 

 

END WAIT; 

 

 

 

 

 

 

 

IF (kom) 

 

 

 

OUTPUT(SimTime, " -klient o numerze [", ASK kl TO Nr, "] zostal obsluzony w okienku [1]"); 

 

 

 

END IF; 

 
 

 

 

zmlos:=ASK los Sample(); 

 

 

 

 

 

 

 

IF zmlos > 0.7 

 

 

 

 

IF (kom) 

 

 

 

 

OUTPUT(SimTime, " -okienko [1] przekierowuje klienta o numerze [", ASK kl TO Nr,"] do kolejki 

[2] | zmienna losowa=", zmlos); 
 

 

 

 

END IF; 

 

 

 

 

ASK Kolejka2 TO Wstaw(kl, kom); 

 

 

 

ELSE 

 

 

 

 

IF (kom) 

 

 

 

 

OUTPUT(SimTime, " -okienko [1] przekierowuje klienta o numerze [", ASK kl TO Nr,"] do kolejki 

[3] | zmienna losowa=", zmlos); 
 

 

 

 

END IF; 

 

 

 

 

ASK Kolejka3 TO Wstaw(kl, kom); 

 

 

 

END IF; 

 

 

DEC(stanowiska); 

 

 

END WHILE; 

 

END METHOD; 

END OBJECT; 
 
OBJECT Okienko2Obj; 
 

ASK METHOD Ustaw(IN sh: REAL; IN sc: REAL; IN kol:Kolejka2Obj; IN kw:BOOLEAN); 

 

BEGIN 

 

 

kom:=kw; 

 

 

shape:=sh; 

 

 

scale:=sc; 

 

 

Kolejka2:=kol; 

 

 

stanowiska:=0; 

 

 

NEW(los); 

 

END METHOD; 

 
 

TELL METHOD Obsluguj(); 

 

VAR 

 

 

kl:KlientObj; 

 

 

zmlos:REAL; 

 

BEGIN 

 

 

INC(stanowiska); 

 

 

WHILE ASK Kolejka2 TO numberIn > 0 

 

background image

 

 

 

kl:=ASK Kolejka2 TO Remove(); 

 

 

 

IF (kom) 

 

 

 

OUTPUT(SimTime, "  -rozpoczeto obsluge klienta o numerze [", ASK kl TO Nr,"] w okienku [2] | stan 

stanowiska:", stanowiska); 

 

 

 

 

 

END IF; 

 

 

 

WAIT DURATION Weibull(shape,scale) 

 

 

 

ON INTERRUPT 

 

 

 

END WAIT; 

 

 

 

IF (kom) 

 

 

 

OUTPUT(SimTime, " -klient o numerze [", ASK kl TO Nr, "] zostal obsluzony w okienku [2]"); 

 

 

 

END IF; 

 

 

 

zmlos:=ASK los Sample(); 

 

 

 

 

 

 

 

IF zmlos > 0.3 

 

 

 

 

IF (kom) 

 

 

 

 

OUTPUT(SimTime, " -okienko [2] przekierowuje klienta o numerze [", ASK kl TO Nr,"] do kolejki 

[2] | zmienna losowa=", zmlos); 
 

 

 

 

END IF; 

 

 

 

 

ASK Kolejka2 TO Wstaw(kl,kom); 

 

 

 

ELSE 

 

 

 

 

IF (kom) 

 

 

 

 

OUTPUT(SimTime, " -klient o numerze [", ASK kl TO Nr, "] opuscil system | zmienna losowa=", 

zmlos); 
 

 

 

 

END IF; 

 

 

 

 

czasprzebywania:=SimTime - ASK kl TO CzasWejscia; 

 

 

 

 

ASK kl TO usun(); 

 

 

 

END IF; 

 
 

 

END WHILE; 

 

 

DEC(stanowiska); 

 

END METHOD; 

END OBJECT; 
 
OBJECT Okienko3Obj; 
 

ASK METHOD Ustaw(IN meanw: REAL; IN kol: Kolejka3Obj; IN kol1: Kolejka1Obj; IN kw:BOOLEAN); 

 

BEGIN 

 

 

kom:=kw; 

 

 

meanwyk:=meanw; 

 

 

Kolejka3:=kol; 

 

 

NEW(los); 

 

 

Kolejka1:=kol1; 

 

END METHOD; 

 

 

 

TELL METHOD Obsluguj(); 

 

VAR 

 

 

kl:KlientObj; 

 

 

zmlos:REAL; 

 

BEGIN 

 

 

INC(stanowiska); 

 

 

WHILE ASK Kolejka3 TO numberIn > 0 

 

 

 

kl:=ASK Kolejka3 TO Remove(); 

 

 

 

IF (kom) 

 

 

 

OUTPUT(SimTime, "  -rozpoczeto obsluge klienta o numerze [", ASK kl TO Nr,"] w okienku [3] | stan 

stanowiska:", stanowiska); 
 

 

 

END IF; 

 

 

 

WAIT DURATION Exponential(meanwyk) 

 

 

 

ON INTERRUPT; 

 

 

 

END WAIT; 

 

 

 

IF (kom) 

 

 

 

OUTPUT(SimTime," -klient o numerze [", ASK kl TO Nr, "] zostal obsluzony w okienku [2]"); 

 

 

 

END IF; 

 

 

 

zmlos:=ASK los Sample(); 

background image

 

 

 

 

 

 

 

IF zmlos > 0.4 

 

 

 

 

IF (kom) 

 

 

 

 

OUTPUT(SimTime, " -okienko [3] przekierowuje klienta o numerze [", ASK kl TO Nr,"] do kolejki 

[1] | zmienna losowa=", zmlos); 
 

 

 

 

END IF; 

 

 

 

 

ASK Kolejka1 TO Wstaw(kl,kom); 

 

 

 

ELSE 

 

 

 

 

IF (kom) 

 

 

 

 

OUTPUT(SimTime, " -klient o numerze [", ASK kl TO Nr, "] opuscil system | zmienna losowa=", 

zmlos); 
 

 

 

 

END IF; 

 

 

 

 

czasprzebywania:=SimTime - ASK kl TO CzasWejscia; 

 

 

 

 

ASK kl TO usun(); 

 

 

 

END IF; 

 

 

END WHILE; 

 

 

DEC(stanowiska); 

 

END METHOD; 

END OBJECT; 
 
OBJECT KlientObj; 
 

ASK METHOD ustaw(IN numer: INTEGER; IN kol:Kolejka1Obj; IN show2:BOOLEAN); 

 

BEGIN 

 

 

Nr:=numer; 

 

 

show:=show2; 

 

 

Kolejka1:=kol; 

 

END METHOD; 

 
 

ASK METHOD usun(); 

 

BEGIN 

 

 

DISPOSE(SELF); 

 

END METHOD; 

 
 

ASK METHOD ustawCzas(); 

 

BEGIN 

 

 

CzasWejscia:=SimTime; 

 

END METHOD; 

END OBJECT; 
 
(*============================================================================main=======*) 
 
VAR 
 

okienko1:Okienko1Obj; 

 

okienko2:Okienko2Obj; 

 

okienko3:Okienko3Obj; 

 

kolejka1:Kolejka1Obj; 

 

kolejka2:Kolejka2Obj; 

 

kolejka3:Kolejka3Obj; 

 

generator:GeneratorObj; 

 

ch:CHAR; 

 

lo,hi,min,mean,max,shape,scale,meanwyk,praw1,praw2,praw3:REAL; 

 

ogran,losob,stwatch:INTEGER; 

 

monITS1, monITS2, monITS3, monSTA1, monSTA2, monSTA3: ITimedStatObj; 

 

monRS3, monRS2: RStatObj; 

 

KomunikatyWlaczone : BOOLEAN; 

 

 

BEGIN 
 

OUTPUT ("!Podstawy symulacji!"); 

 

OUTPUT (" sieci kolejkowe "); 

 

OUTPUT ("    zadanie 2    "); 

 

OUTPUT (" "); 

 

OUTPUT ("Aby rozpoczac symulacje prosze wcisnac dowolny klawisz"); 

background image

 

OUTPUT (" domyslnie komunikaty sa wyswietlane"); 

 

OUTPUT (" nacisnij 'n' aby nie wyswietlac komunikatow "); 

 

ch := ReadKey(); 

 
 

IF ((ch = 'n') OR (ch = 'N')) 

 

 

OUTPUT ("ie beda wyswietlane komunikaty."); 

 

END IF; 

 
 

OUTPUT (""); 

 

 

 

KomunikatyWlaczone := TRUE; 

 

IF ((ch = 'n') OR (ch = 'N')) 

 

 

KomunikatyWlaczone := FALSE; 

 

ELSE  

 

KomunikatyWlaczone := TRUE; 

 

END IF; 

 
 
 
 

OUTPUT (" "); 

 

OUTPUT ("ROZPOCZECIE SYMULACJI"); 

 

OUTPUT (" "); 

 
 

NEW(okienko1); 

 

NEW(okienko2); 

 

NEW(okienko3); 

 

NEW(kolejka1); 

 

NEW(kolejka2); 

 

NEW(kolejka3); 

 

NEW(generator); 

 

 

 

stwatch:=0; 

 

ogran:=5; 

 

lo:=1.2; 

 

hi:=5.6; 

 

min:=2.3; 

 

mean:=4.3; 

 

max:=5.6; 

 

shape:=3.5; 

 

scale:=7.8; 

 

meanwyk:=4.6; 

 

losob:=15; 

 

 

 

ASK generator TO Ustaw(lo,hi, kolejka1,stwatch, KomunikatyWlaczone); 

 

ASK kolejka1 TO Ustaw(okienko1); 

 

 

ASK okienko1 TO Ustaw(min,mean,max,kolejka1,kolejka2,kolejka3, KomunikatyWlaczone); 

 

ASK kolejka2 TO Ustaw(okienko2, ogran); 

 

 

ASK okienko2 TO Ustaw(shape,scale,kolejka2, KomunikatyWlaczone); 

 

ASK kolejka3 TO Ustaw(okienko3); 

 

 

ASK okienko3 TO Ustaw(meanwyk,kolejka3,kolejka1, KomunikatyWlaczone); 

 
 

TELL generator TO Generuj(losob); 

 

 

 

StartSimulation(); 

 

monITS1 := GETMONITOR(ASK kolejka1 TO dlugosc, ITimedStatObj); 

 

monITS2 := GETMONITOR(ASK kolejka2 TO dlugosc, ITimedStatObj); 

 

monITS3 := GETMONITOR(ASK kolejka3 TO dlugosc, ITimedStatObj); 

 

monSTA1 := GETMONITOR(ASK okienko1 TO stanowiska, ITimedStatObj); 

 

monSTA2 := GETMONITOR(ASK okienko2 TO stanowiska, ITimedStatObj); 

 

monSTA3 := GETMONITOR(ASK okienko3 TO stanowiska, ITimedStatObj); 

 

monRS2 := GETMONITOR(ASK okienko2 TO czasprzebywania, RStatObj); 

 

monRS3 := GETMONITOR(ASK okienko3 TO czasprzebywania, RStatObj); 

background image

 
 

OUTPUT ("=========================================================================================="); 

 

OUTPUT (" SREDNIA "); 

 

OUTPUT ("========="); 

 

OUTPUT ("-srednia liczba zgloszen w pierwszej kolejce: ",ASK  monITS1 TO Mean()); 

 

OUTPUT ("          +odchylenie: ", ASK monITS1 TO StdDev()); 

 

 

 

OUTPUT ("-srednia liczba zgloszen w drugiej kolejce: ",ASK  monITS2 TO Mean()); 

 

OUTPUT ("          +odchylenie: ", ASK monITS2 TO StdDev()); 

 
 

OUTPUT ("-srednia liczba zgloszen w trzeciej kolejce: ",ASK  monITS3 TO Mean()); 

 

OUTPUT ("          +odchylenie: ", ASK monITS3 TO StdDev()); 

 

 

 

OUTPUT ("-sredni czas przebywania zgloszenia w SMO2: ",ASK  monRS2 TO Mean()); 

 

OUTPUT ("          +odchylenie: ", ASK monRS2 TO StdDev()); 

 

 

 

OUTPUT ("-sredni czas przebywania zgloszenia w SMO3: ",ASK  monRS3 TO Mean()); 

 

OUTPUT ("          +odchylenie: ", ASK monRS3 TO StdDev()); 

 

 

 

OUTPUT ("-srednia liczba zajetych kanalow w pierwszym okienku: ", ASK monSTA1 TO Mean()); 

 

OUTPUT ("          +odchylenie: ", ASK monSTA1 TO StdDev()); 

 

 

 

OUTPUT ("-srednia liczba zajetych kanalow w drugim okienku: ", ASK monSTA2 TO Mean()); 

 

OUTPUT ("          +odchylenie: ", ASK monSTA2 TO StdDev()); 

 

 

 

OUTPUT ("-srednia liczba zajetych kanalow w trzecim okienku: ", ASK monSTA3 TO Mean()); 

 

OUTPUT ("          +odchylenie: ", ASK monSTA3 TO StdDev()); 

 

 

 

OUTPUT (" PRAWDOPODOBIENSTWO "); 

 

OUTPUT ("===================="); 

 

praw1 := FLOAT(ASK kolejka1 TO odrzucone)/FLOAT(ASK kolejka1 TO przyjete + ASK kolejka1 TO odrzucone); 

 

OUTPUT ("-prawdopodobiestwo obsluzenia przez pierwsze okienko: ", praw1); 

 
 

praw2 := FLOAT(ASK kolejka2 TO odrzucone)/FLOAT(ASK kolejka2 TO przyjete + ASK kolejka2 TO odrzucone); 

 

OUTPUT ("-prawdopodobienstwo obsluzenia przez drugie okienko: ", praw2); 

 
 

praw3 := FLOAT(ASK kolejka3 TO odrzucone)/FLOAT(ASK kolejka3 TO przyjete + ASK kolejka3 TO odrzucone); 

 

OUTPUT ("-prawdopodobienstwo obsluzenia przez trzecie okienko: ", praw3); 

 
(*==========================================zwalnianie==================*) 
 
 

DISPOSE(okienko1); 

 

DISPOSE(okienko2); 

 

DISPOSE(okienko3); 

 

DISPOSE(kolejka1); 

 

DISPOSE(kolejka2); 

 

DISPOSE(kolejka3); 

 

DISPOSE(generator); 

 

OUTPUT (" "); 

 

OUTPUT ("..."); 

 

OUTPUT ("!aby zamknac to okienko, nacisnij dowolny klawisz!"); 

 

OUTPUT ("!aby zapisac wynik do pliku Stdout.txt nacisnij ALT i 2xENTER"); 

 

ch:=ReadKey(); 

 

 

 
END MODULE. 
 

Wnioski 
Zadanie zostało rozwiązane. Otrzymane wartości wydają się być poprawne.