Wątek przeniesiony 2019-05-16 12:04 z przez Marooned.

Kolejka c++ - Jak ustawić konstruktor

2019-05-12 17:30
0

Witam prosiłbym o pomoc z konstruktorem ;s kawałek zadania wygląda następująco

Napisz klase wzorcowa TKCykDyn reprezentujaca kolejke dowolnych danych. Dane wstawiane do kolejki maj byc przechowywane w tablicy dynamicznej, tworzonej przez konstruktor. Klasa ma nastepujace pola prywatne: pole maxR – rozmiar tablicy, wtab – wskaznik na tablicy, pocz, kon – pocztek i koniec kolejki (wartosci całkowite), ile – ilosc elementów aktualnie pamietanych elementów w kolejce. W klasie powinny znalezc sie nastepujace metody: • konstruktor z parametrem całkowitym okreslajacym rozmiar tablicy kolejki o wartosci domyslnej 100, tworzy tablice dynamiczn i ustawia odpowiednie wartosci pozostałych pól, w przypadku niepoprawnej wartosci parametru konstruktora przyjac wartosc 100 jako wartosc rozmiaru tablicy;

Oczywiście jest to początek klasy i sie nie kompiluje bo resztę trzeba wywołać w mainie, ale chodzi mi o tylko wyłącznie o konstruktor czy jest dobrze ale wiem ze nie tylko nie mam pojęcia jak poprawnie napisać dlatego zwracam sie do was o pomoc


#ifndef TKCYKDYN_H_INCLUDED
#define TKCYKDYN_H_INCLUDED

template class <int T , int N>
class TKCykDyn(){
    private:
int maxR; // rozmiar tablicy
int * wtab; //wskaŸnik na tablicê
int pocz; // pocz¹tek kolejki
int kon; //koniec kolejki
int ile; // licznik kolejki

public:

TKCykDyn(int N=100){

maxR=N;
wtab=new int[N];
if(N<=0)
    throw "niepoprane dane"
pocz=0;
kon=0;
ile=0;

}
edytowany 1x, ostatnio: jelon512, 2019-05-12 18:36
To się kompiluje? - Delor 2019-05-12 18:10
Jak dla mnie to to jest sprzeczne: przechowywane w tablicy dynamicznej, która ma początek , koniec, rozmiar, itd., to jak dynamiczna? - lion137 2019-05-13 22:25
koniec i rozmiar się zmieniają - twonek 2019-05-13 22:36

Pozostało 580 znaków

2019-05-13 22:56
1

Popatrz sobie na ten uproszczony przykład

#include <iostream>
using namespace std;

template<typename DataType>
class Container
{
public:
    Container(int size) : size_(size) {}
    void printSize() { cout << "size: " << size_ << "\n"; }

private:
    int size_;    
};

int main()
{
    Container<int> myints(5);
    myints.printSize();
    Container<double> mydoubles(13);
    mydoubles.printSize();

    return 0;
}

Pozostało 580 znaków

2019-05-13 23:04
0

Temat do zamknięcia :) zadanko zrobione a konstruktor po myśleniu wygląda u mnie tak (cały kod działa tak jak powinien działać :D ) :

TKCykDyn(int x){

 {
        pocz=0;
    kon=0;
    ile=0;
    wtab=new T[100];
    maxR=100;
    maxR=x;
    if(x<=0)
    throw "niepoprawne dane";
    else
    {
    ile=0;
    pocz=0;
    kon=0;
    wtab=new T[maxR];
    }
    }

}
edytowany 1x, ostatnio: jelon512, 2019-05-13 23:05

Pozostało 580 znaków

2019-05-13 23:14
0

Yhhh. Gubię się w tym kodzie. Więc albo jestem zmęczony albo kod jest nieczytelny.
Memory Leak do poprawy.
I przeczytaj co się stanie jak rzucisz wyjątek w konstruktorze.

edytowany 1x, ostatnio: Delor, 2019-05-13 23:21

Pozostało 580 znaków

2019-05-13 23:25
0
Delor napisał(a):

Yhhh. Gubię się w tym kodzie. Więc albo jestem zmęczony albo kod jest nieczytelny.
Memory Leak do poprawy.
I przeczytaj co się stanie jak rzucisz wyjątek w konstruktorze.

cały kod ogólnie wygląda tak :
oczywiscie w mainie go sobie wywołałem

#ifndef TKCYKDYN_H_INCLUDED
#define TKCYKDYN_H_INCLUDED
using namespace std;
template<class T>
class TKCykDyn{
    private:
int maxR; // rozmiar tablicy
T * wtab; //wskaznik na tablicê
int pocz; // poczatek kolejki
int kon; //koniec kolejki
int ile; // licznik kolejki

public:

TKCykDyn(int x){

 {
        pocz=0;
    kon=0;
    ile=0;
    wtab=new T[100];
    maxR=100;
    maxR=x;
    if(x<=0)
    throw "niepoprawne dane";
    else
    {
    ile=0;
    pocz=0;
    kon=0;
    wtab=new T[maxR];
    }
    }

}

~TKCykDyn()
{
delete [] wtab;

}

bool CzyPusta()const
{
return (ile==0)? true : false;
}
   bool CzyPelna()const
    {
        return (ile==maxR)? true : false;
    }

    void DoKolejki(const T & a){

      {
        if( CzyPusta() == true )
        {
            wtab[0] = a;
            ile++;
        }
         else if( CzyPelna() == true )
        {
            maxR*=1.1;
        }
        else
        {
            wtab[ (kon+1)%maxR ] = a;
            ile++;
            kon = (kon+1)%maxR;
        }
    }

    }

    bool zKolejki()
    {

if(CzyPusta()==true)
        return false;
    else if(ile==1)
    {
        int tmp=pocz;
        pocz=0;
        kon=0;
        ile=0;
        return wtab[tmp];
    }
    else if(ile>1)
    {
        int tmp=pocz;
        pocz=(pocz+1)%maxR;
        ile--;
        return wtab[tmp];
    }
    return true;
    }

     void Print()const
    {
        for( int i = 0 ; i < ile ; ++i  )
        {
            cout << "tab[" << (i + pocz)%maxR << "]=" <<
            wtab[ (i + pocz)%maxR ]<<endl;
        }
    }

};

#endif // TKCYKDYN_H_INCLUDED

do tej klasy jeszcze mam napisać metode która usunie elementy wieksze niz x ( parametr metody) a Metoda powinna zwrocic ilosc elementów usunietych , i nie bardzo mam pomysł jak sie za to zabrac

edytowany 2x, ostatnio: jelon512, 2019-05-16 12:04
Na początek wejdź sobie na format.krzaq.cc, skopiuj swój kod tam, wybierz styl file i wciśnij Format. Potem kod skopiuj z powrotem. - twonek 2019-05-14 00:16

Pozostało 580 znaków

2019-05-14 08:34
0

Co się stanie gdy:

  1. wywołasz konstruktor z ujemnym parametrem?
  2. dodasz więcej elementów niż pojemność kolejki?
  3. stworzysz kolejkę na <10 elementów i dodasz >10 elementów? (to inne pytanie niż 2.)
  4. stworzysz kolejkę przechowującą double i wywołasz zKolejki()?

do tej klasy jeszcze mam napisać metode która usunie elementy wieksze niz x ( parametr metody) a Metoda powinna zwrocic ilosc elementów usunietych , i nie bardzo mam pomysł jak sie za to zabrac

Napraw wcześniejsze problemy. Wymyślenie implementacji tej metody może okazać się łatwiejsze.

Pozostało 580 znaków

Liczba odpowiedzi na stronę

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0