/ Published in: C++
Glavni program koji koristi implementacije za rad nad redovima
Expand |
Embed | Plain Text
Copy this code and paste it in your HTML
// Zadaca 3 - SP - Kristian Maretić // Program za rad nad redom - prikaz Äekaonice u ordinaciji #include<iostream> #include<ctime> //#include "red_polje.h" #include "red_pokazivac.h" #define raspon 10000 // definiranje raspona sluÄajnih brojeva using namespace std; red *r = new red; // inicijalizacija red *cekaonica = new red; // inicijalizacija reda Äekaonica pacijent red_el; // dekalracija elemenata koji se zapisuju u red (podaci o pacijentu - struktura implementacije) int suma = 0; int Generiraje_slucajnih_br() // funkcija za generiranje sluÄajnih brojeva { int broj_parova = 0; // inicijalizacija i definiranje broja parova cout<<endl; cout<<"*****************************************"<<endl; // unos broja parova cout<<" Unesite broj parova slucajnih brojeva : "; cin>>broj_parova; cout<<"*****************************************"<<endl; suma+=broj_parova; srand(time(NULL)); // inicijalizacija generatora sluÄajnih brojeva for (int i = 0 ; i < broj_parova;i++) { red_el.x = rand()% raspon; // generiranje prvog broja x- predstavlja vrijeme koje je proteklo od dolaska prethodnog pacijenta do dolaska pacijenta koji je trenutno u ordinaciji kod lijeÄnika red_el.y=rand()% raspon; // generiranje drugog broja y - predstavlja vrijeme koje pacijent provede kod lijeÄnika u ordinaciji EnQueueQ(red_el,r); // dodavanje novog elementa na zaÄelje reda } cout<<endl; cout<<"****************************************************"<<endl; cout<<" Uspjesno ste generirali parove slucjanih brojeva !!"<<endl; cout<<"****************************************************"<<endl; return 0; } int Vrijeme_izvrsavanja(int time) // funkcija za prikaz vremena izvrÅ¡avanja { cout<<endl; cout<<"*****************************************"<<endl; cout<<" Vrijeme izvrsavanja programa: "<< time <<"sec"<<endl; cout<<"*****************************************"<<endl; cout<<" Prosjecno vrijeme cekanja pacijenta: "<< time/suma <<" sec"<<endl; cout<<"*****************************************"<<endl; return 0; } void Cekaonica_vrijeme() { int stanje_cekaonica=0, cekanje=0, br_pacijenta=0, vrijeme=0; // definiranje varijabli bool zauzeto = false; // varijabla za provjeru zauzetosti ordinacije int pom_red[9999]; // definiranje pomoÄnog reda if (IsEmptyQ(r)) { cout<<endl; cout<<"******************************************"<<endl; cout<<" Red je prazan, niste izgenerirali brojeve"<<endl; cout<<"******************************************"<<endl; return; } InitQ(cekaonica); // inicijalizacija reda Äekaonice for (int j=1 ; j<=suma; j++) { red_el=FrontQ(r); // vrijednost elementa na Äelu reda stanje_cekaonica++; // povećava se red Äekaonice za svaki prolaz kroz petlju DeQueueQ(r); // brisanje elementa sa Äela reda red_el.rb_pacijenta=j; // postavljanje rednog broja pacijenta unutar reda vrijeme+=red_el.x; // raÄunanje vremena svakog elementa provedenog u Äekaoni pom_red[j-1] = cekanje; cout<<endl; // ispis elementa Äela reda koji se izbacuje iz reda tj. sprema se u pomoćni red cout<<"*******************************************"<<endl; cout<<" Pacijent "<<red_el.rb_pacijenta<<" sa cela reda"<<endl; cout<<" ulazi u ordinaciju i napusta red"<<endl; cout<<"*******************************************"<<endl; if (red_el.rb_pacijenta < 1 || red_el.rb_pacijenta > suma) continue; if (!zauzeto) //pacijent ulazi u ordinaciju ako je ordinacija slobodna { if (red_el.rb_pacijenta!=1) { cout<<endl; cout<<"*******************************************"<<endl; cout<<" Pacijent iz ordinacije"<<red_el.rb_pacijenta<<endl; cout<<" izlazi iz ordinacije i napusta red"<<endl; cout<<"*******************************************"<<endl; } if (stanje_cekaonica > 1) { cout<<endl; cout<<"*******************************************"<<endl; cout<<" Pacijent "<<red_el.rb_pacijenta<<endl; cout<<" je na celu reda za ordinaciju. "<<endl; cout<<"*******************************************"<<endl; } int Vr_cekanja = cekanje-pom_red[red_el.rb_pacijenta-1]; if (Vr_cekanja < 0) { Vr_cekanja=0; } cout<<endl; cout<<"*******************************************"<<endl; cout<<" Vrijeme cekanja pacijenta "<<red_el.rb_pacijenta<<endl; cout<<" je :"<<Vr_cekanja<<"sek"<<endl; cout<<"*******************************************"<<endl; br_pacijenta=red_el.rb_pacijenta; if (stanje_cekaonica <= 1) { InitQ(cekaonica); } cout<<endl; cout<<"*******************************************"<<endl; cout<<" Stanje u cekaonici je: "<<--stanje_cekaonica<<endl; cout<<"*******************************************"<<endl; cekanje-=red_el.y; } else //ako ordinacija nije slobodna pacijent ostaje u cekaonici { EnQueueQ(red_el,cekaonica); } cekanje+=red_el.x; if (cekanje<0) { cekanje=0; } if (cekanje>red_el.y) { zauzeto=false; //ako je vrijeme cekanje iduceg pacijenta vece od vremena u ordinaciji trenutnog pacijenta } else { zauzeto=true; vrijeme+=(red_el.x-red_el.y); } } // stanje u Äekaonici nakon ulaska svih pacijenata InitQ(r); for (int j=0; j < stanje_cekaonica; j++) { red_el=FrontQ(r); DeQueueQ(r); if (stanje_cekaonica > 1) { cout<<endl; cout<<"*******************************************"<<endl; cout<<" Pacijent iz ordinacije"<<red_el.rb_pacijenta<<endl; cout<<" izlazi iz ordinacije i napusta red"<<endl; cout<<"*******************************************"<<endl; } cout<<endl; cout<<"*******************************************"<<endl; cout<<" Vrijeme cekanja pacijenta "<<red_el.rb_pacijenta<<endl; cout<<" je :"<<vrijeme<<"sek"<<endl; cout<<"*******************************************"<<endl; br_pacijenta=red_el.rb_pacijenta; if (stanje_cekaonica<=1) InitQ(cekaonica); cout<<endl; cout<<"*******************************************"<<endl; cout<<" Stanje u cekaonici je: "<<--stanje_cekaonica<<endl; cout<<"*******************************************"<<endl; cekanje+=red_el.x; vrijeme+=red_el.y; cout<<endl; cout<<"*******************************************"<<endl; cout<<" Pacijent sa cela reda"<<red_el.rb_pacijenta<<endl; cout<<" ulazi u ordinaciju i napusta red"<<endl; cout<<"*******************************************"<<endl; Vrijeme_izvrsavanja(vrijeme); suma=0; } } void Cekaonica_prioritet() { int stanje_cekaonica=0, cekanje=0, br_pacijenta=0, vrijeme=0; // definiranje varijabli bool zauzeto = false; // varijabla za provjeru zauzetosti ordinacije int pom_red[9999]; // definiranje pomoÄnog reda if (IsEmptyQ(r)) { cout<<endl; cout<<"******************************************"<<endl; cout<<" Red je prazan, niste izgenerirali brojeve"<<endl; cout<<"******************************************"<<endl; return; } InitQ(cekaonica); // inicijalizacija reda Äekaonice for (int j=1 ; j<=suma; j++) { red_el=FrontQ(r); // vrijednost elementa na Äelu reda stanje_cekaonica++; // povećava se red Äekaonice za svaki prolaz kroz petlju DeQueueQ(r); // brisanje elementa sa Äela reda red_el.prioritet=short(rand()%4+1); red_el.rb_pacijenta=j; // postavljanje rednog broja pacijenta unutar reda vrijeme+=red_el.x; // raÄunanje vremena svakog elementa provedenog u Äekaoni pom_red[j-1] = cekanje; cout<<endl; // ispis elementa Äela reda koji se izbacuje iz reda tj. sprema se u pomoćni red cout<<"*******************************************"<<endl; cout<<" Pacijent sa cela reda"<<red_el.rb_pacijenta<<endl; cout<<" ulazi u ordinaciju i napusta red"<<endl; cout<<"*******************************************"<<endl; cout<<endl; cout<<"*******************************************"<<endl; cout<<" Prioritet pacijenta u cekaonici: "<<endl; cout<<"*******************************************"<<endl; if (red_el.prioritet==1) cout<<"1 - Kriticni slucaj"<<endl; else if (red_el.prioritet==2) cout<<"2 - Rizicni slucaj"<<endl; else if (red_el.prioritet==3) cout<<"3 - Slucaj niskog rizika"<<endl; else if (red_el.prioritet==4) cout<<"4 - Nije hitan slucaj"<<endl; if (stanje_cekaonica > 1) { for (int z = 1; z < stanje_cekaonica;z++) { pacijent red_el_prioritet=FrontQ(cekaonica), pom; DeQueueQ(cekaonica); if (red_el.rb_pacijenta==red_el_prioritet.rb_pacijenta) continue; if (red_el_prioritet.prioritet<red_el.prioritet||(red_el_prioritet.prioritet==red_el.prioritet&&red_el_prioritet.rb_pacijenta<red_el.rb_pacijenta)) { pom=red_el_prioritet; red_el_prioritet=red_el; red_el=pom; } EnQueueQ(red_el_prioritet,cekaonica); } } if (red_el.rb_pacijenta < 1 || red_el.rb_pacijenta > suma) continue; if (!zauzeto) //pacijent ulazi u ordinaciju ako je ordinacija slobodna { if (red_el.rb_pacijenta!=1) { cout<<endl; cout<<"*******************************************"<<endl; cout<<" Pacijent iz ordinacije"<<red_el.rb_pacijenta<<endl; cout<<" izlazi iz ordinacije i napusta red"<<endl; cout<<"*******************************************"<<endl; } if (stanje_cekaonica > 1) { cout<<endl; cout<<"*******************************************"<<endl; cout<<" Pacijent "<<red_el.rb_pacijenta<<endl; cout<<" je na celu reda za ordinaciju. "<<endl; cout<<"*******************************************"<<endl; } int Vr_cekanja = cekanje-pom_red[red_el.rb_pacijenta-1]; if (Vr_cekanja < 0) { Vr_cekanja=0; } cout<<endl; cout<<"*******************************************"<<endl; cout<<" Vrijeme cekanja pacijenta "<<red_el.rb_pacijenta<<endl; cout<<" je :"<<Vr_cekanja<<"sek"<<endl; cout<<"*******************************************"<<endl; br_pacijenta=red_el.rb_pacijenta; if (stanje_cekaonica <= 1) { InitQ(cekaonica); } cout<<endl; cout<<"*******************************************"<<endl; cout<<" Stanje u cekaonici je: "<<--stanje_cekaonica<<endl; cout<<"*******************************************"<<endl; cekanje-=red_el.y; } else //ako ordinacija nije slobodna pacijent ostaje u cekaonici { EnQueueQ(red_el,cekaonica); } cekanje+=red_el.x; if (cekanje<0) { cekanje=0; } if (cekanje>red_el.y) { zauzeto=false; //ako je vrijeme cekanje iduceg pacijenta vece od vremena u ordinaciji trenutnog pacijenta } else { zauzeto=true; vrijeme+=(red_el.x-red_el.y); } } // stanje u Äekaonici nakon ulaska svih pacijenata InitQ(r); for (int j=0; j < stanje_cekaonica; j++) { red_el=FrontQ(r); DeQueueQ(r); if (stanje_cekaonica > 1) { for (int z=1;z<stanje_cekaonica;z++) { pacijent el2=FrontQ(cekaonica), pom; DeQueueQ(cekaonica); if (red_el.rb_pacijenta==el2.rb_pacijenta) continue; if (el2.prioritet<red_el.prioritet||(el2.prioritet==red_el.prioritet&&el2.rb_pacijenta<red_el.rb_pacijenta)) { pom=el2; el2=red_el; red_el=pom; } EnQueueQ(el2,cekaonica); } } if (red_el.rb_pacijenta<1||red_el.rb_pacijenta>suma)continue; if (stanje_cekaonica>1) { cout<<endl; cout<<"*******************************************"<<endl; cout<<" Pacijent iz ordinacije"<<red_el.rb_pacijenta<<endl; cout<<" izlazi iz ordinacije i napusta red"<<endl; cout<<"*******************************************"<<endl; } int Vr_cekanja = cekanje-pom_red[red_el.rb_pacijenta-1]; if (Vr_cekanja<0) { Vr_cekanja=0; } cout<<endl; cout<<"*******************************************"<<endl; cout<<" Vrijeme cekanja pacijenta "<<red_el.rb_pacijenta<<endl; cout<<" je :"<<Vr_cekanja<<"sek"<<endl; cout<<"*******************************************"<<endl; br_pacijenta=red_el.rb_pacijenta; if (stanje_cekaonica<=1) InitQ(cekaonica); cout<<endl; cout<<"*******************************************"<<endl; cout<<" Stanje u cekaonici je: "<<--stanje_cekaonica<<endl; cout<<"*******************************************"<<endl; cekanje+=red_el.x; vrijeme+=red_el.y; cout<<endl; cout<<"*******************************************"<<endl; cout<<" Pacijent sa Äela reda"<<red_el.rb_pacijenta<<endl; cout<<" ulazi u ordinaciju i napusta red"<<endl; cout<<"*******************************************"<<endl; Vrijeme_izvrsavanja(vrijeme); suma=0; } } int main() // Glavni program { InitQ(r); // inicijalizacija reda int izbor; // definicija varijable izbornika cout<<endl; cout<<"\t\t\t************************************"<<endl; cout<<"\t\t\t* ZADACA_3 *"<<endl; cout<<"\t\t\t* Operacije nad redom *"<<endl; cout<<"\t\t\t* Strukture podataka *"<<endl; cout<<"\t\t\t************************************"<<endl; cout<<endl; do { cout<<"\t\t\t************************************"<<endl; cout<<"\t\t\t* glavni izbornik *"<<endl; cout<<"\t\t\t************************************"<<endl; cout<<"\t\t\t************************************"<<endl; cout<<"\t\t\t* Generiranje brojeva * 1 *"<<endl; cout<<"\t\t\t************************************"<<endl; cout<<"\t\t\t* Cekaonica (vrijeme) * 2 *"<<endl; cout<<"\t\t\t************************************"<<endl; cout<<"\t\t\t* Cekaonica (prioriteti) * 3 *"<<endl; cout<<"\t\t\t************************************"<<endl; cout<<"\t\t\t* IZLAZ * 0 *"<<endl; cout<<"\t\t\t************************************"<<endl; cout<<endl; cout<<"\t\t\t************************************"<<endl; cout<<"\t\t\t* Odaberite broj zeljene operacije *"<<endl; cout<<"\t\t\t************************************"<<endl; cout<<"\t\t\tVas odabir je:"; cin >> izbor; cout << endl; switch(izbor) // pozivanje funkcija ovisno o unosu { case 1: Generiraje_slucajnih_br(); break; case 2: Cekaonica_vrijeme(); break; case 3: Cekaonica_prioritet(); break; case 0: break; default: cout<<"Odabrali ste nepostojecu operaciju, ponovite unos"<<endl<<endl; } } while(izbor!=0); system("pause"); return 0; }
URL: /