|
| 1 | +/* |
| 2 | + Napraviti program koji ispituje ispravnost jednog od Marfijevih zakona, koji glasi: |
| 3 | + "Vas red je uvek najsporiji.". |
| 4 | +
|
| 5 | + Simulirati placanje robe na tri kase. Rad svake kase predstavljen je jednom niti. |
| 6 | + Svaka nit dobija parametar koji predstavlja broj kupaca koje kasa treba da opsluzi. |
| 7 | + Broj kupaca je slucajan broj izmedju 1 i 30. |
| 8 | + Opsluzivanje svakog kupca simulirati uspavljivanjem niti na slucajan vremenski period izmedju 1 i 100 ms. |
| 9 | +
|
| 10 | + Izracunati trajanje kupovine na svakoj od kasa. |
| 11 | +
|
| 12 | + Na pocetku programa potrebno je pitati korisnika da unese redni broj kase na |
| 13 | + kojoj zeli da izvrsi kupovinu. |
| 14 | + Na kraju ispisati da li je Marfijev zakon potvrdjen. |
| 15 | + Ukoliko je kupovina na kasi koju je kupac izabrao trajala najduze, tada je Marfijev zakon potvrdjen. |
| 16 | +*/ |
| 17 | + |
| 18 | +#include <iostream> |
| 19 | +#include <thread> |
| 20 | + |
| 21 | +using namespace std; |
| 22 | +using namespace chrono; |
| 23 | + |
| 24 | +// Broj kasa |
| 25 | +const int N = 3; |
| 26 | +// Maksimalno vreme cekanja |
| 27 | +const int MAX_CEKANJE = 100; |
| 28 | +// Maksimalan broj ljudi u redu |
| 29 | +const int MAX_LJUDI = 30; |
| 30 | + |
| 31 | +// Funkcija koja simulira cekanje u redu sa n kupaca |
| 32 | +void f(int n, duration<double, milli> &v) { |
| 33 | + // Uzimanje vremena pre početka izvršavanja |
| 34 | + auto t0 = system_clock::now(); |
| 35 | + |
| 36 | + // Simuliranje čekanja |
| 37 | + for (int i = 0; i < n; i++) { |
| 38 | + // Uspavljuje trenutnu nit za prosledjeno vreme |
| 39 | + this_thread::sleep_for(milliseconds(rand() % MAX_CEKANJE + 1)); |
| 40 | + } |
| 41 | + |
| 42 | + // Uzimanje vremena nakon završetka izvršavanja |
| 43 | + auto t1 = system_clock::now(); |
| 44 | + |
| 45 | + // Ukupno čekanje |
| 46 | + v = t1 - t0; |
| 47 | +} |
| 48 | + |
| 49 | +int main() { |
| 50 | + // Slucajni brojevi se racunaju u odnosu na trnutno vreme |
| 51 | + srand(time(NULL)); |
| 52 | + |
| 53 | + // Redni broj kase |
| 54 | + int n; |
| 55 | + cout << "Unesite redni broj kase [0<=n<3]: " << endl; |
| 56 | + cin >> n; |
| 57 | + |
| 58 | + // Vremena čekanja na svakoj kasi |
| 59 | + duration<double, milli> v[N]; |
| 60 | + |
| 61 | + // Niti za simulaciju čekanja |
| 62 | + thread t[N]; |
| 63 | + |
| 64 | + //Simulacija čekanja |
| 65 | + for (int i = 0; i < N; i++) { |
| 66 | + t[i] = thread(f, rand() & MAX_LJUDI + 1, ref(v[i])); |
| 67 | + } |
| 68 | + for (int i = 0; i < N; i++) { |
| 69 | + t[i].join(); |
| 70 | + } |
| 71 | + |
| 72 | + // Pronalaženje reda u kojem se najduže čekalo |
| 73 | + auto max = v[0]; |
| 74 | + for (int i = 0; i < N; i++) { |
| 75 | + cout << "Ukupno cekanje reda br. " << i << " je: " << v[i].count() << endl; |
| 76 | + // Pronalaženje maksimuma |
| 77 | + if (v[i] > max) { |
| 78 | + max = v[i]; |
| 79 | + } |
| 80 | + } |
| 81 | + |
| 82 | + // Provera zakona |
| 83 | + if (v[n] == max) { |
| 84 | + cout << "Marfijev zakon potvrdjen!" << endl; |
| 85 | + } else { |
| 86 | + cout << "Marfijev zakon nije potvrdjen!" << endl; |
| 87 | + } |
| 88 | +} |
0 commit comments