Revision: 53930
Initial Code
Initial URL
Initial Description
Initial Title
Initial Tags
Initial Language
at December 3, 2011 06:55 by tlapas
Initial Code
#include <iostream> #include <ctime> #include "red_polje.h" //#include "red_pokazivac.h" using namespace std; int br_pac = 0; pacijent polje[10000], tmp_polje[1000]; void wait (int sec) { clock_t endwait; endwait = clock() + sec*CLOCKS_PER_SEC; while (clock() < endwait) {} } void gen () { int N; do { cout << "\nKoliko slucajnih parova brojeva zelite generirati: "; cin >> N; if (N<1) cout << "Greska!\n"; } while(N<1 || N>10000); br_pac += N; for (int i=0; i<br_pac; i++) { tmp_polje[i].Xi = rand()%10000+1; tmp_polje[i].Yi = rand()%10000+1; tmp_polje[i].prioritet = rand()%4+1; } wait(1); cout << "\nZapisi su uspjesno dodani u polje.\n"; } int provjera_zapisa (int prioritet, int broj) { if (broj == 0) return -1; int br = -1; for (int i=0; i<broj; i++) { if (FrontQ(red).prioritet > prioritet && br<0) br = i; EnQueueQ(FrontQ(red),red); DeQueueQ(red); } if (br >= 0) return br; else return -1; } clock_t pvrijeme, zvrijeme; bool simulacija = false; void sim (bool prioritet) { for (int i=0; i<br_pac; i++) polje[i] = tmp_polje[i]; pvrijeme = clock(); if (br_pac == 0) { cout << "\nGreska, polje je prazno! Koristite mogucnost 1.\n"; simulacija = false; return; } pacijent element; int brojac=0, broj=0, rbroj; cout << "\nPokretanje simulacije:\n"; while (brojac<br_pac || !IsEmptyQ(red)) { cout << endl << endl; if (brojac == 0) { element = polje[brojac]; brojac++; cout << "Prvi pacijent ulazi u ordinaciju.\nPacjent ce u ordinaciji provesti " << element.Yi << " sekundi.\n"; if (prioritet) cout << "Njegov prioritet je " << element.prioritet << ".\n"; } else if (brojac < br_pac) { if (element.Yi > polje[brojac].Xi) { element.Yi -= polje[brojac].Xi; cout << "U cekaonicu ulazi novi pacijent."; if (!prioritet) EnQueueQ(polje[brojac], red); else { cout << " Njegov prioritet je: " << polje[brojac].prioritet << ".\n"; rbroj = provjera_zapisa(polje[brojac].prioritet, broj); if (rbroj >= 0) { provjera_zapisa (5, rbroj); EnQueueQ(polje[brojac], red); provjera_zapisa(5, broj-rbroj); if (rbroj) cout << "Pacijent preskace " << broj - rbroj << " pacijenata(nta) u redu jer ima veci prioritet.\n"; else cout << "Pacijent se pomice na celo reda jer ima najveci prioritet.\n"; } else EnQueueQ(polje[brojac], red); } brojac++; broj++; cout << "\nU cekaonici je trenutno " << broj << " pacijenata(nta).\n"; cout << "Pacijent koji je u ordinaciji ce tamo biti jos: " << element.Yi << " sekundi.\n"; } else if (element.Yi < polje[brojac].Xi) { polje[brojac].Xi -= element.Yi; if (IsEmptyQ(red)) { element = polje[brojac]; brojac++; } else { element = FrontQ(red); DeQueueQ(red); broj--; } cout << "U ordinaciju ulazi novi pacijent.\nTamo ce provesti: " << element.Yi << " sekundi.\n"; if (prioritet) cout << "Njegov prioritet je: " << element.prioritet << ".\n"; cout << "U cekaonici je trenutno " << broj << " pacijenata(nt).\n"; } else { cout << "U cekaonicu ulazi novi pacijent.\n"; if (!prioritet) EnQueueQ(polje[brojac], red); else { cout << " Njegov prioritet je " << polje[brojac].prioritet << ".\n"; rbroj = provjera_zapisa(polje[brojac].prioritet, broj); if (rbroj >= 0) { provjera_zapisa(5, rbroj); EnQueueQ(polje[brojac], red); provjera_zapisa(5, broj - rbroj); if (rbroj) cout << "Pacijent preskace " << broj - rbroj << " pacijenata(nt) u redu jer ima veci prioritet.\n"; else cout << "Pacijent se pomice na celo reda jer ima najveci prioritet.\n"; } else EnQueueQ(polje[brojac], red); } brojac++; element = FrontQ(red); DeQueueQ(red); cout << "U ordinaciju ulazi novi pacijent.\nTamo ce provesti: " << element.Yi << " sekundi.\n"; if (prioritet) cout << "Njegov prioritet je: " << element.prioritet << ".\n"; cout << "U cekaonici je trenutno " << broj << " pacijenata(nt).\n"; } } else { element = FrontQ(red); DeQueueQ(red); cout << "U ordinaciju je usao novi pacijent.\nTamo ce provesti: " << element.Yi << " sekundi.\n"; broj--; if (prioritet) cout << "Njegov prioritet je: " << element.prioritet << ".\n"; cout << "U cekaonici je trenutno " << broj << " pacijenata(nt).\n"; } wait(2); } zvrijeme = clock(); simulacija = true; br_pac = 0; InitQ(red); } void vrij () { if (br_pac==0 && simulacija==false) { cout << "\nNiste pokrenuli simulaciju, koristite mogucnosti 2 ili 3.\n"; return; } cout << "\nSimulacija je trajala " << ((float)zvrijeme-pvrijeme)/1000 << " sekunde(u).\n"; } int main () { int izbor; srand(time(0)); rand(); InitQ(red); do { cout << "\tSIMULACIJA RADA ORDINACIJSKE CEKAONICE\n\n\t\tIZBORNIK\n\n"; cout << "1. Generiranje niza od N parova slucajnih brojeva\n"; cout << "2. Simulacija cekaonice\n"; cout << "3. Simulacija cekaonice s prioritetom\n"; cout << "4. Izracun vremena trajanja simulacije\n"; cout << "9. Izlaz iz programa\n\n"; cout << "Vas izbor je: "; cin >> izbor; switch (izbor) { case 1: gen(); break; case 2: sim(0); break; case 3: sim(1); break; case 4: vrij(); break; case 9: cout << endl; system("pause"); return 0; } cout << endl; } while (1); }
Initial URL
Initial Description
Glavni program koji simulira ordinacijsku Äekaonicu
Initial Title
RED - glavni program
Initial Tags
Initial Language
C++