/ Published in: C++
Program 3
Expand |
Embed | Plain Text
#include <cstdlib> #include <iostream> #include <ctime> #include "windows.h" #define LIST_LEN 10240 //#include "red_pokazivac.h" #include "red_polje.h" using namespace std; int sim_len = 333; clock_t vrijeme; _red *pacijenti_x; _red *pacijenti_1; _red *pacijenti_2; _red *pacijenti_3; _red *pacijenti_4; void generiranje() { srand(time(0)); int n; cout<<"> Koliko parova zelite generirati? (Max "<< LIST_LEN <<")\t"; cin>>n; _pacijent novi; for(int i=0; i<n; i++) { novi.broj=i+1; novi.cekaonica=rand()%30+1; novi.ordinacija=rand()%15+1; novi.prioritet=rand()%4+1; EnQueueQ(novi,pacijenti_x); switch(novi.prioritet) { case 1: EnQueueQ(novi,pacijenti_1); break; case 2: EnQueueQ(novi,pacijenti_2); break; case 3: EnQueueQ(novi,pacijenti_3); break; case 4: EnQueueQ(novi,pacijenti_4); } } }; void ispis(_pacijent trenutni) { cout<<endl <<"Ulazi pacijent #"<<trenutni.broj<<"\tPrioritet: "<<trenutni.prioritet<<endl <<"> Ceka"; for(int j=0; j<trenutni.cekaonica; j++) { Sleep(sim_len); cout<<"."; } cout<<endl<<" Proteklo "<<trenutni.cekaonica<<" min"<<endl; cout<<"> U ordinaciji"; for(int j=0; j<trenutni.ordinacija; j++) { Sleep(sim_len); cout<<"."; } cout<<endl<<" Proteklo "<<trenutni.ordinacija<<" min"<<endl <<"------------------------------------------"<<endl; } void stanje(bool prioriteti = true) { _pacijent pacijenti[LIST_LEN]; int brojac=0; if(!prioriteti) { cout<<"Stanje reda:"<<endl; while(!IsEmptyQ(pacijenti_x)) { pacijenti[brojac]=FrontQ(pacijenti_x); cout<<"* Pacijent #"<<pacijenti[brojac].broj <<"\tCeka: "<<pacijenti[brojac].cekaonica<<"min" <<"\tOrdinacija: "<<pacijenti[brojac].ordinacija<<"min"<<endl; DeQueueQ(pacijenti_x); brojac++; } for(int i=0;i<brojac;i++) EnQueueQ(pacijenti[i],pacijenti_x); } else { cout<<"Stanje reda:"<<endl; while(!IsEmptyQ(pacijenti_1)) { pacijenti[brojac]=FrontQ(pacijenti_1); cout<<"* Pacijent #"<<pacijenti[brojac].broj <<"\tPrioritet: "<<pacijenti[brojac].prioritet <<" Ceka: "<<pacijenti[brojac].cekaonica<<"min" <<"\tOrdinacija: "<<pacijenti[brojac].ordinacija<<"min"<<endl; DeQueueQ(pacijenti_1); brojac++; } for(int i=0;i<brojac;i++) EnQueueQ(pacijenti[i],pacijenti_1); brojac=0; while(!IsEmptyQ(pacijenti_2)) { pacijenti[brojac]=FrontQ(pacijenti_2); cout<<"* Pacijent #"<<pacijenti[brojac].broj <<"\tPrioritet: "<<pacijenti[brojac].prioritet <<" Ceka: "<<pacijenti[brojac].cekaonica<<"min" <<"\tOrdinacija: "<<pacijenti[brojac].ordinacija<<"min"<<endl; DeQueueQ(pacijenti_2); brojac++; } for(int i=0;i<brojac;i++) EnQueueQ(pacijenti[i],pacijenti_2); brojac=0; while(!IsEmptyQ(pacijenti_3)) { pacijenti[brojac]=FrontQ(pacijenti_3); cout<<"* Pacijent #"<<pacijenti[brojac].broj <<"\tPrioritet: "<<pacijenti[brojac].prioritet <<" Ceka: "<<pacijenti[brojac].cekaonica<<"min" <<"\tOrdinacija: "<<pacijenti[brojac].ordinacija<<"min"<<endl; DeQueueQ(pacijenti_3); brojac++; } for(int i=0;i<brojac;i++) EnQueueQ(pacijenti[i],pacijenti_3); brojac=0; while(!IsEmptyQ(pacijenti_4)) { pacijenti[brojac]=FrontQ(pacijenti_4); cout<<"* Pacijent #"<<pacijenti[brojac].broj <<"\tPrioritet: "<<pacijenti[brojac].prioritet <<" Ceka: "<<pacijenti[brojac].cekaonica<<"min" <<"\tOrdinacija: "<<pacijenti[brojac].ordinacija<<"min"<<endl; DeQueueQ(pacijenti_4); brojac++; } for(int i=0;i<brojac;i++) EnQueueQ(pacijenti[i],pacijenti_4); } cout<<"* Nema vise pacijenata!"<<endl; } void simulacija(bool prioriteti=false) { vrijeme = clock(); if(!prioriteti) { cout<<"\tSimuliram bez prioriteta"<<endl <<"------------------------------------------"<<endl; if(IsEmptyQ(pacijenti_x)) cout<<"Red je prazan! Nema pacijenata."<<endl; _pacijent tekuci; stanje(false); while(!IsEmptyQ(pacijenti_x)) { tekuci=FrontQ(pacijenti_x); DeQueueQ(pacijenti_x); ispis(tekuci); stanje(false); } } else { cout<<"\tSimuliram s prioritetima"<<endl <<"------------------------------------------"<<endl; bool ima_pacijenata = false; _pacijent tekuci; stanje(); while(!IsEmptyQ(pacijenti_1)) { ima_pacijenata = true; tekuci=FrontQ(pacijenti_1); DeQueueQ(pacijenti_1); ispis(tekuci); stanje(); } while(!IsEmptyQ(pacijenti_2)) { ima_pacijenata = true; tekuci=FrontQ(pacijenti_2); DeQueueQ(pacijenti_2); ispis(tekuci); stanje(); } while(!IsEmptyQ(pacijenti_3)) { ima_pacijenata = true; tekuci=FrontQ(pacijenti_3); DeQueueQ(pacijenti_3); ispis(tekuci); stanje(); } while(!IsEmptyQ(pacijenti_4)) { ima_pacijenata = true; tekuci=FrontQ(pacijenti_4); DeQueueQ(pacijenti_4); ispis(tekuci); stanje(); } if(!ima_pacijenata) cout<<"Red je prazan! Nema pacijenata."<<endl; } cout<<"Vrijeme izvodjenja funkcije: "<<(clock()-vrijeme)<<"ms"<<endl; }; int main() { int izbor; pacijenti_x=new _red; pacijenti_1=new _red; pacijenti_2=new _red; pacijenti_3=new _red; pacijenti_4=new _red; InitQ(pacijenti_x); InitQ(pacijenti_1); InitQ(pacijenti_2); InitQ(pacijenti_3); InitQ(pacijenti_4); do { cout<<endl<<endl<<"Odaberite:"<<endl <<"\t1. Generiranje pacijenata"<<endl <<"\t2. Simulacija bez prioriteta"<<endl <<"\t3. Simulacija s prioritetima"<<endl <<"\t4. Postavi brzinu simulacije (trenutno: 1 minuta = "<<sim_len<<"ms)"<<endl <<"\t0. Kraj programa"<<endl <<"> Vas izbor? "; cin>>izbor; switch(izbor) { case 0: return EXIT_SUCCESS; case 1: generiranje(); break; case 2: simulacija(false); break; case 3: simulacija(true); break; case 4: cout<<"> Duljina simulacije minute u milisekundama? (Trenutno: "<<sim_len<<"ms) "; cin>>sim_len; default: break; } } while(true); }
You need to login to post a comment.
