Revision: 53934
Initial Code
Initial URL
Initial Description
Initial Title
Initial Tags
Initial Language
at December 3, 2011 07:31 by davucina
Initial Code
#include <iostream>
#include <ctime>
//#include "red_pokazivac.h"
#include "red_polje.h"
using namespace std;
int broj_pacijenata = 0;
tpacijent *p_pacijent, *r_pacijent;
bool sim = false;
void generiranje () {
int n;
do {
cout << "\nKoliko parova slucajnih brojeva zelite generirati? ";
cin >> n;
if (n<1) cout << "Greska! Unesli ste krivi broj!\n";
} while(n<1);
broj_pacijenata += n;
p_pacijent = new tpacijent [n];
r_pacijent = new tpacijent [n];
for (int i=0; i<broj_pacijenata; i++) {
r_pacijent[i].Xi = rand()%10000+1;
r_pacijent[i].Yi = rand()%10000+1;
r_pacijent[i].P = rand()%4+1;
}
cout << "\nZapisi su uspjesno izgenerirani i dodani u polje.\n";
}
int provjera_zapisa (int P, int broj) {
if (broj == 0)
return -1;
int br = -1;
for (int i=0; i<broj; i++) {
if (FrontQ(red).P > P && br<0) br = i;
EnQueueQ(FrontQ(red),red);
DeQueueQ(red);
}
if (br >= 0) return br;
else return -1;
}
void cekanje (int sec) {
clock_t kraj;
kraj = clock() + sec*CLOCKS_PER_SEC;
while (clock() < kraj) {}
}
clock_t vrijeme_pocetak, vrijeme_kraj;
void simulacija (bool prioritet) {
for (int i=0; i<broj_pacijenata; i++)
p_pacijent[i] = r_pacijent[i];
vrijeme_pocetak = clock();
if (broj_pacijenata == 0) {
cout << "\nPolje je prazno, koristite mogucnost 1.\n";
sim = false;
return;
}
char p_prioritet[4][50] = {"kriticni slucaj", "rizicni slucaj", "slucaj niskog rizika", "nije hitan slucaj"};
tpacijent pacijent;
int i=0, broj=0, br_zap;
cout << endl;
cout << "Simulacija:\n";
while (i<broj_pacijenata || !IsEmptyQ(red)) {
cout << "-------------------------------------------------------------------------------\n";
if (i == 0) {
pacijent = p_pacijent[i];
i++;
cout << "Prvi pacijent je usao u ordinaciju. Tamo ce provesti " << pacijent.Yi << " vremenskih jedinica.\n";
if (prioritet) cout << "Njegov prioritet je " << p_prioritet[pacijent.P-1] << ".\n";
cekanje(1);
}
else if (i < broj_pacijenata) {
if (pacijent.Yi > p_pacijent[i].Xi) {
pacijent.Yi -= p_pacijent[i].Xi;
cout << "U cekaonicu je usao novi pacijent.";
if (!prioritet) EnQueueQ(p_pacijent[i], red);
else {
cout << " Njegov prioritet je: " << p_prioritet[p_pacijent[i].P-1] << ".\n";
br_zap = provjera_zapisa(p_pacijent[i].P, broj);
if (br_zap >= 0) {
provjera_zapisa (5, br_zap);
EnQueueQ(p_pacijent[i], red);
provjera_zapisa(5, broj-br_zap);
if (br_zap)
cout << "Pacijent je preskocio " << broj - br_zap << " pacijenta/pacijenata u redu jer ima veci prioritet.\n";
else
cout << "Pacijent je dosao na celo reda jer ima najveci prioritet.\n";
cekanje(1);
}
else EnQueueQ(p_pacijent[i], red);
}
i++;
broj++;
cout << "U cekaonici je trenutno " << broj << " pacijenata.\n";
cout << "Pacijent u ordinaciji ce se tamo zadrzati: " << pacijent.Yi << " vremenskih jedinica.\n";
cekanje(1);
}
else if (pacijent.Yi < p_pacijent[i].Xi) {
p_pacijent[i].Xi -= pacijent.Yi;
if (IsEmptyQ(red)) {
pacijent = p_pacijent[i];
i++;
}
else {
pacijent = FrontQ(red);
DeQueueQ(red);
broj--;
}
cout << "U ordinaciju je usao novi pacijent. Tamo ce provesti: " << pacijent.Yi << " vremenskih jedinica.\n";
if (prioritet) cout << "Njegov prioritet je: " << p_prioritet[pacijent.P-1] << ".\n";
cout << "U cekaonici je trenutno " << broj << " pacijent/pacijenata.\n";
cekanje(1);
}
else {
cout << "U cekaonicu je usao novi pacijent.\n";
if (!prioritet) EnQueueQ(p_pacijent[i], red);
else {
cout << " Njegov prioritet je: " << p_prioritet[p_pacijent[i].P-1] << ".\n";
br_zap = provjera_zapisa(p_pacijent[i].P, broj);
if (br_zap >= 0) {
provjera_zapisa(5, br_zap);
EnQueueQ(p_pacijent[i], red);
provjera_zapisa(5, broj - br_zap);
if (br_zap)
cout << "Pacijent je preskocio " << broj - br_zap << " pacijenta/pacijenata u redu jer ima veci prioritet.\n";
else
cout << "Pacijent je dosao na celo reda jer ima najveci prioritet.\n";
}
else EnQueueQ(p_pacijent[i], red);
}
i++;
pacijent = FrontQ(red);
DeQueueQ(red);
cout << "U ordinaciju je usao novi pacijent. Tamo ce provesti: " << pacijent.Yi << " vremenskih jedinica.\n";
if (prioritet) cout << "Njegov prioritet je: " << p_prioritet[pacijent.P-1] << ".\n";
cout << "U cekaonici je trenutno " << broj << " pacijent/pacijenata.\n";
cekanje(1);
}
}
else {
pacijent = FrontQ(red);
DeQueueQ(red);
cout << "U ordinaciju je usao novi pacijent. Tamo ce provesti: " << pacijent.Yi << " vremenskih jedinica.\n";
broj--;
if (prioritet) cout << "Njegov prioritet je: " << p_prioritet[pacijent.P-1] << ".\n";
cout << "U cekaonici je trenutno " << broj << " pacijent/pacijenata.\n";
}
}
vrijeme_kraj = clock();
broj_pacijenata = 0;
sim = true;
InitQ(red);
}
void vrijeme () {
if (broj_pacijenata == 0 && !sim) {
cout << "\nGreska! Niste pokrenuli simulaciju.\n";
return;
}
cout << "\nZadnja simulacija je trajala " << ((float)vrijeme_kraj-vrijeme_pocetak)/1000 << " sec.\n";
}
int main () {
int izbor;
InitQ(red);
srand(time(0));
rand();
do {
cout << "Izbornik:\n";
cout << "1. Generiranje niza od N parova slucajnih brojeva [1-10000]\n";
cout << "2. Simulacija reda lijecnicke ordinacije [bez prioriteta]\n";
cout << "3. Simulacija reda lijecnicke ordinacije [s prioritetom]\n";
cout << "4. Izracun vremena trajanja simulacije\n";
cout << "0. Izlaz iz programa\n";
cout << "Vas izbor: ";
cin >> izbor;
switch (izbor) {
case 1:
generiranje();
break;
case 2:
simulacija(0);
break;
case 3:
simulacija(1);
break;
case 4:
vrijeme();
break;
case 0:
cout << endl;
system("pause");
return 0;
}
cout << endl;
} while (1);
}
Initial URL
Initial Description
3. zadatak: simulacija reda lijeÄniÄke ordinacije, strukture podataka.
Initial Title
Simulacija reda lijeÄniÄke ordinacije
Initial Tags
podataka
Initial Language
C++