/ Published in: C++
Zaprimanje po redoslijedu ili prioritetu
Expand |
Embed | Plain Text
//implementacija pomocu pokazivaca #include <cstdlib> #include <iostream> using namespace std; struct tpacijent{ int br, x, y; int p; }; struct que{ tpacijent pacijenti; que *sljedeci; }; struct qu{ que *front, *rear; }; tpacijent FrontQ(qu *Q){ return (Q->front->sljedeci->pacijenti); }; void EnQueueQ(tpacijent x,qu *Q){ que *pom; pom=new que; pom->pacijenti=x; pom->sljedeci=NULL; Q->rear->sljedeci=pom; Q->rear=pom; }; void DeQueueQ(qu *Q){ que *pom; pom=Q->front; Q->front=Q->front->sljedeci; free(pom); }; void InitQ(qu *Q){ Q->front=(que*)malloc(sizeof(que)); Q->front->sljedeci=NULL; Q->rear=Q->front; }; bool IsEmptyQ(qu *Q){ if(Q->front==Q->rear) return true; else return false; }; //implementacija pomocu polja #include <cstdlib> #include <iostream> using namespace std; struct tpacijent{ int br, x, y; int p; }; struct qu{ tpacijent pacijenti[10000]; int front, rear; }; int AddOne(int i){ return ((i+1)%10000); }; tpacijent FrontQ(qu *Q){ return (Q->pacijenti[Q->front]); }; void EnQueueQ(tpacijent x, qu *Q){ if(AddOne(AddOne(Q->rear))==(Q->front)) cout<<"Red je pun."; else { Q->rear=AddOne(Q->rear); Q->pacijenti[Q->rear]=x; } }; void DeQueueQ(qu *Q){ Q->front=AddOne(Q->front); }; void InitQ(qu *Q){ Q->front=0; Q->rear=9999; }; bool IsEmptyQ(qu *Q){ if(AddOne(Q->rear)==Q->front) return true; else return false; }; #include <cstdlib> #include <iostream> #include <ctime> #include "red_pok.h" //#include "red_polje.h" using namespace std; clock_t v1,v2; double pocetak(){ v1=clock(); return v1; }; double kraj(){ v2=clock(); return v2; }; double proteklo(){ return v2-v1; }; int n; void generiranje(qu *pacijenti){ srand(time(0)); cout<<"Koliko parova zelite generirati? (1-10000)"<<endl; cin>>n; tpacijent par; for(int i=0;i<n;i++){ par.br=i+1; par.x=(rand()%10000)+1; par.y=(rand()%10000)+1; par.p=(rand()%4)+1; EnQueueQ(par,pacijenti); } } void drugi(qu *pacijenti){ pocetak(); tpacijent tekuci; if(IsEmptyQ(pacijenti)){ cout<<"Red je prazan"<<endl; } for(int i=0;i<n;i++){ tekuci=FrontQ(pacijenti); DeQueueQ(pacijenti); cout<<"---------------------------"<<endl; cout<<"Redni broj pacijenta: "<<tekuci.br<<endl; cout<<"Cekanje na red: "<<tekuci.x<<endl; cout<<"Vrijeme u ordinaciji: "<<tekuci.y<<endl; cout<<"Prioritet: "<<tekuci.p<<endl; EnQueueQ(tekuci,pacijenti); } kraj(); cout<<"Vrijeme trajanja programa(u stotinkama sekunde): "<<proteklo()/100<<endl; } void prioritet(qu *pacijenti){ pocetak(); tpacijent polje[10000]; int brojac=0; while(!IsEmptyQ(pacijenti)){ polje[brojac]=FrontQ(pacijenti); brojac++; DeQueueQ(pacijenti); } bool zamjena=true; for(int i=n-1;i>0&&zamjena; i--){ zamjena=false; for(int j=0;j<i;j++){ if(polje[j].p>polje[j+1].p){ tpacijent pom=polje[j]; polje[j]=polje[j+1]; polje[j+1]=pom; zamjena=true; } if(polje[j].p==polje[j+1].p){ if(polje[j].x<polje[j+1].x){ tpacijent pom=polje[j]; polje[j]=polje[j+1]; polje[j+1]=pom; zamjena=true; } } } } for(int i=0;i<n;i++) { EnQueueQ(polje[i],pacijenti); } tpacijent tekuci; if(IsEmptyQ(pacijenti)){ cout<<"Red je prazan"<<endl; } for(int i=0;i<n;i++){ tekuci=FrontQ(pacijenti); DeQueueQ(pacijenti); cout<<"---------------------------"<<endl; cout<<"Redni broj pacijenta: "<<tekuci.br<<endl; cout<<"Cekanje na red: "<<tekuci.x<<endl; cout<<"Vrijeme u ordinaciji: "<<tekuci.y<<endl; cout<<"Prioritet: "<<tekuci.p<<endl; } kraj(); cout<<"Vrijeme trajanja programa(u stotinkama sekunde): "<<proteklo()/100<<endl; } int main() { int izbor; qu *pacijenti; pacijenti=new qu; InitQ(pacijenti); do{ cout<<"-------------IZBORNIK-------------- "<<endl; cout<<"1. Generiranje."<<endl; cout<<"2. Zaprimanje pacijenata prema redoslijedu dolaska."<<endl; cout<<"3. Zaprimanje pacijenata prema prioritetu."<<endl; cout<<"0. Kraj programa."<<endl; cin>>izbor; switch(izbor){ case 1: generiranje(pacijenti); break; case 2: drugi(pacijenti); break; case 3: prioritet(pacijenti); break; default: break; } }while(izbor!=0); system("PAUSE"); return 0; }
You need to login to post a comment.
