Return to Snippet

Revision: 53942
at December 3, 2011 07:55 by mavukusic9


Initial Code
//red_polje.h
struct pacijent {
int prior, x, y;
};
struct qu {
pacijent el[10000];
int front, rear;
};
qu red;
int AddOne (int mjesto) {
return ((mjesto+1)%10000);
}
pacijent FrontQ (qu red_atp) {
return red_atp.el[red_atp.front];      
}
void EnQueueQ (pacijent pac, qu &red_atp) {
red_atp.rear=AddOne(red_atp.rear);
red_atp.el[red_atp.rear]=pac;
}
void DeQueueQ (qu &red_atp) {
red_atp.front=AddOne(red_atp.front);     
}
bool IsEmptyQ (qu red_atp) {
if (AddOne(red_atp.rear)==red_atp.front) return true;
return false;
}
void InitQ (qu &red_atp) {
red_atp.front=0;
red_atp.rear=9999;
}


//red_pokazivac.h
struct pacijent {
int prior, x, y;
};
struct qu {
pacijent el;
qu *next;
};
struct que {
qu *front, *rear;
};
que red;
pacijent FrontQ (que red_atp) {
return ((red_atp.front)->next)->el;;
}
void EnQueueQ (pacijent pac, que &red_atp) {
qu *novi=new qu;
novi->el=pac;
novi->next=NULL; 
(red_atp.rear)->next=novi;
red_atp.rear=novi;
}
void DeQueueQ (que &red_atp) {
qu *brisi=red_atp.front;
red_atp.front=(red_atp.front)->next;
delete brisi;
}
bool IsEmptyQ (que red_atp) {
if (red_atp.rear==red_atp.front) return true;
return false;    
}
void InitQ (que &red_atp) {
qu *novi=new qu;
novi->next=NULL;
red.rear=novi;
red.front=novi;     
}


//main program
#include <iostream>
#include <ctime>
#include "red_pokazivac.h"
//#include "red_polje.h"
using namespace std;
pacijent pacijenti[10000];
int broj=0;
clock_t vrij_poc, vrij_kraj;
void generiraj () {
cout << "\nUnesite broj generiranja: ";
do cin >> broj; while (broj<1 || broj>10000);
pacijent pac;
for (int i=0; i<broj; i++) {
         pac.prior=rand()%4+1;
         pac.x=rand()%10000+1;
         pac.y=rand()%10000+1;
         pacijenti[i]=pac;
         }
cout<<"-----------------------------"<<endl;
 
cout << "\nZapisi su uspjesno zapisani.\n";
cout<<"-----------------------------"<<endl;
system ("pause");
}
int provjera (int a, int br) {
if (!br) return -1;
int broj=-1;
for (int i=0; i<br; i++) {
         if (FrontQ(red).prior>a && broj<0) broj=i;
         EnQueueQ(FrontQ(red), red);
         DeQueueQ(red);
         }
if (broj>=0) return broj;
return -1;
}
void simulacija1 (bool w) {
vrij_poc=clock();
if (!broj) {
cout<<"-----------------------------"<<endl;
cout << "\nPolje je prazno!"<<endl;
cout<<"-----------------------------"<<endl;
system ("pause");
return;
}
int a=0, brojac=0, mjesto;
pacijent pct;
cout << endl;
while (a<broj || !IsEmptyQ(red)) {
if (!a) {
pct=pacijenti[a];
a++;
cout<<"-----------------------------"<<endl;
cout << "Prvi pacijent je u ordinaciji. Tamo ce biti " << pct.y << " vremena.\n";
if (w) cout << "\nOn ima prioritet broj " << pct.prior << ".";
cout<<"-----------------------------"<<endl;}
 
else if (a<broj) {
if (pct.y>pacijenti[a].x) {
pct.y-=pacijenti[a].x;
cout << "Novi pacijent je u cekaonici.\n";
if (!w) EnQueueQ(pacijenti[a], red);
else {
cout << " On ima prioritet broj " << pacijenti[a].prior << ".\n";
mjesto=provjera(pacijenti[a].prior, brojac);
if (mjesto>=0) {
provjera(5, mjesto);
EnQueueQ(pacijenti[a], red);
provjera(5, brojac-mjesto);
if (mjesto) cout << "\nPacijent je preskocio " << brojac-mjesto << " pacijenta u redu zbog veceg prioriteta.\n";
else cout << "\npacijent je dosao na celo reda zbog najveceg prioriteta.\n";}
else EnQueueQ(pacijenti[a], red);
}
brojac++;
a++;
cout<<"-----------------------------"<<endl;
cout << "\nU cekaonici su/je " << brojac << " pacijenta.";
cout << "\nPacijent  ce biti u ordinaciji jos " << pct.y << " jedinica vremena.\n";
cout<<"-----------------------------"<<endl;
}
else if (pct.y<pacijenti[a].x) {
pacijenti[a].x-=pct.y;
if (IsEmptyQ(red)) {
pct=pacijenti[a];
a++;}
else {
pct=FrontQ(red);
DeQueueQ(red);
brojac--;}
cout << "Novi pacijent je usao u ordinaciju. Tamo ce biti " << pct.y << " vremena.\n";
if (w) cout << "\nOn ima prioritet broj " << pct.prior << ".";
cout << "\nU cekaonici su/je: " << brojac << " pacijenta.\n";}
else {
cout << "Novi pacijent je usao u cekaonicu.\n";
if (!w) EnQueueQ(pacijenti[a], red);
else {
cout << " On ima prioritet: " << pacijenti[a].prior << ".\n";
mjesto=provjera(pacijenti[a].prior, brojac);
if (mjesto>=0) {
provjera(5, mjesto);
EnQueueQ(pacijenti[a], red);
provjera(5, brojac-mjesto);
if (mjesto) cout << "\nPacijent je preskocio " << brojac-mjesto << " pacijenta u redu zbog veceg prioriteta.\n";
else cout << "\nPacijent je dosao na celo reda zbog najveceg prioriteta.\n";}
else EnQueueQ(pacijenti[a], red);}
a++;
pct=FrontQ(red);
DeQueueQ(red);
cout << "\nNovi pacijent je usao u ordinaciju. Tamo ce biti " << pct.y << " vremena.\n";
if (w) cout << "\nOn ima prioritet broj: " << pct.prior << ".\n";
cout << "\nU cekaonici je:" << brojac << " osoba.\n";
}
}
else {
pct=FrontQ(red);
DeQueueQ(red);
cout << "Novi pacijent je usao u ordinaciju. Tamo ce biti: " << pct.y << " vremena.\n";
brojac--;
if (w) cout << "\nOn ima  prioritet broj: " << pct.prior << ".\n";
cout << "\nU cekaonici su/je: " << brojac << " pacijenta.\n";
}
cout << "\n\n-----------------------------\n";
system ("pause");
cout << "-----------------------------\n\n";
}
vrij_kraj=clock();
cout<<"-----------------------------"<<endl;
cout << "Zavrsena simulacija.\n";
cout<<"-----------------------------"<<endl;
system ("pause");}
void potr_vrij () {
cout<<"-----------------------------"<<endl;
cout << "\nPosljednja simulacija je trajala " << (float)(vrij_kraj-vrij_poc)/1000 << " sekundi."<<endl;
cout<<"-----------------------------"<<endl;
system ("pause");
}
int main () {
InitQ(red);
int izbor;
srand(time(0));
rand();
do {

system ("cls");

cout << "1. Generiranje parova"<<endl<<endl;
cout << "2. Simuliranje cekaonice "<<endl<<endl;
cout << "3. Simuliranje cekaonice sa prioritetom"<<endl<<endl;
cout << "4. Vrijeme trajanja zadnje simulacije"<<endl<<endl;
cout << "0. Izlaz"<<endl<<endl;
        cout << "Vas izbor: ";
        do cin >> izbor; while (izbor<0 || izbor>4);
        switch (izbor) {
               case 1: {
                    generiraj(); break;
                    }
               case 2: {
                    simulacija1(false); break;
                    }
               case 3: {
                    simulacija1(true); break;
                    }
               case 4: {
                    potr_vrij();
                    }
               }
        } while (izbor);
    return 0;   
}

Initial URL

                                

Initial Description
Rad liječničke ordinacije

Initial Title
Strukture podataka (program koji simulira rad liječničke ordinacije)

Initial Tags
c++

Initial Language
C++