Zdravím, mám zadaný projekt do školy, kde musím použít Frontu jako strukturu a prvek struktury (id) má být jako pole.
Když jsem dělal Frontu jako třidu, implementace proběhla bez problémů.
Jenomže při implementaci struktury jsem narazil na chybu.
Program vypisuje uplně jiné hodnoty.Zkoušel jsem vynulovat pole, ale to nepomohlo.
Zdroják:
#include <iostream>
#include "main.h"
using namespace std;
#define MAX_SIZE 10
struct Fronta
{
int id[MAX_SIZE];
int head = -1;
int tail = -1;
};
bool IsEmpty(Fronta Q)
{
return (Q.head==-1 && Q.tail==-1);
}
bool IsFull(Fronta Q)
{
return (Q.tail+1)%MAX_SIZE == Q.head;
}
void Put(Fronta Q,int x)
{
cout << "Vkladam " << x << endl;
if(IsFull(Q))
{
cout << "Chyba: Fronta je plna.";
return;
}
if(IsEmpty(Q))
{
Q.head = Q.tail = 0;
}
else
{
Q.tail = (Q.tail+1)%MAX_SIZE;
}
Q.id[Q.tail] = x;
}
void Get(Fronta Q)
{
cout << "Odebiram prvek z fronty" << endl;
if(IsEmpty(Q))
{
cout << "Chyba: Fronta je prazdna.";
return;
}
else if(Q.head == Q.tail)
{
Q.tail = Q.head = -1;
}
else
{
Q.head = (Q.head+1)%MAX_SIZE;
}
}
void Print(Fronta Q)
{
int count = (Q.tail+MAX_SIZE-Q.head)%MAX_SIZE+1;
cout << "Frotna :";
for(int i=0;i<count;i++)
{
int index = (Q.head+i)%MAX_SIZE;
cout << Q.id[index] << " ";
}
cout << endl << endl;
}
int main()
{
Fronta Q;
Put(Q,2); Print(Q);
Put(Q,4); Print(Q);
Put(Q,5); Print(Q);
Get(Q); Print(Q);
Put(Q,8); Print(Q);
Put(Q,7); Print(Q);
Get(Q); Print(Q);
return 0;
}