Revision: 53912
Updated Code
at January 20, 2012 21:22 by dsitum1
Updated Code
#include <iostream>
#include <cstdlib>
#include <ctime>
//#include "red_polje.h"
#include "red_pokazivac.h"
using namespace std;
int vrijeme(tred *Q, int n) //vremena provedena u ordinaciji + eventualna cekanja kad nikog nema
{
tpacijent *R = new tpacijent [10000];
tpacijent pacijent; //najprije kopirat postojeci red u novi, pa manipulirat s novim
for (int i=0; i<n; i++)
{
pacijent = frontQ(Q);
dequeueQ(Q);
enqueueQ(pacijent, Q);
R[n-i]=pacijent;
}
int trajanje=0; //ukupno trajanje
int vrijeme_prvog=0; //vrijeme osobe u ordinaciji
int cekanje_da_dodju=0; //cekanje da netko dodje na red ako nikog nema
while (n)
{
vrijeme_prvog=R[n--].y;
trajanje+=vrijeme_prvog;
while (vrijeme_prvog > cekanje_da_dodju && n)
{
trajanje+=R[n].y;
cekanje_da_dodju+=R[n--].x;
}
trajanje+=cekanje_da_dodju-vrijeme_prvog; //visak vremena -> cekanje da neki pacijent dodje u kliniku kad nema nikog u redu
cekanje_da_dodju=0;
}
delete [] R;
return trajanje;
}
void generiraj(tred *Q, int &n)
{
srand(time(0));
cout << "Unesite broj parova koje zelite generirati: ";
cin >> n;
tpacijent pacijent;
for (int i=0; i<n; i++)
{
pacijent.x=rand()%10000+1;
pacijent.y=rand()%10000+1; //generiranje pacijenta i dodavanje na kraj reda
pacijent.prioritet=rand()%4+1;
enqueueQ(pacijent, Q);
}
}
void lijeci(tred *Q, int &n) //Obradjivanje pacijenata redom kojim su dosli
{
int ukupno_vrijeme=vrijeme(Q,n);
tpacijent pacijent;
while (!isemptyQ(Q))
{
cout << "Stanje reda:" << endl;
for (int i=1; i<=n; i++)
{
pacijent = frontQ(Q);
dequeueQ(Q);
cout << "--------------" << endl;
cout << "Pacijent: " << i << endl;
cout << "Vrijeme dolaska: " << pacijent.x << endl;
cout << "Vrijeme u ordinaciji: " << pacijent.y << endl;
enqueueQ(pacijent, Q);
}
cout << "============================" << endl;
cout << "Pacijent s pocetka reda odlazi u ordinaciju i izadje zdrav :)" << endl;
dequeueQ(Q);
n--;
}
cout << "Svi pacijenti su obradjeni." << endl;
cout << "Vrijeme trajanja lijecenja pacijenata: " << ukupno_vrijeme << endl;
}
void lijeci2(tred *Q, int &n) //Obradjivanje pacijenata prioritetnim redom
{
int ukupno_vrijeme=vrijeme(Q,n);
tpacijent pacijent;
while (!isemptyQ(Q))
{
cout << "Stanje reda:" << endl; //ispis stanja reda
for (int i=1; i<=n; i++)
{
pacijent = frontQ(Q);
dequeueQ(Q);
cout << "--------------" << endl;
cout << "Pacijent: " << i << endl;
cout << "Vrijeme dolaska: " << pacijent.x << endl;
cout << "Vrijeme u ordinaciji: " << pacijent.y << endl;
cout << "Prioritet: " << pacijent.prioritet << endl;
enqueueQ(pacijent, Q);
}
cout << "============================" << endl;
cout << "Pacijent s pocetka reda odlazi u ordinaciju i izadje zdrav :)" << endl;
tpacijent prvi;
prvi = frontQ(Q);
dequeueQ(Q);
n--;
int zbroj_vremena_dolazaka=0;
int broj_preko_reda=0;
tpacijent *R = new tpacijent [10000];
while (prvi.y > zbroj_vremena_dolazaka && broj_preko_reda<n)
{
pacijent = frontQ(Q);
zbroj_vremena_dolazaka += pacijent.x;
if (prvi.y > zbroj_vremena_dolazaka)
{
R[broj_preko_reda++] = pacijent;
dequeueQ(Q);
} else break;
}
int i,j;
for (i=1; i<broj_preko_reda; i++) //uzlazno sortiramo polje (insertion sort)
{
tpacijent pom = R[i];
for (j=i-1; j>=0 && R[j].prioritet>pom.prioritet; j--)
R[j+1]=R[j];
R[j+1]=pom;
}
for (i=0; i<broj_preko_reda; i++)
enqueueQ(R[i], Q);
for (i=0; i<n-broj_preko_reda; i++) //hocemo da nam parovi s prioritetom dodju na celo reda pa sve kruzno pomaknemo za n-broj_preko_reda mjesta
{
pacijent = frontQ(Q);
dequeueQ(Q);
enqueueQ(pacijent, Q);
}
if (broj_preko_reda>1)
cout << "Dogodila se prioritetna promjena. Broj pacijenata koji su zamijenili pozicije: " << broj_preko_reda << endl;
delete [] R;
}
cout << "Svi pacijenti su obradjeni." << endl;
cout << "Vrijeme trajanja lijecenja pacijenata: " << ukupno_vrijeme << endl;
}
int main()
{
int izbor, n;
tred *Q = initQ(Q);
do
{
cout << "1. Generiranje brojeva" << endl;
cout << "2. Pruzanje medicinske pomoci pacijentima" << endl;
cout << "3. Pruzanje medicinske pomoci pacijentima (s prioritetom)" << endl;
cout << "0. Izlaz iz programa" << endl;
cout << "Odaberite mogucnost: ";
cin >> izbor;
switch (izbor)
{
case 1:
generiraj(Q,n);
break;
case 2:
lijeci(Q,n);
break;
case 3:
lijeci2(Q,n);
break;
}
} while (izbor);
delete Q;
}
Revision: 53911
Initial Code
Initial URL
Initial Description
Initial Title
Initial Tags
Initial Language
at December 3, 2011 06:09 by dsitum1
Initial Code
#include <iostream>
#include <cstdlib>
#include <ctime>
//#include "red_polje.h"
#include "red_pokazivac.h"
using namespace std;
int vrijeme(tred *Q, int n) //vremena provedena u ordinaciji + eventualna cekanja kad nikog nema
{
tpacijent *R = new tpacijent [10000];
tpacijent pacijent; //najprije kopirat postojeci red u novi, pa manipulirat s novim
for (int i=0; i<n; i++)
{
pacijent = frontQ(Q);
dequeueQ(Q);
enqueueQ(pacijent, Q);
R[n-i]=pacijent;
}
int trajanje=0; //ukupno trajanje
int vrijeme_prvog=0; //vrijeme osobe u ordinaciji
int cekanje_da_dodju=0; //cekanje da netko dodje na red ako nikog nema
while (n)
{
vrijeme_prvog=R[n--].y;
trajanje=vrijeme_prvog;
while (vrijeme_prvog > cekanje_da_dodju && n)
{
trajanje+=R[n].y;
cekanje_da_dodju+=R[n--].x;
}
trajanje+=cekanje_da_dodju-vrijeme_prvog; //visak vremena -> cekanje da neki pacijent dodje u kliniku kad nema nikog u redu
cekanje_da_dodju=0;
}
delete [] R;
return trajanje;
}
void generiraj(tred *Q, int &n)
{
srand(time(0));
cout << "Unesite broj parova koje zelite generirati: ";
cin >> n;
tpacijent pacijent;
for (int i=0; i<n; i++)
{
pacijent.x=rand()%10000+1;
pacijent.y=rand()%10000+1; //generiranje pacijenta i dodavanje na kraj reda
pacijent.prioritet=rand()%4+1;
enqueueQ(pacijent, Q);
}
}
void lijeci(tred *Q, int &n) //Obradjivanje pacijenata redom kojim su dosli
{
int ukupno_vrijeme=vrijeme(Q,n);
tpacijent pacijent;
while (!isemptyQ(Q))
{
cout << "Stanje reda:" << endl;
for (int i=1; i<=n; i++)
{
pacijent = frontQ(Q);
dequeueQ(Q);
cout << "--------------" << endl;
cout << "Pacijent: " << i << endl;
cout << "Vrijeme dolaska: " << pacijent.x << endl;
cout << "Vrijeme u ordinaciji: " << pacijent.y << endl;
enqueueQ(pacijent, Q);
}
cout << "============================" << endl;
cout << "Pacijent s pocetka reda odlazi u ordinaciju i izadje zdrav :)" << endl;
dequeueQ(Q);
n--;
}
cout << "Svi pacijenti su obradjeni." << endl;
cout << "Vrijeme trajanja lijecenja pacijenata: " << ukupno_vrijeme << endl;
}
void lijeci2(tred *Q, int &n) //Obradjivanje pacijenata prioritetnim redom
{
int ukupno_vrijeme=vrijeme(Q,n);
tpacijent pacijent;
while (!isemptyQ(Q))
{
cout << "Stanje reda:" << endl; //ispis stanja reda
for (int i=1; i<=n; i++)
{
pacijent = frontQ(Q);
dequeueQ(Q);
cout << "--------------" << endl;
cout << "Pacijent: " << i << endl;
cout << "Vrijeme dolaska: " << pacijent.x << endl;
cout << "Vrijeme u ordinaciji: " << pacijent.y << endl;
cout << "Prioritet: " << pacijent.prioritet << endl;
enqueueQ(pacijent, Q);
}
cout << "============================" << endl;
cout << "Pacijent s pocetka reda odlazi u ordinaciju i izadje zdrav :)" << endl;
tpacijent prvi;
prvi = frontQ(Q);
dequeueQ(Q);
n--;
int zbroj_vremena_dolazaka=0;
int broj_preko_reda=0;
tpacijent *R = new tpacijent [10000];
while (prvi.y > zbroj_vremena_dolazaka && broj_preko_reda<n)
{
pacijent = frontQ(Q);
zbroj_vremena_dolazaka += pacijent.x;
if (prvi.y > zbroj_vremena_dolazaka)
{
R[broj_preko_reda++] = pacijent;
dequeueQ(Q);
} else break;
}
int i,j;
for (i=1; i<broj_preko_reda; i++) //uzlazno sortiramo polje (insertion sort)
{
tpacijent pom = R[i];
for (j=i-1; j>=0 && R[j].prioritet>pom.prioritet; j--)
R[j+1]=R[j];
R[j+1]=pom;
}
for (i=0; i<broj_preko_reda; i++)
enqueueQ(R[i], Q);
for (i=0; i<n-broj_preko_reda; i++) //hocemo da nam parovi s prioritetom dodju na celo reda pa sve kruzno pomaknemo za n-broj_preko_reda mjesta
{
pacijent = frontQ(Q);
dequeueQ(Q);
enqueueQ(pacijent, Q);
}
if (broj_preko_reda>1)
cout << "Dogodila se prioritetna promjena. Broj pacijenata koji su zamijenili pozicije: " << broj_preko_reda << endl;
delete [] R;
}
cout << "Svi pacijenti su obradjeni." << endl;
cout << "Vrijeme trajanja lijecenja pacijenata: " << ukupno_vrijeme << endl;
}
int main()
{
int izbor, n;
tred *Q = initQ(Q);
do
{
cout << "1. Generiranje brojeva" << endl;
cout << "2. Pruzanje medicinske pomoci pacijentima" << endl;
cout << "3. Pruzanje medicinske pomoci pacijentima (s prioritetom)" << endl;
cout << "0. Izlaz iz programa" << endl;
cout << "Odaberite mogucnost: ";
cin >> izbor;
switch (izbor)
{
case 1:
generiraj(Q,n);
break;
case 2:
lijeci(Q,n);
break;
case 3:
lijeci2(Q,n);
break;
}
} while (izbor);
delete Q;
}
Initial URL
Initial Description
Programsko rješenje 3. zadatka iz struktura - red
Initial Title
programsko_rjesenje.cpp
Initial Tags
Initial Language
C++