Return to Snippet

Revision: 53824
at December 2, 2011 22:59 by kkovacic


Initial Code
--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;   
}

Initial URL


Initial Description
Programsko rješenje za zadatak 3 iz kolegija Strukture podataka.

Initial Title
Zadatak 3, Strukture podataka

Initial Tags
3, podataka, c++

Initial Language
C++