Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- unit Model;
- interface
- implementation
- uses
- uTestFunkcje, uTypyOrazStale;
- var
- atSideA : boolean;
- atShore : boolean;
- queueAtA: integer;
- queueAtB: integer;
- passengersCount : integer;
- temp : integer;
- procedure inicjalizacja;
- begin
- //Inicjalizacja zmiennych
- queueAtA:=0;
- queueAtB:=0;
- passengersCount:=0;
- atShore :=true;
- atSideA := true;
- { Pierwszy pasazer na brzegu A }
- _Atrib [1] := _T0;
- _Atrib [2] := 1;
- Filem (1);
- { Pierwszy pasazer na brzegu B }
- _Atrib [1] := _T0;
- _Atrib [2] := 2;
- Filem (1);
- {Prom wyrusza za 5 minut}
- _Atrib [1] := _T+5;
- _Atrib [2] := 4;
- Filem (1);
- GenInit (1, 0, 5, 1, 1); //generator A;
- GenInit (3, 0, 7, 1, 2); //generator B;
- GenInit (10, 8, 12, 3, 3); //generator czasu przeprawy;
- end; { inicjalizacja }
- procedure wybor_zdarzenia (kod : integer);
- begin
- case kod of
- 1: { Przyjscie pasazera na brzeg A }
- begin
- { zaplanowanie zdarzenia przybycia następnego zgłoszenia }
- _Atrib [1] := _T + Erlng (1);
- _Atrib [2] := 1;
- Filem (1);
- { Prom jest po stronie A - przy brzegu }
- if atSideA and atShore then
- begin
- { Wolne miejsce na promie }
- if passengersCount < 20 then
- begin
- passengersCount := passengersCount + 1;
- end;
- if passengersCount = 20 then
- begin
- { Wyszukanie zaplanowanego zdarzenia odplyniecia promu }
- temp := Nfind(4, 5, 1, 2, 0);
- { Anulowanie zdarzenia odplyniecia promu }
- if temp <> 0 then
- Cancl(temp);
- { Odplyniecie promu }
- _Atrib [1] := _T;
- _Atrib [2] := 4;
- Filem (1);
- end;
- end
- else
- begin
- queueAtA := queueAtA + 1;
- end
- end;
- 2: { Przyjscie pasazera na brzeg A }
- begin
- { zaplanowanie zdarzenia przybycia następnego pasazera }
- _Atrib [1] := _T + Erlng (2);
- _Atrib [2] := 2;
- Filem (1);
- { Prom jest po stronie B - przy brzegu }
- if (not atSideA) and atShore then
- begin
- { Wolne miejsce na promie }
- if passengersCount < 20 then
- begin
- passengersCount := passengersCount + 1;
- end;
- if passengersCount = 20 then
- begin
- { Wyszukanie zaplanowanego zdarzenia odplyniecia promu }
- temp := Nfind(4, 5, 1, 2, 0);
- { Anulowanie zdarzenia odplyniecia promu }
- if temp <> 0 then
- Cancl(temp);
- { Odplyniecie promu }
- _Atrib [1] := _T;
- _Atrib [2] := 4;
- Filem (1);
- end;
- end
- else
- begin
- queueAtB := queueAtB + 1;
- end
- end;
- 3: { Zdarzenie przyplyniecia promu }
- begin
- atShore := true;
- passengersCount := 0;
- { Prom po stronie A }
- if atSideA then
- begin
- { Załadowanie całej kolejki na prom }
- if queueAtA < 20 then
- begin
- passengersCount := queueAtA;
- queueAtA := 0;
- end
- else
- begin
- passengersCount := 20;
- queueAtA := queueAtA - 20;
- { Odplyniecie promu }
- _Atrib [1] := _T;
- _Atrib [2] := 4;
- Filem (1);
- atShore :=false;
- end
- end
- else { Prom po stronie B }
- begin
- { Załadowanie całej kolejki na prom }
- if queueAtB < 20 then
- begin
- passengersCount := queueAtB;
- queueAtB := 0;
- end
- else
- begin
- passengersCount := 20;
- queueAtB := queueAtB - 20;
- { Odplyniecie promu }
- _Atrib [1] := _T;
- _Atrib [2] := 4;
- Filem (1);
- atShore :=false;
- end
- end;
- { Zaplanowanie zdarzenia odplyniecia na +5min }
- if atShore then
- begin
- _Atrib [1] := _T + 5;
- _Atrib [2] := 4;
- Filem (1);
- end
- end;
- 4: { Zdarzenie odplynicia promu }
- begin
- atShore :=false;
- { Wypelnienie hostogramow opisujacych liczbe pasazerow}
- if atSideA then
- Histo(passengersCount, 1)
- else
- Histo(passengersCount, 2);
- if atSideA then
- atSideA := false
- else
- atSideA := true;
- { Zaplanowanie zdarzenia przyplyniecia promu }
- _Atrib [1] := _T + Rnorm(3);
- _Atrib [2] := 3;
- Filem (1);
- end;
- end { case }
- end; { wybor_zdarzenia }
- initialization
- Intlc := inicjalizacja;
- Evnts := wybor_zdarzenia;
- end.
Add Comment
Please, Sign In to add comment