Matematické Fórum

Nevíte-li si rady s jakýmkoliv matematickým problémem, toto místo je pro vás jako dělané.

Nástěnka
22. 8. 2021 (L) Přecházíme zpět na doménu forum.matweb.cz!
04.11.2016 (Jel.) Čtete, prosím, před vložení dotazu, děkuji!
23.10.2013 (Jel.) Zkuste před zadáním dotazu použít některý z online-nástrojů, konzultovat použití můžete v sekci CAS.

Nejste přihlášen(a). Přihlásit

#1 21. 03. 2011 20:26

SweetNelli
Příspěvky: 110
Reputace:   -1 
 

C++ kolekce

Chtěla bych vás požádat jestli byste mi nenapsali třídu včetně jednotlivých metod této classy
Děkuji..

Napište třídu Bag realizující datový typ česky zvaný Batoh, Pytel nebo Ranec. Jde o
kolekci hodnot stejného typu (napište pro typ int), do které lze hodnotu přidávat
(mohou být duplikace), odebrat zadanou hodnotu (odebere se první výskyt) a lze
testovat, zda kolekce obsahuje zadanou hodnotu.. Kolekci realizujte pomocí
dynamicky alokovaného pole, jehož počet prvků bude dán parametrem konstruktoru.
Operace:
a. vloženi hodnoty metodou vloz(x)
b. odebrání hodnoty metodou odeber(x)
c. test, zda daná hodnota je v Bagu metodou jeTam()
d. vložení hodnoty přetíženým operátorem +=
e. výpis Bagu přetíženým operátorem <<
f. přiřazení realizující hlubokou kopii přetíženým operátorem =
g. kopírující konstruktor realizující hlubokou kopii

Offline

 

#2 22. 03. 2011 10:14

RePRO
Místo: Jihlava
Příspěvky: 363
Škola: AI VŠPJ (09-12, Bc.)
Pozice: programátor
Reputace:   11 
Web
 

Re: C++ kolekce

↑ SweetNelli:

Ahoj,
tento předmět (C++) jsem absolvoval před rokem a mám udělaný stejný příklad, ale pomocí spojového seznamu. ;-) Tak jestli to pomůže, můžu to sem hodit. ;-)


Srdcem trochu-programátor, duší rádoby-matematik a povoláním analytik-vývojář.

Offline

 

#3 24. 03. 2011 02:23

RePRO
Místo: Jihlava
Příspěvky: 363
Škola: AI VŠPJ (09-12, Bc.)
Pozice: programátor
Reputace:   11 
Web
 

Re: C++ kolekce

Dokonce jsem doprogramoval i ten Bag pomocí dyn. pole minulý rok když se tak koukám...

Code:

#include <cstdlib>
#include <iostream>

using namespace std;

class Hodnota {

  public:
  virtual void vypis(ostream&) const = 0;
  
  };

class HodnotaInt : public Hodnota {
  
  private:
  int cislo;

  public:
  HodnotaInt(int c) {
   cislo = c;
  }

  virtual void vypis(ostream& os) const {
   os << cislo;
  }

  int hodnota() {
   return cislo;
  }

};

class HodnotaChar : public Hodnota {

  private:
  char znak;

  public:
  HodnotaChar(char c) {
   znak = c;
  }

  virtual void vypis(ostream& os) const { 
   os << znak; 
  }

  char hodnota() {
   return znak;
  }

};

/* ------------ TŘÍDA PYTEL ------------ */

class Bag {

  private:
          
  Hodnota ** pole;  // pole ukazatelů na Hodnoty
  int pocet;        // počet prvků v dyn. poli
  int max;          // max. prvků v dyn. poli

  public:
  
  // konstruktor
  Bag(int m = 1);
  // destruktor
  ~Bag();
  // vložení prvku do batohu metodou insert
  void insert (Hodnota *);
  // kopírující konstruktor používající hlubokou kopii
  Bag(const Bag&);
  // operátor přiřazení používající hlubokou kopii
  Bag& operator = (const Bag&);
  // výpis prvků bagu přetíženým operátorem      
  friend ostream& operator << (ostream&, const Bag&);
  // kontrola jestli obsahuje hodnotu
  void obsahuje(Hodnota *);

};

// konstruktor
Bag :: Bag(int p) {

     max   = p;
     pocet = 0;
     pole  = new Hodnota*[max];
};

// destruktor
Bag :: ~Bag() {

     max   = 0;
     pocet = 0;
     delete [] pole;
};

// vložení hodnoty x
void Bag :: insert(Hodnota * x) {
     
     if (pocet == max) {
          cout << " Batoh je plny! " << endl;
     return;
     }
     else {
          pole[pocet] = x;
          pocet++;
     }
};

// kopírující konstruktor používající hlubokou kopii
Bag :: Bag(const Bag& b) {

     max   = b.max;
     pocet = b.pocet;
     pole  = new Hodnota*[max];
     
//  for (int i = 0; i < max; i++ ); pole[i] = b.pole[i];

};

// operátor přiřazení používající hlubokou kopii
Bag& Bag :: operator = (const Bag& b) {

     max   = b.max;
     pocet = b.pocet;
     pole  = new Hodnota*[max];

     for (int i = 0; i < max; i++ ) pole[i] = b.pole[i];
         
};

// výpis prvků v pytli přetíženým operátorem
ostream& operator<<(ostream& os, const Bag& b) {
                     
     int i = b.pocet;
                     
     while (i != 0) {
     
          b.pole[i]->vypis(os);
          cout << ' ';
          i--;
     };

return os;
};

// zda-li batoh obsahuje hodnotu
void Bag :: obsahuje(Hodnota * x) {

int i = pocet;
   
   while (i != 0) {
      if (x == pole[i]) {
        cout << " Hodnota je v pytli \n ";
      }
   i--;
   }
};

int main(int argc, char *argv[])
{
     
    Bag batoh(10);              // vytvoříme si batoh pro deset položek
    
    HodnotaChar znak1('a');     // uděláme si znak 'a'
    HodnotaChar znak2('b');     // uděláme si znak 'b'
    HodnotaInt  cislo1(5);      // uděláme si číslo 5
    HodnotaInt  cislo2(8);      // uděláme si číslo 8

    batoh.insert(&znak1);       // vložíme znak 'a' do baťohu
    batoh.insert(&znak2);       // vložíme znak 'b' do baťohu
    batoh.insert(&cislo1);      // vložíme číslo 5 do baťohu
    
    batoh.obsahuje(&znak2);     // zkusíme vyhledat, zda-li je znak 'a' v baťohu (vypíše nám, že ano) 
    batoh.obsahuje(&cislo1);    // zkusíme vyhledat, zda-li je číslo 5 v baťohu  (vypíše nám, že ano)
    batoh.obsahuje(&cislo2);    // zkusíme vyhledat, zda-li je číslo 8 v baťohu  (nic nám nevypíše, takže není)
    
    system("PAUSE");
    return EXIT_SUCCESS;
}

Srdcem trochu-programátor, duší rádoby-matematik a povoláním analytik-vývojář.

Offline

 

#4 24. 03. 2011 16:22

SweetNelli
Příspěvky: 110
Reputace:   -1 
 

Re: C++ kolekce

↑ RePRO:

moc pomohlo! děkuju

Offline

 

Zápatí

Powered by PunBB
© Copyright 2002–2005 Rickard Andersson