Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // 12-6
- #include <iostream>
- #include <cstdlib>
- #include <ctime>
- #include "queue.h"
- const int MIN_PER_HR = 60;
- bool newcustomer(double x);
- int main()
- {
- using std::cin;
- using std::cout;
- using std::endl;
- srand(time(NULL));
- cout << "Przypadek: 2 bankomaty" << endl;
- cout << "Podaj maksymalna dlugosc kolejki oby 2 bankomatow: ";
- int qs;
- cin >> qs;
- Queue atm1(qs);
- Queue atm2(qs);
- cout << "Podaj symulowany czas (w godzinach) ";
- int hr;
- cin >> hr;
- long cycletime = hr * MIN_PER_HR;
- cout << "Podaj srednia liczbe klientow na godzine: ";
- double customers_per_hour;
- cin >> customers_per_hour;
- double min_per_customer = MIN_PER_HR / customers_per_hour;
- Item temp;
- long turnaways = 0;
- long served = 0;
- long served1 = 0;
- long served2 = 0;
- long customers = 0;
- long sum_line1 = 0;
- long sum_line2 = 0;
- long total_sum_line;
- int wait_time1 = 0;
- int wait_time2 = 0;
- long line_wait1 = 0;
- long line_wait2 = 0;
- long total_line_wait;
- for (int cycle = 0; cycle < cycletime; cycle++)
- {
- if (newcustomer(min_per_customer))
- {
- if (atm1.isfull() && atm2.isfull())
- turnaways++;
- else if(!atm1.isfull() && !atm2.isfull())
- {
- customers++;
- temp.set(cycle);
- if (atm1 < atm2)
- atm1.enqueue(temp);
- else
- atm2.enqueue(temp);
- }
- else
- {
- if (atm1.isfull() && !atm2.isfull())
- {
- customers++;
- temp.set(cycle);
- atm2.enqueue(temp);
- }
- else if(!atm1.isfull() && atm2.isfull())
- {
- customers++;
- temp.set(cycle);
- atm1.enqueue(temp);
- }
- }
- }
- if (wait_time1 <= 0 && !atm1.isempty())
- {
- atm1.dequeue(temp);
- wait_time1 = temp.ptime();
- line_wait1 += cycle - temp.when();
- served1++;
- }
- if (wait_time1 > 0)
- wait_time1--;
- sum_line1 += atm1.queuecount();
- if (wait_time2 <= 0 && !atm2.isempty())
- {
- atm2.dequeue(temp);
- wait_time2 = temp.ptime();
- line_wait2 += cycle - temp.when();
- served2++;
- }
- if (wait_time2 > 0)
- wait_time2--;
- sum_line2 += atm2.queuecount();
- }
- total_line_wait = line_wait1 + line_wait2;
- total_sum_line = sum_line1 + sum_line2;
- served = served1 + served2;
- if (customers > 0)
- {
- cout << "Liczba przyjetych klientow w oby 2 bankomatach: " << customers << endl;
- cout << "Liczba klientow odrzuconych: " << turnaways << endl;
- cout << "Liczba klientow obsluzonych w oby 2 bankomatach: " << served << endl;
- cout << "srednia dlugosc kolejki w bankomacie 1: ";
- cout << double(sum_line1) / cycletime << endl;
- cout << "srednia dlugosc kolejki w bankomacie 2: ";
- cout << double(sum_line2) / cycletime << endl;
- cout << "srednia dlugosc kolejki lacznie: ";
- cout << (double(sum_line1) / cycletime + double(sum_line2) / cycletime) / 2 << endl;
- cout << double(total_sum_line) / cycletime << endl;
- cout << "sredni czas oczekiwania w bankomacie 1: ";
- cout << double(line_wait1) / served1 << " minut" << endl;
- cout << "sredni czas oczekiwania w bankomacie 2: ";
- cout << double(line_wait2) / served2 << " minut" << endl;
- cout << "sredni czas oczekiwania lacznie: ";
- cout << (double(line_wait1) / served1 + double(line_wait2) / served2) / 2 << " minut" << endl;
- cout << double(total_line_wait) / served << endl;
- }
- else
- {
- cout << "brak klientow!\n";
- }
- cout << "Gotowe.\n";
- return 0;
- }
- bool newcustomer(double x)
- {
- return std::rand() * x / RAND_MAX < 1;
- }
Add Comment
Please, Sign In to add comment