Revision: 53902
Initial Code
Initial URL
Initial Description
Initial Title
Initial Tags
Initial Language
at December 3, 2011 05:59 by maretic_kristian
Initial Code
// 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;
}
Initial URL
/
Initial Description
Glavni program koji koristi implementacije za rad nad redovima
Initial Title
Glavni_program.cpp
Initial Tags
Initial Language
C++