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
Ahoj, opět potřebuji pomoc (doufám že naposled na hodně dlouho).
Kdyby měl někdo trochu času a napsal třeba metody vloz, odeber a << (viz. nasledujici př.).
Docela to spěchá zítra to mám odevzdat a nevím si s většinou rady.
Tomu kdo mi pomůže budu zavázána. 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 , odebrat zadanou hodnotu a lze testovat, zda kolekce obsahuje zadanou hodnotu.. Kolekci realizujte pomocí spojového seznamu. Operace:
a. vloženi hodnoty metodou vloz(x)
b. odebrání hodnoty metodou odeber(x)
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
kod:
/*bag1.h*/ typedef int TypPrvku; class Bag { public: Bag() { celo=0; volny=0; } ~Bag(); void vloz(TypPrvku); void odeber(TypPrvku); bool jeTam(TypPrvku) const; Bag& operator=(const Bag&); //Bag& operator+(const Bag&x, const Bag&y); friend ostream& operator<<(ostream&, const Bag&); private: struct Elem { TypPrvku p,hodn; Elem *dalsi; Elem(Elem *d) { dalsi=d; // p=P; } }; Elem *volny,*celo; };
/*main.cpp*/ #include<iostream> using namespace std; #include"bag1.h" int main() { Bag b1; //vlozeny čtyři prvky - 1 3 1 2 b1.vloz(1); /*b1+=1;*/ b1.vloz(3); /*b1+=3;*/ b1.vloz(1); /*b1+=1;*/ b1.vloz(2); /*b1+=2;*/ cout << "b1 = " << b1 << endl; cout << "------------" << endl; Bag b2 = b1; // deklarace a inicializace b2 b1.odeber(1); // odebrání posledního prvku (dvojky) z b1 cout << "b1 = " << b1 << endl; cout << "b2 = " << b2 << endl; cout << "------------" << endl; Bag b3; // deklarace b3 b3 = b1; // přiřazení b1 do b3 b1.odeber(1); // odebrání jednoho prvku z b1 cout << "b1 = " << b1 << endl; cout << "b3 = " << b3 << endl << endl; system("PAUSE"); return 0; }
#include<iostream> using namespace std; #include"bag1.h" Bag::~Bag() {} void Bag::vloz(TypPrvku p) { Elem *pom = new Elem(NULL); // vytvoření dynamické proměnné pom typu Elem } void Bag::odeber(TypPrvku p) {} bool Bag::jeTam(TypPrvku p) const {} ostream& operator<<(ostream& o, const Bag& p) {} Bag& Bag::operator=(const Bag& p) {}
Offline
Asi už pozdě, zapomněl jsem si přečíst datum vložení příspěvku, no nic, ale může se hodit do budoucna:
#include <iostream> #include <cmath> using namespace std; struct Seznam { int cislo; Seznam *dalsi; }; class Pytel { private: Seznam *prvni; Seznam *konec; public: Pytel() { konec = prvni = NULL; } void vloz(int x); void odeber(int x); void jeTam(int x); friend ostream &operator<<(ostream &os, Pytel a); Pytel& operator=(const Pytel&); //chybí operator+= ~Pytel(); }; int main() { system("pause"); return 0; } void Pytel::vloz(int x) { if (prvni) { Seznam *novy = new Seznam; novy->cislo = x; novy->dalsi = NULL; konec->dalsi = novy; konec = novy; } else { prvni = new Seznam; prvni->cislo = x; prvni->dalsi = NULL; konec = prvni; } } void Pytel::odeber(int x) { Seznam *zac, *ak; zac = ak = prvni; while (zac != NULL) { if (x == ak->cislo) { zac->dalsi = ak->dalsi; delete ak; break; } zac = ak; ak = ak->dalsi; } } void Pytel::jeTam(int x) { Seznam *pom = prvni; while (pom != NULL) { if (x == pom->cislo) { cout << "cislo je v pytli\n"; break; } pom = pom->dalsi; } } ostream &operator<<(ostream &os, Pytel a) { Seznam *pom = a.prvni; while (pom != NULL) { os << pom->cislo << endl; pom = pom->dalsi; } return os; } Pytel& Pytel::operator=(const Pytel& p) { if (&p==this) return *this; Seznam *pom, *akt; while (prvni != NULL) { pom = prvni->dalsi; delete prvni; prvni = pom; } prvni = new Seznam; akt = konec = prvni; prvni->dalsi = NULL; pom = p.prvni; while (pom != NULL) { akt->cislo = pom->cislo; pom = pom->dalsi; if (pom) { akt->dalsi = new Seznam; akt = akt->dalsi; akt->dalsi = NULL; } } konec = akt; return *this; } Pytel::~Pytel() { Seznam *pom; while (prvni != NULL) { pom = prvni->dalsi; delete prvni; prvni = pom; } }
Offline
↑ RePRO:
Fakt už pozdě, ale jestli to je dobře, třeba se to bude někomu hodit.
Offline