Advertisement
Guest User

Pascal is Pain

a guest
Jan 18th, 2020
125
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Pascal 4.36 KB | None | 0 0
  1. {Project - Andrei Dodea - Modelling of systems - Zilina, Slovakia 2019-2020}
  2. program simulation;
  3.  
  4. { Function for generation random number }
  5. var digits,seed:Integer;
  6. function generateRandom():Integer;
  7. var start,endpart:Integer;
  8.     n:String;
  9.     code: Integer;
  10. begin
  11.     code := 1;
  12.     str((seed*seed), n);
  13.     while length(n) < digits * 2 do
  14.     begin
  15.         n := '0' + n;
  16.     end;
  17.     start := trunc(digits/2);
  18.     endpart := start + digits;
  19.     code := code + 111111;
  20.     val(copy(n,start,endpart),seed,code);
  21.     generateRandom := seed;
  22. end;
  23.  
  24. { Simulation }
  25. var
  26.     tfinish,nrWaitingPers,service,RNGarrival,RNGservice,currentTime,indexServed,indexArrived:Integer;
  27.     waitingTime : Array[1..2880] of Integer;
  28.     servingTime : Array[1..2880] of Integer;
  29.     arrivalTime : Array[1..2880] of Integer;
  30.     i,countPersons,totalTimeWaited,totalTimeServed,totalTimeArrived:Integer;
  31.     { statistics variables  }
  32.     avgTimeWait,avgTimeService,avgTimeArrive:Real;
  33.    
  34. begin
  35.   { initializating variables }
  36.   totalTimeServed := 0;
  37.   countPersons := 0;
  38.   indexArrived := 1;
  39.   digits := 2;
  40.   seed := 1142;
  41.   tfinish := 28800;
  42.   nrWaitingPers := 0;
  43.   service := 0;
  44.   RNGarrival := generateRandom();
  45.   RNGservice := generateRandom();
  46.   currentTime := 0;
  47.   indexServed := 0;
  48.   For i := 1 to 2880 do
  49.   Begin
  50.     waitingTime[i] := -1;
  51.     servingTime[i] := -1;
  52.     arrivalTime[i] := -1;
  53.   End;
  54.   arrivalTime[indexArrived] := RNGarrival;
  55.   avgTimeService := 0;
  56.   avgTimeWait := 0;
  57.   totalTimeWaited := 0;
  58.   totalTimeServed := 0;
  59.   totalTimeArrived := 0;
  60.   { logic loop }
  61.   write('Seed input : ');
  62.   readln (Seed);
  63.   While currentTime < tfinish do
  64.   Begin
  65.       currentTime := currentTime + 1;
  66.       RNGarrival := RNGarrival - 1;
  67.       if (nrWaitingPers = 0) AND (service = 0) then Begin
  68.             if RNGarrival <= 0 then Begin
  69.                 service := 1;
  70.                 if RNGservice <= 0 then
  71.                     RNGservice := generateRandom();
  72.                 RNGservice := RNGservice - 1;
  73.                 indexServed := indexServed + 1;
  74.                 waitingTime[indexServed] := 0;
  75.                 servingTime[indexServed] := servingTime[indexServed] + 1;
  76.             end;
  77.         end
  78.       else if (nrWaitingPers = 0) AND (service = 1) then begin
  79.             if RNGarrival <= 0 then begin
  80.                 nrWaitingPers := nrWaitingPers + 1;
  81.             end;
  82.             if nrWaitingPers > 0 then
  83.                 waitingTime[indexServed+nrWaitingPers] := waitingTime[indexServed+nrWaitingPers] + 1;
  84.             servingTime[indexServed] := servingTime[indexServed] + 1;
  85.             RNGservice := RNGservice - 1;
  86.       end
  87.       else if (nrWaitingPers >= 1) AND (service = 1) then begin
  88.             if RNGarrival <= 0 then
  89.                 nrWaitingPers := nrWaitingPers + 1;
  90.             servingTime[indexServed] := servingTime[indexServed] + 1;
  91.             RNGservice := RNGservice - 1;
  92.             For i := 1 to nrWaitingPers do
  93.             Begin
  94.                 waitingTime[i] := waitingTime[i] + 1;
  95.             End;
  96.       end;
  97.       if RNGarrival = 0 then begin
  98.         RNGarrival := generateRandom();
  99.         indexArrived := indexArrived + 1;
  100.         arrivalTime[indexArrived] := RNGarrival;
  101.       end;
  102.       if RNGservice = 0 then begin
  103.         indexServed := indexServed + 1;
  104.         RNGservice := generateRandom();
  105.         service := 0;
  106.         if nrWaitingPers > 0 then
  107.             nrWaitingPers := nrWaitingPers - 1;
  108.       end;
  109.   end;  
  110.   For i := 1 to 2880 do
  111.   Begin
  112.     if waitingTime[i] <> -1 then
  113.         totalTimeWaited := totalTimeWaited + waitingTime[i];
  114.     if servingTime[i] <> -1 then
  115.         totalTimeServed := totalTimeServed + servingTime[i];
  116.     if arrivalTime[i] <> -1 then    
  117.         totalTimeArrived := totalTimeArrived + arrivalTime[i];
  118.   End;
  119.   countPersons := nrWaitingPers + indexServed;
  120.   avgTimeWait := totalTimeWaited / nrWaitingPers;
  121.   avgTimeService := totalTimeServed / indexServed;
  122.   avgTimeArrive := totalTimeArrived / countPersons;
  123.   writeln('Total persons count : ',countPersons);
  124.   writeln('Total persons served : ',indexServed);
  125.   writeln('Total time waited : ',totalTimeWaited);
  126.   writeln('Average time for waiting: ',avgTimeWait);
  127.   writeln('Average time for service: ',avgTimeService);
  128.   writeln('Average time for arrive: ',avgTimeArrive);
  129.   writeln('Simulation time: ',tfinish);
  130. end.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement