/ Published in: C++
Programsko rješenje za zadatak 3 iz kolegija Strukture podataka.
Expand |
Embed | Plain Text
Copy this code and paste it in your HTML
--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; }