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