Return to Snippet

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