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 04. 04. 2009 14:24 — Editoval gladiator01 (04. 04. 2009 14:25)

gladiator01
Místo: Jindřichův Hradec
Příspěvky: 1587
Škola: ZČU FAV - SWI
Pozice: absolvent
Reputace:   53 
Web
 

třída bag - c++

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:

Code:

/*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;
};

Code:

/*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;
}

Code:

#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)
{}

Naděje jako svíce jas, potěší srdce štvané, čím temnější je noční čas, tím zářivěji plane.
VIVERE - MILITARE EST (Seneca)
Vím, že nic nevím. - Sokrates

Offline

  • (téma jako vyřešené označil(a) gladiator01)

#2 19. 04. 2010 03:16

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

Re: třída bag - c++

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:

Code:

#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;
    }
}

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

Offline

 

#3 19. 04. 2010 11:08

gladiator01
Místo: Jindřichův Hradec
Příspěvky: 1587
Škola: ZČU FAV - SWI
Pozice: absolvent
Reputace:   53 
Web
 

Re: třída bag - c++

↑ RePRO:
Fakt už pozdě, ale jestli to je dobře, třeba se to bude někomu hodit.


Naděje jako svíce jas, potěší srdce štvané, čím temnější je noční čas, tím zářivěji plane.
VIVERE - MILITARE EST (Seneca)
Vím, že nic nevím. - Sokrates

Offline

 

Zápatí

Powered by PunBB
© Copyright 2002–2005 Rickard Andersson