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++