Témakör: Állományok kezelése


8.1 . megoldással  Hallgatók adatainak állományba mentése és visszatöltése

Webmester felhasználó Írjunk Student osztályt, amely képes elmenteni és betölteni magát! Egy állományban több Student típusú objektumot is tárolhatunk! Valósítsuk meg mind a bináris, mind a szöveges tárolást, és az utóbbit a szabványos bemeneten és kimeneten is teszteljük!

A Student osztály adattagjai az alábbiak:

class Student

{

      static const unsigned neptun_size = 7;

      char neptun[neptun_size]; // Ehelyett is jobb lenne a string, de a példa kedvéért ezt is gyakoroljuk

      unsigned mark; // Érdemjegy: az unsigned charral több baj van, mint így (minden I/O karakterként kezeli)

 

public:

      std::string name; // Ezt nem akarjuk korlátozni     

...
};


A feladatot érdemes tanulmányozni a házi feladat mentésének/betöltésének megírása előtt.



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


8.2 . megoldással  Verem betöltése és elmentése

Webmester felhasználó Írjunk szöveges és bináris betöltést/elmentést az alábbi verem osztály számára!

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);

};


A példa igényli az állomány végéig való olvasást, és a tömbök bináris kiírását. A konzolon/terminálon az állomány vége jel Windows alatt <Enter>Ctrl+Z<Enter>, Linux/Unix alatt Ctrl+D<Enter>.


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


8.3 .  Mátrix elmentése és betöltése

Webmester felhasználó

Adott egy 3*3-as mátrixokat reprezentáló osztály:

class Matrix

{

public:

      double values[9];

 

    // Konstruktor

      Matrix(double defValue=1){ for(int i = 0; i < 9; i++){ values[i] = defValue; }}

};


Írjunk az osztályhoz olyan tagfüggvényt, amely
- elmenti az elemeket bináris állományba
- elmenti az elemeket szöveges állományba
- betölti az elemeket bináris állományból
- betölti az elemeket szöveges állományból!

Teszteljük az osztályt:
- teszteljük a szöveges függvényeket cin és cout segítségével!
- teszteljük a szöveges és a bináris függvényeket állománnyal!



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


8.4 . megoldással  Kétdimenziós vektor elmentése és betöltése

Webmester felhasználó

Adott egy kétdimenziós vektort reprezentáló osztály:

class TwoDimVector

{

public:

      double x,y;

 

    // Konstruktor

      TwoDimVector(double x=0, double y=0){this->x=x; this->y=y;};

};


Írjunk az osztályhoz olyan tagfüggvényt, amely
- elmenti a két tagváltozót bináris állományba
- elmenti a két tagváltozót szöveges állományba
- betölti a két tagváltozót bináris állományból
- betölti a két tagváltozót szöveges állományból!

Teszteljük az osztályt:
- teszteljük a szöveges függvényeket cin és cout segítségével!
- teszteljük a szöveges és a bináris függvényeket állománnyal!

A példa megoldásában használt elemek elengedhetetlenek a házi feladat elkészítéséhez.



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


8.5 .  Multihalmaz osztály elmentése és betöltése

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

Készítsünk függvényeket, melyekkel a multihalmaz tartalma elmenthető állományokba, illetve onnan betölthető.



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