/ Published in: C++
strukture podataka,zadatak 3
Expand |
Embed | Plain Text
Copy this code and paste it in your HTML
#include <iostream> #include <ctime> #include "polje.h" //#include "polje.h" using namespace std; void generiranje(tqu *red) // generiranje pacijenata { tpacijent pacijent; int n; cout<<"broj vremena: "; cin>>n; for(int i=0; i<n; i++) { pacijent.v1 = rand()%10000+1; pacijent.v2 = rand()%10000+1; pacijent.prioritet = rand()%4+1; pacijent.rbr = i+1; EnQueueQ(pacijent, red); } } void ispis(tpacijent pacijent) { cout<<"pacijent_"<<pacijent.rbr<<endl; //ispis pacijenata cout<<"prioritet: "<<pacijent.prioritet<<endl; cout<<"vrijeme ulaska: "<<pacijent.v1<<" s"<<endl; cout<<"vrijeme izlaska: "<<pacijent.v2<<" s"<<endl<<endl; } void ulazak(tqu *red) { double sp,sk; if(IsEmptyQ(red)) return; sp = clock(); while(!(IsEmptyQ(red))) //generiranje ulaska pacijenata { tpacijent pacijent = FrontQ(red); ispis(pacijent); DeQueueQ(red); } sk = clock(); cout<<endl<<"proteklo vrijeme: "<<(sk-sp)/1000<<" s"<<endl; } void premjestanje(tqu *red, int prioritet) { if(IsEmptyQ(red)) return; tpacijent pacijent; tqu *red2 = InitQ(red2); while(!(IsEmptyQ(red))) { //razmje���¡taj pacijenata po prioritetima pacijent = FrontQ(red); if(pacijent.prioritet == prioritet) ispis(pacijent); else EnQueueQ(pacijent, red2); DeQueueQ(red); } memcpy(red,red2,sizeof(tqu)); } void ulazak_P(tqu *red) { double sp,sk; sp = clock(); for(int i=1; i<5; i++) //ulazak br 2 premjestanje(red, i); sk = clock(); if((IsEmptyQ(red)))cout<<endl<<"proteklo vrijeme: "<<(sk-sp)/1000<<" s"<<endl; } int main() { tqu *red = InitQ(red); int izbor; do{ cout<<endl<<"1: generiranje vremena"; cout<<endl<<"2: ispis (simulacija rada)"; cout<<endl<<"3: ispis po prioritetima"; cout<<endl<<"9: kraj"; cout<<endl<<"vas unos:"; cin>>izbor; switch(izbor) { case 1:generiranje(red); break; case 2:ulazak(red); break; case 3:ulazak_P(red); break; case 9: break; } }while(izbor!=9); system("pause"); return 0; } ------------------------------------------------------------------------ struct tpacijent{ //struktura tpacijent int v1, v2; int prioritet; int rbr; }; struct tqu{ //struktura tqu tpacijent pacijent[10000]; int front; int rear; }; int AddOne(int n) { return((n+1)%10000); } bool IsEmptyQ(tqu *q) // provjeravamo je li red prazan { if(AddOne(q->rear) == q->front) return true; else return false; } tpacijent FrontQ(tqu *q) // vra���a vrijednost elementa koji se trenutno nalazi na ���elu reda { tpacijent pom; pom.v1 = 0; pom.v2 = 0; pom.prioritet = 0; pom.rbr = 0; if(IsEmptyQ(q)) return pom; return q->pacijent[q->front]; } void EnQueueQ(tpacijent x, tqu *q) //stavlja element tpacijent x na po���etak reda tqu *q { q->rear = AddOne(q->rear); q->pacijent[q->rear] = x; } void DeQueueQ(tqu *q) //bri���¡e element s ���ela reda { if(IsEmptyQ(q)) return; q->front = AddOne(q->front); } tqu* InitQ(tqu *q) //inicira prazan red { q = new tqu; q->front = 0; q->rear = 9999; return q; }