/ Published in: C++
3. zadatak: simulacija reda lijeÄniÄke ordinacije, strukture podataka.
Expand |
Embed | Plain Text
Copy this code and paste it in your HTML
#include <iostream> #include <ctime> //#include "red_pokazivac.h" #include "red_polje.h" using namespace std; int broj_pacijenata = 0; tpacijent *p_pacijent, *r_pacijent; bool sim = false; void generiranje () { int n; do { cout << "\nKoliko parova slucajnih brojeva zelite generirati? "; cin >> n; if (n<1) cout << "Greska! Unesli ste krivi broj!\n"; } while(n<1); broj_pacijenata += n; p_pacijent = new tpacijent [n]; r_pacijent = new tpacijent [n]; for (int i=0; i<broj_pacijenata; i++) { r_pacijent[i].Xi = rand()%10000+1; r_pacijent[i].Yi = rand()%10000+1; r_pacijent[i].P = rand()%4+1; } cout << "\nZapisi su uspjesno izgenerirani i dodani u polje.\n"; } int provjera_zapisa (int P, int broj) { if (broj == 0) return -1; int br = -1; for (int i=0; i<broj; i++) { if (FrontQ(red).P > P && br<0) br = i; EnQueueQ(FrontQ(red),red); DeQueueQ(red); } if (br >= 0) return br; else return -1; } void cekanje (int sec) { clock_t kraj; kraj = clock() + sec*CLOCKS_PER_SEC; while (clock() < kraj) {} } clock_t vrijeme_pocetak, vrijeme_kraj; void simulacija (bool prioritet) { for (int i=0; i<broj_pacijenata; i++) p_pacijent[i] = r_pacijent[i]; vrijeme_pocetak = clock(); if (broj_pacijenata == 0) { cout << "\nPolje je prazno, koristite mogucnost 1.\n"; sim = false; return; } char p_prioritet[4][50] = {"kriticni slucaj", "rizicni slucaj", "slucaj niskog rizika", "nije hitan slucaj"}; tpacijent pacijent; int i=0, broj=0, br_zap; cout << endl; cout << "Simulacija:\n"; while (i<broj_pacijenata || !IsEmptyQ(red)) { cout << "-------------------------------------------------------------------------------\n"; if (i == 0) { pacijent = p_pacijent[i]; i++; cout << "Prvi pacijent je usao u ordinaciju. Tamo ce provesti " << pacijent.Yi << " vremenskih jedinica.\n"; if (prioritet) cout << "Njegov prioritet je " << p_prioritet[pacijent.P-1] << ".\n"; cekanje(1); } else if (i < broj_pacijenata) { if (pacijent.Yi > p_pacijent[i].Xi) { pacijent.Yi -= p_pacijent[i].Xi; cout << "U cekaonicu je usao novi pacijent."; if (!prioritet) EnQueueQ(p_pacijent[i], red); else { cout << " Njegov prioritet je: " << p_prioritet[p_pacijent[i].P-1] << ".\n"; br_zap = provjera_zapisa(p_pacijent[i].P, broj); if (br_zap >= 0) { provjera_zapisa (5, br_zap); EnQueueQ(p_pacijent[i], red); provjera_zapisa(5, broj-br_zap); if (br_zap) cout << "Pacijent je preskocio " << broj - br_zap << " pacijenta/pacijenata u redu jer ima veci prioritet.\n"; else cout << "Pacijent je dosao na celo reda jer ima najveci prioritet.\n"; cekanje(1); } else EnQueueQ(p_pacijent[i], red); } i++; broj++; cout << "U cekaonici je trenutno " << broj << " pacijenata.\n"; cout << "Pacijent u ordinaciji ce se tamo zadrzati: " << pacijent.Yi << " vremenskih jedinica.\n"; cekanje(1); } else if (pacijent.Yi < p_pacijent[i].Xi) { p_pacijent[i].Xi -= pacijent.Yi; if (IsEmptyQ(red)) { pacijent = p_pacijent[i]; i++; } else { pacijent = FrontQ(red); DeQueueQ(red); broj--; } cout << "U ordinaciju je usao novi pacijent. Tamo ce provesti: " << pacijent.Yi << " vremenskih jedinica.\n"; if (prioritet) cout << "Njegov prioritet je: " << p_prioritet[pacijent.P-1] << ".\n"; cout << "U cekaonici je trenutno " << broj << " pacijent/pacijenata.\n"; cekanje(1); } else { cout << "U cekaonicu je usao novi pacijent.\n"; if (!prioritet) EnQueueQ(p_pacijent[i], red); else { cout << " Njegov prioritet je: " << p_prioritet[p_pacijent[i].P-1] << ".\n"; br_zap = provjera_zapisa(p_pacijent[i].P, broj); if (br_zap >= 0) { provjera_zapisa(5, br_zap); EnQueueQ(p_pacijent[i], red); provjera_zapisa(5, broj - br_zap); if (br_zap) cout << "Pacijent je preskocio " << broj - br_zap << " pacijenta/pacijenata u redu jer ima veci prioritet.\n"; else cout << "Pacijent je dosao na celo reda jer ima najveci prioritet.\n"; } else EnQueueQ(p_pacijent[i], red); } i++; pacijent = FrontQ(red); DeQueueQ(red); cout << "U ordinaciju je usao novi pacijent. Tamo ce provesti: " << pacijent.Yi << " vremenskih jedinica.\n"; if (prioritet) cout << "Njegov prioritet je: " << p_prioritet[pacijent.P-1] << ".\n"; cout << "U cekaonici je trenutno " << broj << " pacijent/pacijenata.\n"; cekanje(1); } } else { pacijent = FrontQ(red); DeQueueQ(red); cout << "U ordinaciju je usao novi pacijent. Tamo ce provesti: " << pacijent.Yi << " vremenskih jedinica.\n"; broj--; if (prioritet) cout << "Njegov prioritet je: " << p_prioritet[pacijent.P-1] << ".\n"; cout << "U cekaonici je trenutno " << broj << " pacijent/pacijenata.\n"; } } vrijeme_kraj = clock(); broj_pacijenata = 0; sim = true; InitQ(red); } void vrijeme () { if (broj_pacijenata == 0 && !sim) { cout << "\nGreska! Niste pokrenuli simulaciju.\n"; return; } cout << "\nZadnja simulacija je trajala " << ((float)vrijeme_kraj-vrijeme_pocetak)/1000 << " sec.\n"; } int main () { int izbor; InitQ(red); srand(time(0)); rand(); do { cout << "Izbornik:\n"; cout << "1. Generiranje niza od N parova slucajnih brojeva [1-10000]\n"; cout << "2. Simulacija reda lijecnicke ordinacije [bez prioriteta]\n"; cout << "3. Simulacija reda lijecnicke ordinacije [s prioritetom]\n"; cout << "4. Izracun vremena trajanja simulacije\n"; cout << "0. Izlaz iz programa\n"; cout << "Vas izbor: "; cin >> izbor; switch (izbor) { case 1: generiranje(); break; case 2: simulacija(0); break; case 3: simulacija(1); break; case 4: vrijeme(); break; case 0: cout << endl; system("pause"); return 0; } cout << endl; } while (1); }