Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- {Project - Andrei Dodea - Modelling of systems - Zilina, Slovakia 2019-2020}
- program simulation;
- { Function for generation random number }
- var digits,seed:Integer;
- function generateRandom():Integer;
- var start,endpart:Integer;
- n:String;
- code: Integer;
- begin
- code := 1;
- str((seed*seed), n);
- while length(n) < digits * 2 do
- begin
- n := '0' + n;
- end;
- start := trunc(digits/2);
- endpart := start + digits;
- code := code + 111111;
- val(copy(n,start,endpart),seed,code);
- generateRandom := seed;
- end;
- { Simulation }
- var
- tfinish,nrWaitingPers,service,RNGarrival,RNGservice,currentTime,indexServed,indexArrived:Integer;
- waitingTime : Array[1..2880] of Integer;
- servingTime : Array[1..2880] of Integer;
- arrivalTime : Array[1..2880] of Integer;
- i,countPersons,totalTimeWaited,totalTimeServed,totalTimeArrived:Integer;
- { statistics variables }
- avgTimeWait,avgTimeService,avgTimeArrive:Real;
- begin
- { initializating variables }
- totalTimeServed := 0;
- countPersons := 0;
- indexArrived := 1;
- digits := 2;
- seed := 1142;
- tfinish := 28800;
- nrWaitingPers := 0;
- service := 0;
- RNGarrival := generateRandom();
- RNGservice := generateRandom();
- currentTime := 0;
- indexServed := 0;
- For i := 1 to 2880 do
- Begin
- waitingTime[i] := -1;
- servingTime[i] := -1;
- arrivalTime[i] := -1;
- End;
- arrivalTime[indexArrived] := RNGarrival;
- avgTimeService := 0;
- avgTimeWait := 0;
- totalTimeWaited := 0;
- totalTimeServed := 0;
- totalTimeArrived := 0;
- { logic loop }
- write('Seed input : ');
- readln (Seed);
- While currentTime < tfinish do
- Begin
- currentTime := currentTime + 1;
- RNGarrival := RNGarrival - 1;
- if (nrWaitingPers = 0) AND (service = 0) then Begin
- if RNGarrival <= 0 then Begin
- service := 1;
- if RNGservice <= 0 then
- RNGservice := generateRandom();
- RNGservice := RNGservice - 1;
- indexServed := indexServed + 1;
- waitingTime[indexServed] := 0;
- servingTime[indexServed] := servingTime[indexServed] + 1;
- end;
- end
- else if (nrWaitingPers = 0) AND (service = 1) then begin
- if RNGarrival <= 0 then begin
- nrWaitingPers := nrWaitingPers + 1;
- end;
- if nrWaitingPers > 0 then
- waitingTime[indexServed+nrWaitingPers] := waitingTime[indexServed+nrWaitingPers] + 1;
- servingTime[indexServed] := servingTime[indexServed] + 1;
- RNGservice := RNGservice - 1;
- end
- else if (nrWaitingPers >= 1) AND (service = 1) then begin
- if RNGarrival <= 0 then
- nrWaitingPers := nrWaitingPers + 1;
- servingTime[indexServed] := servingTime[indexServed] + 1;
- RNGservice := RNGservice - 1;
- For i := 1 to nrWaitingPers do
- Begin
- waitingTime[i] := waitingTime[i] + 1;
- End;
- end;
- if RNGarrival = 0 then begin
- RNGarrival := generateRandom();
- indexArrived := indexArrived + 1;
- arrivalTime[indexArrived] := RNGarrival;
- end;
- if RNGservice = 0 then begin
- indexServed := indexServed + 1;
- RNGservice := generateRandom();
- service := 0;
- if nrWaitingPers > 0 then
- nrWaitingPers := nrWaitingPers - 1;
- end;
- end;
- For i := 1 to 2880 do
- Begin
- if waitingTime[i] <> -1 then
- totalTimeWaited := totalTimeWaited + waitingTime[i];
- if servingTime[i] <> -1 then
- totalTimeServed := totalTimeServed + servingTime[i];
- if arrivalTime[i] <> -1 then
- totalTimeArrived := totalTimeArrived + arrivalTime[i];
- End;
- countPersons := nrWaitingPers + indexServed;
- avgTimeWait := totalTimeWaited / nrWaitingPers;
- avgTimeService := totalTimeServed / indexServed;
- avgTimeArrive := totalTimeArrived / countPersons;
- writeln('Total persons count : ',countPersons);
- writeln('Total persons served : ',indexServed);
- writeln('Total time waited : ',totalTimeWaited);
- writeln('Average time for waiting: ',avgTimeWait);
- writeln('Average time for service: ',avgTimeService);
- writeln('Average time for arrive: ',avgTimeArrive);
- writeln('Simulation time: ',tfinish);
- end.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement