# Posted By

kkovacic on 12/02/11

# Statistics

Viewed 467 times
Favorited by 0 user(s)

# Related snippets

/ Published in: C++
`--Biblioteka red_polje.h-- struct osoba {       int a, x, y;       };struct qu {       osoba el[10000];       int front, rear;       };qu red; int AddOne (int n) {    return ((n+1)%10000);}osoba FrontQ (qu red) {      return red.el[red.front];      }void EnQueueQ (osoba x, qu &red) {     red.rear=AddOne(red.rear);     red.el[red.rear]=x;}void DeQueueQ (qu &red) {     red.front=AddOne(red.front);     }bool IsEmptyQ (qu red) {     if (AddOne(red.rear)==red.front) return true;     return false;}void InitQ (qu &red) {     red.front=0;     red.rear=9999;}   --Biblioteka red_pokazivac.h--  struct osoba {       int a, x, y;       };struct qu {       osoba el;       qu *next;       };struct que {       qu *front, *rear;       };que red; osoba FrontQ (que red) {      return ((red.front)->next)->el;;}void EnQueueQ (osoba x, que &red) {     qu *novi=new qu;     novi->el=x;     novi->next=NULL;      (red.rear)->next=novi;     red.rear=novi;}void DeQueueQ (que &red) {     qu *brisi=red.front;     red.front=(red.front)->next;     delete brisi;}bool IsEmptyQ (que red) {     if (red.rear==red.front) return true;     return false;    }void InitQ (que &red) {     qu *novi=new qu;     novi->next=NULL;     red.rear=novi;     red.front=novi;     }   --Programsko rjeÃƒï¿½Ã¯Â¿Â½ÃƒÂ¯Ã‚Â¿Ã‚Â½Ãƒï¿½Ã¯Â¿Â½Ãƒï¿½Ã‚Â¡enje--  #include <iostream>#include <ctime>#include "red_pokazivac.h"using namespace std;osoba polje[1000], gpolje[1000];int broj=0;clock_t vrijeme1, vrijeme2;void gen () {     cout << "\nUnesite broj generirajucih parova: ";     do cin >> broj; while (broj<1 || broj>10000);     osoba b;     for (int i=0; i<broj; i++) {         b.a=rand()%4+1;         b.x=rand()%10000+1;         b.y=rand()%10000+1;         gpolje[i]=b;         }     cout << "\nZapisi su uspjesno dodani u polje.\n";     system ("pause");}int provjera (int a, int br) {     if (!br) return -1;     int broj=-1;     for (int i=0; i<br; i++) {         if (FrontQ(red).a>a && broj<0) broj=i;         EnQueueQ(FrontQ(red), red);         DeQueueQ(red);         }     if (broj>=0) return broj;     return -1;}void sim (bool w) {     for (int i=0; i<broj; i++) polje[i]=gpolje[i];          vrijeme1=clock();     if (!broj) {        cout << "\nPolje je prazno!\n";        system ("pause");        return;        }     int a=0, br=0, mjesto;     osoba ord;     cout << endl;     while (a<broj || !IsEmptyQ(red)) {           if (!a) {              ord=polje[a];              a++;              cout << "Prva osoba je usla u ordinaciju. Bit ce tamo " << ord.y << " jedinica vremena.";              if (w) cout << "\nNjezin prioritet je " << ord.a << ".";              }           else if (a<broj) {                if (ord.y>polje[a].x) {                   ord.y-=polje[a].x;                   cout << "Nova osoba je usla u cekaonicu.";                   if (!w) EnQueueQ(polje[a], red);                   else {                        cout << " Njezin prioritet je " << polje[a].a << ".";                        mjesto=provjera(polje[a].a, br);                        if (mjesto>=0) {                           provjera(5, mjesto);                           EnQueueQ(polje[a], red);                           provjera(5, br-mjesto);                           if (mjesto) cout << "\nOsoba je preskocila " << br-mjesto << " osoba/e u redu jer ima veci prioritet.";                           else cout << "\nOsoba je dosla na celo reda jer ima najveci prioritet.";                           }                        else EnQueueQ(polje[a], red);                        }                   br++;                   a++;                   cout << "\nU cekaonici je trenutno " << br << " osoba.";                   cout << "\nOsoba u ordinaciji ce biti tamo jos " << ord.y << " jedinica vremena.";                   }                else if (ord.y<polje[a].x) {                     polje[a].x-=ord.y;                     if (IsEmptyQ(red)) {                        ord=polje[a];                        a++;                        }                     else {                          ord=FrontQ(red);                          DeQueueQ(red);                          br--;                          }                     cout << "Nova osoba je usla u ordinaciju. Bit ce tamo " << ord.y << " jedinica vremena.";                     if (w) cout << "\nNjezin prioritet je " << ord.a << ".";                     cout << "\nU cekaonici je trenutno " << br << " osoba.";                     }                else {                     cout << "Nova osoba je usla u cekaonicu.";                     if (!w) EnQueueQ(polje[a], red);                     else {                          cout << " Njezin prioritet je " << polje[a].a << ".";                          mjesto=provjera(polje[a].a, br);                          if (mjesto>=0) {                             provjera(5, mjesto);                             EnQueueQ(polje[a], red);                             provjera(5, br-mjesto);                             if (mjesto) cout << "\nOsoba je preskocila " << br-mjesto << " osoba/e u redu jer ima veci prioritet.";                             else cout << "\nOsoba je dosla na celo reda jer ima najveci prioritet.";                             }                          else EnQueueQ(polje[a], red);                          }                     a++;                     ord=FrontQ(red);                     DeQueueQ(red);                     cout << "\nNova osoba je usla u ordinaciju. Bit ce tamo " << ord.y << " jedinica vremena.";                     if (w) cout << "\nNjezin prioritet je " << ord.a << ".";                     cout << "\nU cekaonici je trenutno " << br << " osoba.";                     }                }           else {                ord=FrontQ(red);                DeQueueQ(red);                cout << "Nova osoba je usla u ordinaciju. Bit ce tamo " << ord.y << " jedinica vremena.";                br--;                if (w) cout << "\nNjezin prioritet je " << ord.a << ".";                cout << "\nU cekaonici je trenutno " << br << " osoba.";                }           cout << "\n\n------------------\n";           system ("pause");           cout << "------------------\n\n";           }     vrijeme2=clock();     cout << "-*-Simulacija je gotova.-*-\n";     system ("pause");}void vrijeme () {     cout << "\nZadnja simulacija je trajala " << (float)(vrijeme2-vrijeme1)/1000 << " sekundi.\n";     system ("pause");}int main () {    InitQ(red);    int a;    srand(time(0));    rand();    do {        system ("cls");        cout << "1. Generiranje niza parova\n";        cout << "2. Simulacija cekaonice ordinacije\n";        cout << "3. Simulacija cekaonice ordinacije sa prioritetom\n";        cout << "4. Ispis vremena trajanja zadnje simulacije\n";        cout << "0. Izlaz iz programa\n";        cout << "Unesite izbor: ";        do cin >> a; while (a<0 || a>4);        switch (a) {               case 1: gen(); break;               case 2: sim(false); break;               case 3: sim(true); break;               case 4: vrijeme();               }        } while (a);    return 0;   }`