Return to Snippet

Revision: 53902
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++