Revision: 53930
Initial Code
Initial URL
Initial Description
Initial Title
Initial Tags
Initial Language
at December 3, 2011 06:55 by tlapas
Initial Code
#include <iostream>
#include <ctime>
#include "red_polje.h"
//#include "red_pokazivac.h"
using namespace std;
int br_pac = 0;
pacijent polje[10000], tmp_polje[1000];
void wait (int sec) {
clock_t endwait;
endwait = clock() + sec*CLOCKS_PER_SEC;
while (clock() < endwait) {}
}
void gen () {
int N;
do {
cout << "\nKoliko slucajnih parova brojeva zelite generirati: ";
cin >> N;
if (N<1) cout << "Greska!\n";
} while(N<1 || N>10000);
br_pac += N;
for (int i=0; i<br_pac; i++) {
tmp_polje[i].Xi = rand()%10000+1;
tmp_polje[i].Yi = rand()%10000+1;
tmp_polje[i].prioritet = rand()%4+1;
}
wait(1);
cout << "\nZapisi su uspjesno dodani u polje.\n";
}
int provjera_zapisa (int prioritet, int broj) {
if (broj == 0) return -1;
int br = -1;
for (int i=0; i<broj; i++) {
if (FrontQ(red).prioritet > prioritet && br<0)
br = i;
EnQueueQ(FrontQ(red),red);
DeQueueQ(red);
}
if (br >= 0)
return br;
else
return -1;
}
clock_t pvrijeme, zvrijeme;
bool simulacija = false;
void sim (bool prioritet) {
for (int i=0; i<br_pac; i++)
polje[i] = tmp_polje[i];
pvrijeme = clock();
if (br_pac == 0) {
cout << "\nGreska, polje je prazno! Koristite mogucnost 1.\n";
simulacija = false;
return;
}
pacijent element;
int brojac=0, broj=0, rbroj;
cout << "\nPokretanje simulacije:\n";
while (brojac<br_pac || !IsEmptyQ(red)) {
cout << endl << endl;
if (brojac == 0) {
element = polje[brojac];
brojac++;
cout << "Prvi pacijent ulazi u ordinaciju.\nPacjent ce u ordinaciji provesti " << element.Yi << " sekundi.\n";
if (prioritet) cout << "Njegov prioritet je " << element.prioritet << ".\n";
}
else if (brojac < br_pac) {
if (element.Yi > polje[brojac].Xi) {
element.Yi -= polje[brojac].Xi;
cout << "U cekaonicu ulazi novi pacijent.";
if (!prioritet) EnQueueQ(polje[brojac], red);
else {
cout << " Njegov prioritet je: " << polje[brojac].prioritet << ".\n";
rbroj = provjera_zapisa(polje[brojac].prioritet, broj);
if (rbroj >= 0) {
provjera_zapisa (5, rbroj);
EnQueueQ(polje[brojac], red);
provjera_zapisa(5, broj-rbroj);
if (rbroj)
cout << "Pacijent preskace " << broj - rbroj << " pacijenata(nta) u redu jer ima veci prioritet.\n";
else
cout << "Pacijent se pomice na celo reda jer ima najveci prioritet.\n";
}
else EnQueueQ(polje[brojac], red);
}
brojac++;
broj++;
cout << "\nU cekaonici je trenutno " << broj << " pacijenata(nta).\n";
cout << "Pacijent koji je u ordinaciji ce tamo biti jos: " << element.Yi << " sekundi.\n";
}
else if (element.Yi < polje[brojac].Xi) {
polje[brojac].Xi -= element.Yi;
if (IsEmptyQ(red)) {
element = polje[brojac];
brojac++;
}
else {
element = FrontQ(red);
DeQueueQ(red);
broj--;
}
cout << "U ordinaciju ulazi novi pacijent.\nTamo ce provesti: " << element.Yi << " sekundi.\n";
if (prioritet) cout << "Njegov prioritet je: " << element.prioritet << ".\n";
cout << "U cekaonici je trenutno " << broj << " pacijenata(nt).\n";
}
else {
cout << "U cekaonicu ulazi novi pacijent.\n";
if (!prioritet) EnQueueQ(polje[brojac], red);
else {
cout << " Njegov prioritet je " << polje[brojac].prioritet << ".\n";
rbroj = provjera_zapisa(polje[brojac].prioritet, broj);
if (rbroj >= 0) {
provjera_zapisa(5, rbroj);
EnQueueQ(polje[brojac], red);
provjera_zapisa(5, broj - rbroj);
if (rbroj)
cout << "Pacijent preskace " << broj - rbroj << " pacijenata(nt) u redu jer ima veci prioritet.\n";
else
cout << "Pacijent se pomice na celo reda jer ima najveci prioritet.\n";
}
else EnQueueQ(polje[brojac], red);
}
brojac++;
element = FrontQ(red);
DeQueueQ(red);
cout << "U ordinaciju ulazi novi pacijent.\nTamo ce provesti: " << element.Yi << " sekundi.\n";
if (prioritet) cout << "Njegov prioritet je: " << element.prioritet << ".\n";
cout << "U cekaonici je trenutno " << broj << " pacijenata(nt).\n";
}
}
else {
element = FrontQ(red);
DeQueueQ(red);
cout << "U ordinaciju je usao novi pacijent.\nTamo ce provesti: " << element.Yi << " sekundi.\n";
broj--;
if (prioritet) cout << "Njegov prioritet je: " << element.prioritet << ".\n";
cout << "U cekaonici je trenutno " << broj << " pacijenata(nt).\n";
}
wait(2);
}
zvrijeme = clock();
simulacija = true;
br_pac = 0;
InitQ(red);
}
void vrij () {
if (br_pac==0 && simulacija==false) {
cout << "\nNiste pokrenuli simulaciju, koristite mogucnosti 2 ili 3.\n";
return;
}
cout << "\nSimulacija je trajala " << ((float)zvrijeme-pvrijeme)/1000 << " sekunde(u).\n";
}
int main () {
int izbor;
srand(time(0));
rand();
InitQ(red);
do {
cout << "\tSIMULACIJA RADA ORDINACIJSKE CEKAONICE\n\n\t\tIZBORNIK\n\n";
cout << "1. Generiranje niza od N parova slucajnih brojeva\n";
cout << "2. Simulacija cekaonice\n";
cout << "3. Simulacija cekaonice s prioritetom\n";
cout << "4. Izracun vremena trajanja simulacije\n";
cout << "9. Izlaz iz programa\n\n";
cout << "Vas izbor je: ";
cin >> izbor;
switch (izbor) {
case 1:
gen();
break;
case 2:
sim(0);
break;
case 3:
sim(1);
break;
case 4:
vrij();
break;
case 9:
cout << endl;
system("pause");
return 0;
}
cout << endl;
} while (1);
}
Initial URL
Initial Description
Glavni program koji simulira ordinacijsku Äekaonicu
Initial Title
RED - glavni program
Initial Tags
Initial Language
C++