Leedwon

Untitled

May 1st, 2017
40
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.40 KB | None | 0 0
  1. // 12-6
  2.  
  3. #include <iostream>
  4. #include <cstdlib>
  5. #include <ctime>
  6. #include "queue.h"
  7.  
  8. const int MIN_PER_HR = 60;
  9. bool newcustomer(double x);
  10.  
  11. int main()
  12. {
  13. using std::cin;
  14. using std::cout;
  15. using std::endl;
  16. srand(time(NULL));
  17.  
  18. cout << "Przypadek: 2 bankomaty" << endl;
  19. cout << "Podaj maksymalna dlugosc kolejki oby 2 bankomatow: ";
  20. int qs;
  21. cin >> qs;
  22. Queue atm1(qs);
  23. Queue atm2(qs);
  24.  
  25.  
  26. cout << "Podaj symulowany czas (w godzinach) ";
  27. int hr;
  28. cin >> hr;
  29. long cycletime = hr * MIN_PER_HR;
  30.  
  31.  
  32. cout << "Podaj srednia liczbe klientow na godzine: ";
  33. double customers_per_hour;
  34. cin >> customers_per_hour;
  35. double min_per_customer = MIN_PER_HR / customers_per_hour;
  36.  
  37. Item temp;
  38. long turnaways = 0;
  39. long served = 0;
  40. long served1 = 0;
  41. long served2 = 0;
  42. long customers = 0;
  43. long sum_line1 = 0;
  44. long sum_line2 = 0;
  45. long total_sum_line;
  46. int wait_time1 = 0;
  47. int wait_time2 = 0;
  48. long line_wait1 = 0;
  49. long line_wait2 = 0;
  50. long total_line_wait;
  51.  
  52. for (int cycle = 0; cycle < cycletime; cycle++)
  53. {
  54. if (newcustomer(min_per_customer))
  55. {
  56. if (atm1.isfull() && atm2.isfull())
  57. turnaways++;
  58. else if(!atm1.isfull() && !atm2.isfull())
  59. {
  60. customers++;
  61. temp.set(cycle);
  62. if (atm1 < atm2)
  63. atm1.enqueue(temp);
  64. else
  65. atm2.enqueue(temp);
  66. }
  67. else
  68. {
  69. if (atm1.isfull() && !atm2.isfull())
  70. {
  71. customers++;
  72. temp.set(cycle);
  73. atm2.enqueue(temp);
  74.  
  75. }
  76. else if(!atm1.isfull() && atm2.isfull())
  77. {
  78. customers++;
  79. temp.set(cycle);
  80. atm1.enqueue(temp);
  81. }
  82. }
  83. }
  84. if (wait_time1 <= 0 && !atm1.isempty())
  85. {
  86. atm1.dequeue(temp);
  87. wait_time1 = temp.ptime();
  88. line_wait1 += cycle - temp.when();
  89. served1++;
  90. }
  91. if (wait_time1 > 0)
  92. wait_time1--;
  93. sum_line1 += atm1.queuecount();
  94.  
  95. if (wait_time2 <= 0 && !atm2.isempty())
  96. {
  97. atm2.dequeue(temp);
  98. wait_time2 = temp.ptime();
  99. line_wait2 += cycle - temp.when();
  100. served2++;
  101. }
  102. if (wait_time2 > 0)
  103. wait_time2--;
  104. sum_line2 += atm2.queuecount();
  105. }
  106. total_line_wait = line_wait1 + line_wait2;
  107. total_sum_line = sum_line1 + sum_line2;
  108. served = served1 + served2;
  109.  
  110.  
  111. if (customers > 0)
  112. {
  113. cout << "Liczba przyjetych klientow w oby 2 bankomatach: " << customers << endl;
  114. cout << "Liczba klientow odrzuconych: " << turnaways << endl;
  115. cout << "Liczba klientow obsluzonych w oby 2 bankomatach: " << served << endl;
  116. cout << "srednia dlugosc kolejki w bankomacie 1: ";
  117. cout << double(sum_line1) / cycletime << endl;
  118. cout << "srednia dlugosc kolejki w bankomacie 2: ";
  119. cout << double(sum_line2) / cycletime << endl;
  120. cout << "srednia dlugosc kolejki lacznie: ";
  121. cout << (double(sum_line1) / cycletime + double(sum_line2) / cycletime) / 2 << endl;
  122. cout << double(total_sum_line) / cycletime << endl;
  123. cout << "sredni czas oczekiwania w bankomacie 1: ";
  124. cout << double(line_wait1) / served1 << " minut" << endl;
  125. cout << "sredni czas oczekiwania w bankomacie 2: ";
  126. cout << double(line_wait2) / served2 << " minut" << endl;
  127. cout << "sredni czas oczekiwania lacznie: ";
  128. cout << (double(line_wait1) / served1 + double(line_wait2) / served2) / 2 << " minut" << endl;
  129. cout << double(total_line_wait) / served << endl;
  130. }
  131. else
  132. {
  133. cout << "brak klientow!\n";
  134. }
  135. cout << "Gotowe.\n";
  136. return 0;
  137. }
  138.  
  139. bool newcustomer(double x)
  140. {
  141. return std::rand() * x / RAND_MAX < 1;
  142. }
Add Comment
Please, Sign In to add comment