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
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
↑ 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. ;-)
Offline
Dokonce jsem doprogramoval i ten Bag pomocí dyn. pole minulý rok když se tak koukám...
#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;
}Offline