Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

[c++] implementacja metod kolejki FIFO

Ostatnio zmodyfikowano 2015-01-23 19:28
Autor Wiadomość
Wooojtas
Temat założony przez niniejszego użytkownika
[c++] implementacja metod kolejki FIFO
» 2015-01-23 19:28:35
Witam,
pisze projekt zaliczeniowy z kolejki FIFO i napotkałem problem w metodzie do usuwania elementu który jest na pierwszym miejscu w kolejce. Czy mógłby mi ktoś powiedzieć co jest nie tak z tą częścią kodu? Program się kompiluje, ale metoda kol.wydawanie niczego nie usuwa.
Drugim problemem jest wyświetlanie pierwszego elementu kolejki. Metoda działa ale zwraca tylko ostatni atrybut klasy(int cena)
Będę wdzięczny za każdą pomoc!

kolejka.h
C/C++
#include <iostream>
#include <cstdio>
#include "PelnaException.h"
#pragma once
#define pojemnosc 4   //zdefiniowana z góry pojemność kolejki(nie musi być duża, bo to tylko przykład)

using namespace std;

template < class T > class kolejka
{
public:
    kolejka( int = pojemnosc ); //konstruktor domyślny pobierający zdefiniowaną pojemność kolejki
    ~kolejka(); //destruktor domyślny
    void dodawanie( T ); //metoda dodawania elementów do kolejki, metoda typu bool, wykorzystująca wzorce(można dodać element dowolnego typu, zdefiniowanego później)
    T wydawanie( T & ); //metoda usuwająca pierwszy z elementów(zamówienie wydane)
    T front(); //metoda sprawdzająca jakie jest pierwsze zamówienie, ale nie usuwająca go
    void oproznij(); //metoda oprozniajaca cala kolejke
    bool pusta(); //metoda typu bool sprawdzająca czy kolejka jest pusta
    bool pelna(); //metoda typu bool sprawdzająca czy kolejka jest pełna
private:
    int rozmiar;
    T * values;
    int poczatek;
    int koniec;
    int pozycja;
};


template < class T > kolejka < T >::kolejka( int x )
{
    rozmiar = x; //rozmiar tablicy przechowującej zamówienia
    values = new T[ rozmiar ]; //nowa tablica o zadanym rozmiarze;
    poczatek = 0;
    koniec = 0; //kolejka jest pusta, początek i koniec = 0
    pozycja = 0; //licznik zamowien
}


template < class T > bool kolejka < T >::pusta()
{
    if( koniec == poczatek ) //sprawdza czy koniec i początek kolejki są sobie równe, jeśli tak kolejka pusta
         return 1;
    else
         return 0; //jeśli nie kolejka nie jest pusta
   
}

template < class T > bool kolejka < T >::pelna()
{
    if(( koniec + 1 ) % rozmiar == poczatek ) //jeśli reszta z dzielenia (koniec+1) przez rozmiar daje poczatek
         return 1; //kolejka jest pełna
    else
         return 0; //inaczej jest pusta
   
}

template < class T > void kolejka < T >::dodawanie( const T a )
{
    if( !kolejka < T >::pelna() ) //sprawdza czy kolejka nie jest pelna, jesli nie mozna dodac kolejne zamowienie
    {
        koniec =(( koniec + 1 ) % rozmiar ); //przyrost konca przed dodaniem
        values[ koniec ] = a; //dodanie elementu na koncu
    }
    else
         throw new PelnaException();
   
}

template < class T > T kolejka < T >::wydawanie( T & val )
{
    if( kolejka < T >::pusta() )
    {
        cout << "kolejka pusta" << endl;
    }
    else
    {
        val = values[ poczatek ];
        poczatek =(( poczatek + 1 ) % rozmiar );
    }
    return val;
}

template < class T > void kolejka < T >::oproznij()
{
    poczatek = koniec = rozmiar - 1; //oproznia cala kolejke
}

template < class T > T kolejka < T >::front()
{
    return values[ poczatek ]; //zwraca element który jest na pierwszym miejscu w kolejce
}

template < class T > kolejka < T >::~kolejka()
{
    delete[] values; //destruktor zwalniający przypisaną pamięć
}

definicja klasy:

C/C++
class Lanczyk
    : public Mjensko
{
private:
    string Zupa;
    int CenaLanczu;
   
public:
    Lanczyk();
    Lanczyk( string mieso, string dodatek, int kal, string zupka, int cena );
    ~Lanczyk();
   
    void setZupa( string zupka );
    void setCenaLanczu( int cena );
   
    string getZupa();
    int getCenaLanczu();
   
    friend bool operator <( const Lanczyk & cena1, const Lanczyk & cena2 );
    friend ostream & operator <<( ostream & output, const Lanczyk & D );
   
   
    void DrukujLanczyk();
};

main:

C/C++
#include <iostream>
#include <string>
#include <conio.h>
#include <fstream>
#include <queue>
#include "mjensko.h"
#include "lanczyk.h"
#include "kolejka.h"
#include "PelnaException.h"

using namespace std;

int main()
{
   
    Lanczyk A( "eskalopki", "frytki", 1200, "cebulowa", 25 );
    Lanczyk B( "gicz", "ziemniaczki", 1500, "cebulowa", 21 );
   
   
    kolejka < Lanczyk > kol;
    kol.dodawanie( B );
    kol.dodawanie( A );
    cout << kol.front() << endl;
    kol.wydawanie();
};
P-125442
« 1 »
  Strona 1 z 1