Témakör: Dinamikus adattagok


4.1 . megoldással  Verem osztály alapvető funkcióinak elkészítése

Webmester felhasználó Írjunk dinamikus verem osztályt, amelynek osztálydefiníciója az alábbi:
Stack.h állomány:

#ifndef STACK_H

#define STACK_H

 

const int NULL=0;

 

class Stack

{

      int elementNum;

      int *pData;

 

public:

      Stack() {elementNum=0;pData=NULL;}

      Stack(const Stack& theOther);

      ~Stack() {if(pData!=NULL) delete[]pData;}

     

      bool isEmpty()const{return !elementNum;}

      bool pop(int& element);

      bool push(int element);

 

};

#endif /*STACK_H */



2008.01.11. |  Permalink  |  Hozzászólások: 0  |  Tárgyszavak:


4.2 .  Optimalizált verem osztály

Webmester felhasználó Írjunk dinamikusan növekvő verem (Stack) osztályt, amely nem foglalja újra a dinamikus adatterületét minden egyes elem hozzáadásakor vagy kivételekor! Az osztály két méretet tartalmazzon:
- egyik az elemek száma,
- másik a dinamikus adatterület mérete.
Ha a verem mérete meghaladja a rendelkezésre álló adatterületet, az addigi méret kétszeresére növeljük a veremméretet.
Definiáljunk egy shrink függvényt amely a lefoglalt dinamikus adatterületet az adott elemszámhoz szükséges adatterületté csökkenti, természetesen az adatterület újrafoglalásával.


2008.01.18. |  Permalink  |  Hozzászólások: 0  |  Tárgyszavak: példa szintje


4.3 . megoldással  Verem osztály összes funkciójának elkészítése

Webmester felhasználó Írjunk verem osztályt, amely megvalósítja az alábbi, a Stack.h állományban található osztálydefiníciót!


class Stack

{

      unsigned int elementNum;

      int *pData;

 

public:

      Stack() {elementNum=0;pData=NULL;}

      // A másoló konstruktor szükséges a dinamikus adattagok miatt

      Stack(const Stack& theOther);

      // A destruktor felszabadítja a dinamikus adattagot

      ~Stack() {if(pData!=NULL) delete[]pData;}

     

      bool isEmpty()const{return !elementNum;}

      void pop(int& element);

      void push(int element);

      // Az = operátor, amely a mély másolást valósítja meg

      const Stack& Stack::operator = (const Stack& theOther);

};



2008.01.11. |  Permalink  |  Hozzászólások: 0  |  Tárgyszavak: példa szintje


4.4 .  Intervallumhalmazok

Webmester felhasználó Írjunk egy Intervallum osztályt!
- Az intervallum végpontjai valós számok, az intevallum zárt.
- Írjon konstruktort, amelyet meg lehet hívni 0, 1 vagy 2 paraméterrel. Amennyiben nincs megadva minden paraméter, úgy az alapértelmezett intervallum legyen: (1, 2).
- Írjon tagfüggvényeket az intervallum hosszának kiszámítására; annak ellenőrzésére, hogy egy kapott pont benne van-e az intervallumban; két intervallum metszetének kiszámítására (ha nincs közös tartomány, akkor (0,0) legyen a metszet); két intervallum uniójának kiszámítására, ha van közös részük.

Írjunk egy osztályt (Intervallumhalmaz), mely tetszőleges számú Intervallum típusú objektumokat tartalmaz!
- Írjon tagfüggvényeket ehhez az osztályhoz, melyek lehetővé teszik Intervallumhalmazok metszetének és uniójának elkészítését: Metszet esetén minden elemet minden elemmel el kell metszeni. Unió esetén a paraméterként kapott Intervallumhalmaz elemeit egyesével uniózzuk hozzá a már meglévő Intervallumhalmazhoz. Ha két intervallum összeér, akkor azokat összevonjuk, ha nem, akkor fölvesszük az intervallumhalmazba az új intervallumot.

- A program tagolása (.h: osztálydeklaráció, .cpp: hosszabb implementációjú függvények törzse) a C++ programozók körében elterjedt konvenciók alapján történjen, és védjük le a többszörös beépítésből eredő újradefinicióról szóló hibaüzeneteket. A tesztelő függvény is külön állományba kerüljön!
- Írjunk egy diagnosztikai függvényt, amely kiírja a tagváltozók értékét, és egy tesztelő függvényt (main), amely teszteli a konstruktorokat és a többi tagfüggvényt!


2008.02.01. |  Permalink  |  Hozzászólások: 0  |  Tárgyszavak: példa szintje


4.5 .  Mátrix osztály

Webmester felhasználó Írjunk n*m-as mátrixokat egységbezáró osztályt!
- A mátrix egyes elemei valós számok.
- Írjon konstruktort, ami paraméterként a mátrix méreteit kapja meg.
- A mátrixhoz lehessen hozzáadni, belőle kivonni más n*m-as mátrixokat, valamint más mátrixszal is össze lehessen szorozni, amennyiben a dimenziók nem megfelelőek írjon hibaüzenet a standard hibakimenetre.
- A program tagolása (.h: osztálydeklaráció, .cpp: hosszabb implementációjú függvények törzse) a C++ programozók körében elterjedt konvenciók alapján történjen, és védjük le a többszörös beépítésből eredő újradefinicióról szóló hibaüzeneteket. A tesztelő függvény is külön állományba kerüljön.
- Írjunk egy diagnosztikai függvényt, amely kiírja a tagváltozók értékét, és egy tesztelő függvényt (main), amely teszteli a konstruktorokat és a többi tagfüggvényt.



2008.02.01. |  Permalink  |  Hozzászólások: 0  |  Tárgyszavak: példa szintje


4.6 .  Általános egész Bignum

Webmester felhasználó Írjunk egész Bignum osztályt

 - az osztály legyen képes tetszőleges méretű egész számok reprezentálására
 - tudjon alapműveleteket végezni velük (+, -, *, / : függvényekkel)
 - támogasson parsolást (konstruálás stringből), inicializálást egész számokból illetve bájt tömbből
 - ki tudja írni a számot a képernyőre (toString() )



2008.02.01. |  Permalink  |  Hozzászólások: 0  |  Tárgyszavak: példa szintje


4.7 .  2D intervallumhalmazok

Webmester felhasználó Készítsünk kétdimenziós zárt intervallumot (téglalapok) egységbe záró osztályt (2DInterval), valamint ilyen típusú objektumok tárolására alkalmas osztályt (2DIntervalSet)!
- A 2DInterval osztályban implementáljuk a subtract függvényt, amely a paraméterként kapott intervallumot kivonja a már meglévőkből úgy, hogy a megmaradó intervallumok szintén téglalap alakúak legyenek (darabolás után)!
- A 2DIntervalSet osztály legyen képes tetszőleges számú 2D intervallum tárolására (koordinátákkal adott, nem fedik egymást)!
- Implementáljuk a union függvényt, amely újabb intervallumokkal egészíti ki a listát úgy, hogy amennyiben az új intervallum egy meglévővel fedésben van, megszünteti a fedést azáltal, hogy az egyik intervallumból eltávolítja a fedésben lévő részt, majd a megmaradó idomot téglalapokra bontja!
- Implementáljuk az subtract függvényt a 2DIntervalSet osztályra is!


2008.02.01. |  Permalink  |  Hozzászólások: 0  |  Tárgyszavak: példa szintje


4.8 .  Multihalmaz osztály tetszőleges számú elemmel

Webmester felhasználó Készítsünk egész elemeket tartalmazó multihalmazokat reprezentáló osztályt (Multiset)! A multihalmazok és a halmazok között annyi a különbség, hogy a multihalmaz egy elemet többször is tartalmazhat. Egy elem multiplicitása azt adja meg, hogy az elem hányszor van benne a halmazban.

A multihalmazban ezúttal nem rögzítjük az elemek maximális számát. Figyeljünk az egységbezárás alapelvére, használjunk konstruktorokat és privát tagváltozókat, valamint a dinamikus adattagokat tartalmazó osztályok implementálásánál előkerülő dolgokra (destruktor, másoló konstruktor, egyenlőségoperátor)! Implementáljuk az alábbi publikus tagfüggvényeket!

   - add: hozzáad egy elemet a halmazhoz.
   - remove: csökkenti az adott elem multiplicitását, ha az nullára csökkenne, eltávolítja az elemet.
   - get: visszaadja egy elem multiplicitását, ha nincs benne, akkor nullát ad vissza
   - union: az uniót számolja ki: az unióban az egyes elemek multiplicitásai az elem eredeti hamazokban lévő multiplicitásának összege
   - intersection: kiszámolja a multihalmazok metszetét: itt az azonos, de többször szereplő elemeket különbözőnek kell tekinteni a halmazhoz képest
   - compare: összehasonlít két halmazt: itt is az azonos, de többször szereplő elemeket különbözőnek kell tekinteni az összehasonlításkor


2008.02.03. |  Permalink  |  Hozzászólások: 0  |  Tárgyszavak: példa szintje