Revision: 53824
Initial Code
Initial URL
Initial Description
Initial Title
Initial Tags
Initial Language
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++