/ Published in: C++
Main.cpp ->zadatak 3, kolegij Strukture Podataka, Fakultet Organizacije i Informatike Varazdin
Expand |
Embed | Plain Text
#include<iostream> #include<ctime> #include "red_polje.h" //#include "red_pokazivac.h" using namespace std; queue *red=new queue; queue *cekaonica=new queue; tred el; int Nsum=0; int prvi() { int N=0; cout<<"Unesite broj N: "; cin>>N; Nsum+=N; srand(time(NULL)); for (int i=0;i<N;i++) { el.x=rand()%10000+1; el.y=rand()%10000+1; EnQueueQ(el,red); } cout<<"Izgenerirano je "<<N<<" slucajnih brojeva!\n"; return 0; } int VrijemeTrajanja(int v) { cout<<"Vrijeme trajanja: "<<v<<" sec\n"; cout<<"Prosjecno cekanje pacijenta: "<<v/Nsum<<" sec\n"; return 0; } void drugi() { int stanje_cekaonica=0, cekanje=0, BrPuo=0, vrijeme=0; bool PuOrdinaciji=false; int PomPolje[Nsum]; if (IsEmptyQ(red)) { cout<<"Red je prazan!\n"; return; } InitQ(cekaonica); for (int j=1;j<=Nsum;j++) { el=FrontQ(red); stanje_cekaonica++; DeQueueQ(red); el.prioritet=short(rand()%4+1); el.i=j; vrijeme+=el.x; PomPolje[j-1]=cekanje; cout<<"Pacijent br. "<<el.i<<" ulazi u kliniku...\n"; cout<<"Prioritet: "; if (el.prioritet==1) cout<<"kriticni slucaj\n"; else if (el.prioritet==2) cout<<"rizicni slucaj\n"; else if (el.prioritet==3) cout<<"slucaj niskog rizika\n"; else if (el.prioritet==4) cout<<"nije hitan slucaj\n"; //pacijent je usao u kliniku i odredjen mu je prioritet if (stanje_cekaonica>1) { //usporedjujemo prioritete ako je stanje u cekaonici >1 for (int z=1;z<stanje_cekaonica;z++) { //usporedba prioriteta novog pacijenta s prioritetom ostalih tred el2=FrontQ(cekaonica), pom; DeQueueQ(cekaonica); if (el.i==el2.i) continue; if (el2.prioritet<el.prioritet||(el2.prioritet==el.prioritet&&el2.i<el.i)) { pom=el2; el2=el; el=pom; } EnQueueQ(el2,cekaonica); } } //el je sada najprioritetniji pacijent if (el.i<1||el.i>Nsum) continue; if (!PuOrdinaciji) { //ako je ordinacija slobodna pacijent ulazi u nj if (el.i!=1) cout<<"Pacijent br. "<<BrPuo<<" izlazi iz ordinacije i napusta kliniku...\n"; if (stanje_cekaonica>1) cout<<"Pacijent br. "<<el.i<<" je najprioritetniji slucaj u cekaonici!\n"; int PacCeka=cekanje-PomPolje[el.i-1]; if (PacCeka<0) PacCeka=0; cout<<"Pacijent br. "<<el.i<<" je cekao u redu: "<<PacCeka<<" sec\n"; cout<<"Pacijent ulazi u ordinaciju...\n"; BrPuo=el.i; if (stanje_cekaonica<=1) InitQ(cekaonica); cout<<"Stanje u cekaonici: "<<--stanje_cekaonica<<"\n\n"; cekanje-=el.y; } else EnQueueQ(el,cekaonica); //ako ordinacija nije slobodna pacijent (el) se vraca u cekaonicu cekanje+=el.x; if (cekanje<0) cekanje=0; if (cekanje>el.y) PuOrdinaciji=false; //ako je vrijeme cekanje iduceg pacijenta vece od vremena u ordinaciji trenutnog pacijenta else { PuOrdinaciji=true; vrijeme+=(el.x-el.y); } } //vise ne ulaze pacijenti u cekaonicu, sada ispisujemo preostale u cekaonici //CEKAONICA: InitQ(red); for (int j=0;j<stanje_cekaonica;) { el=FrontQ(cekaonica); DeQueueQ(cekaonica); if (stanje_cekaonica>1) { //usporedjujemo prioritete ako je stanje u cekaonici >1 for (int z=1;z<stanje_cekaonica;z++) { //usporedba prioriteta novog pacijenta s prioritetom ostalih tred el2=FrontQ(cekaonica), pom; DeQueueQ(cekaonica); if (el.i==el2.i) continue; if (el2.prioritet<el.prioritet||(el2.prioritet==el.prioritet&&el2.i<el.i)) { pom=el2; el2=el; el=pom; } EnQueueQ(el2,cekaonica); } } //el je sada najprioritetniji pacijent if (el.i<1||el.i>Nsum)continue; if (stanje_cekaonica>1) { cout<<"Pacijent br. "<<BrPuo<<" izlazi iz ordinacije i napusta kliniku...\n"; cout<<"Pacijent br. "<<el.i<<" je najprioritetniji slucaj u cekaonici!\n"; } int PacCeka=cekanje-PomPolje[el.i-1]; if (PacCeka<0) PacCeka=0; cout<<"Pacijent br. "<<el.i<<" je cekao u redu: "<<PacCeka<<" sec\n"; cout<<"Pacijent ulazi u ordinaciju...\n"; BrPuo=el.i; if (stanje_cekaonica<=1) InitQ(cekaonica); cout<<"Stanje u cekaonici: "<<--stanje_cekaonica<<"\n\n"; cekanje+=el.x; vrijeme+=el.y; } cout<<"Pacijent br. "<<el.i<<" izlazi iz ordinacije i napusta kliniku...\n"; VrijemeTrajanja(vrijeme); Nsum=0; } int main() { InitQ(red); int izbor=0; do { cout<<"\t\tIZBORNIK\n"; cout<<"1. Generiranje N parova slucajnih brojeva\n"; cout<<"2. Pacijenti u ordinaciji\n"; cout<<"9. Izlaz iz programa\n"; cin>>izbor; switch(izbor) { case 1: prvi(); break; case 2: drugi(); break; case 9: break; default: cout<<"Odabrana opcija ne postoji!\n"; } }while(izbor!=9); return 0; }
You need to login to post a comment.
