/ Published in: C++
Glavni program
Expand |
Embed | Plain Text
#include<iostream> #include<ctime> #include<windows.h> #include<winbase.h> using namespace std; struct tpacijent { int x; int y; int rizik; }; //#include "red_polje.h" #include "red_pokazivac.h" int N, br=0; tpacijent* generiranje() { cout << "Koliko pacijenata zelite generirati: "; cin >> N; cout << endl; tpacijent *pacijent = new tpacijent[N]; for (int i=0;i<N;i++) { cout << "Generiranje " << i+1 << ". pacijenta..." << endl; pacijent[i].x = rand()%10000+1; pacijent[i].y = rand()%10000+1; } return pacijent; }; void prioritet(tpacijent pacijent[]) { for (int i=0;i<N;i++) { cout << "Generiram prioritet " << i+1 << ". pacijentu" << endl; pacijent[i].rizik = rand()%4+1; } cout << endl; }; void ispis(queue* Q, int izbor) { tpacijent pom; cout << endl; for (int i=0; i<br; i++) { pom = FrontQ(Q); DeQueueQ(Q); cout << "\t" << i+1 << ". u redu-------------------------" << endl << "\t" << "Dosao " << pom.x /1000.0 << " sekundi nakon prethodnoga " << endl << "\t" << "Treba " << pom.y /1000.0 << " sekundi u ordinaciji " << endl; if (izbor == 1) cout << "\t" << "Razina rizika: " << pom.rizik << endl; EnQueueQ(pom,Q); } cout << endl; } void sekvencijalno(queue* Q, tpacijent pacijent[]) { int vrijeme_ulaz, vrijeme_izlaz; tpacijent ordinacija; int ukupno = N; br = 0; vrijeme_ulaz = time(NULL); EnQueueQ(pacijent[0],Q); br++; for (int i=0;i<N;i++) { ordinacija = FrontQ(Q); DeQueueQ(Q); br--; ukupno--; cout << i+1 << ". pacijent ulazi u ordinaciju na " << ordinacija.y/1000.0 << " sekundi" << endl; Sleep(ordinacija.y); int sat=0; for (int j=i+1+br;j<N;j++) { sat = sat + pacijent[j].x; if(sat < ordinacija.y) { cout << "Novi pacijent je dosao u meduvremenu" << endl; EnQueueQ(pacijent[j],Q); br++; } else break; } cout << i+1 << ". pacijent izlazi iz ordinacije" << endl; cout << "Stanje reda: "; if (IsEmptyQ(Q)) { cout << "Cekaonica je trenutno prazna" << endl << endl; if (ukupno == 0) { vrijeme_izlaz = time(NULL); cout << "Proteklo vrijeme = " << vrijeme_izlaz - vrijeme_ulaz << endl; return; } int razlika = pacijent[i+1].x - ordinacija.y; Sleep(razlika); EnQueueQ(pacijent[i+1],Q); br++; } else ispis(Q,0); } } void preslozi (queue *Q, int rizik) { queue* P = InitQ(P); tpacijent pom; for (int i=0; i<br; i++) { pom = FrontQ(Q); DeQueueQ(Q); if(pom.rizik == rizik) EnQueueQ(pom,Q); else EnQueueQ(pom,P); } while(!IsEmptyQ(P)){ pom = FrontQ(P); DeQueueQ(P); EnQueueQ(pom,Q); } }; void posluzi(queue* Q, tpacijent pacijent[]) { int vrijeme_ulaz, vrijeme_izlaz; tpacijent ordinacija, ceka; int ukupno = N; br = 0; vrijeme_ulaz = time(NULL); EnQueueQ(pacijent[0],Q); br++; for (int i=0;i<N;i++) { ordinacija = FrontQ(Q); DeQueueQ(Q); br--; ukupno--; cout << i+1 << ". pacijent ulazi u ordinaciju na " << ordinacija.y/1000.0 << " sekundi" << endl; Sleep(ordinacija.y); int sat=0; for (int j=i+1+br;j<N;j++) { sat = sat + pacijent[j].x; if(sat < ordinacija.y) { cout << "Novi pacijent je dosao u meduvremenu" << endl; EnQueueQ(pacijent[j],Q); br++; preslozi(Q,1); preslozi(Q,2); preslozi(Q,3); preslozi(Q,4); } else break; } cout << i+1 << ". pacijent izlazi iz ordinacije" << endl; cout << "Stanje reda: "; if (IsEmptyQ(Q)) { cout << "Cekaonica je trenutno prazna" << endl << endl; if (ukupno == 0) { vrijeme_izlaz = time(NULL); cout << "Proteklo vrijeme = " << vrijeme_izlaz - vrijeme_ulaz << endl; return; } int razlika = pacijent[i+1].x - ordinacija.y; Sleep(razlika); EnQueueQ(pacijent[i+1],Q); br++; preslozi(Q,1); preslozi(Q,2); preslozi(Q,3); preslozi(Q,4); } else ispis(Q,1); } } int main () { int izbor, broj_klijenata=0, umanji; tpacijent *pacijent; queue* Q = InitQ(Q); do { cout << "Izbornik" << endl << "1. Generiranje polja" << endl << "2. Sekvencijalno posluzivanje" << endl << "3. Posluzi" << endl << "9. Izlaz" << endl << "Izbor: "; cin >> izbor; cout << endl; switch (izbor) { case 1: pacijent = generiranje(); cout << endl; break; case 2: sekvencijalno(Q, pacijent); cout << endl; break; case 3: prioritet(pacijent); posluzi(Q, pacijent); cout << endl; break; case 9: break; default: cout << "Krivi unos! " << endl << endl; } } while (izbor!=9); return 0; }
You need to login to post a comment.
