Return to Snippet

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