Témakör: Osztályok


3.1 . megoldással  Általános kétdimenziós vektor

Webmester felhasználó

Írjunk egy kétdimenziós vektor osztályt!

  • A vektor egyes koordinátái valós számok.
  • Inicializáláskor a vektort meg lehessen adni 0, 1 vagy 2 értékkel is (ha nem adunk meg egy inicializáló értéket, akkor az nulla legyen!
  • A vektorhoz lehessen hozzáadni, belőle kivonni más kétdimenziós vektorokat, valamint más vektorral is össze lehessen szorozni (skaláris szorzat)!
  • 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.01.13. |  Permalink  |  Hozzászólások: 0  |  Tárgyszavak: példa szintje


3.2 . megoldással  Nemnegatív koordinátájú kétdimenziós vektor

Webmester felhasználó

Írjunk egy kétdimenziós vektor osztályt!

  • Az osztály gondoskodjon róla, hogy a vektor koordinátái csak nemnegatív számok legyenek!
  • Inicializáláskor a vektort meg lehessen adni 0, 1 vagy 2 értékkel is (ha nem adjuk meg egy koordináta kezdőértékét, akkor az nulla legyen!
  • A vektorhoz lehessen hozzáadni, belőle kivonni más kétdimenziós vektorokat! Továbbá más vektorral lehessen összeszorozni (skaláris szorzat)!
  • 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.01.13. |  Permalink  |  Hozzászólások: 2  |  Tárgyszavak: példa szintje


3.3 . megoldással  Hallgatók adatainak nyilvántartása

Webmester felhasználó Írjunk osztályt, amely hallgatókat tart nyilván! Az osztály megírása közben használjuk a C++ beépített std::string osztályát vagy egy saját magunk által írt sztring osztályt!

Ha még nem írtunk sztring osztályt, az std::string osztály alapműveleteinek a bemutatását megtaláljuk a SzC++Ny könyv 12.5 fejezetének első alfejezeteiben.


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


3.4 .  Téglatest osztály

Webmester felhasználó Írjunk Téglatest osztályt!
- A téglatest élhosszai valós számok.
- Írjon konstruktort, amelyet meg lehet hívni 0, 1, 2 vagy 3 paraméterrel. Amennyiben nincs megadva élhossz, úgy az alapértelmezett legyen 1.
- Írjon tagfüggvényeket a térfogat, felszín és a szumma élhossz kiszámítására.
- 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


3.5 .  Mátrix osztály

Webmester felhasználó Írjunk 3*3-as mátrixokat egységbezáró osztályt!
- A mátrix egyes elemei valós számok.
- A mátrixhoz lehessen hozzáadni, belőle kivonni más 3*3-as mátrixokat, valamint más mátrixszal is össze lehessen szorozni!
- 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


3.6 .  Háromdimenziós vektor osztály

Webmester felhasználó

 Írjunk háromdimenziós vektorokat egységbezáró osztályt!
- A vektor egyes koordinátái valós számok.
- A vektorhoz lehessen hozzáadni, belőle kivonni más háromdimenziós vektorokat, valamint más vektorral is össze lehessen szorozni (skaláris és vektoriális szorzat - használjunk függvénynév-túlterhelést)!
- 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.01.31. |  Permalink  |  Hozzászólások: 0  |  Tárgyszavak: példa szintje


3.7 .  Egész Bignum

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

 - az osztály legyen képes 128 bites (16 bájt) 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


3.8 .  Tank osztály

Webmester felhasználó Írjunk egy tankot reprezentáló osztályt (MicroTank), mely képes más tankokkal harcolni!

Az osztály tagváltozói a következőek:

  • Életerő (hitPoints), mely egy egész szám 0 és 1000 között.
  • Támadóerő (attackRating), mely egy egész szám 1 és 200 között.
  • Védekezőerő (defenseRating), mely egy egész szám 0 és 200 között.
Ügyeljünk rá, hogy a tagváltozók private adattagok legyenek!

Valósítsuk meg az osztály metódusait:

  • Írjuk meg osztály konstruktorát, melyben kötelező megadni a tank támadó- és védekezőerejét! A kezdeti életerőt is lehessen megadni, de ne legyen kötelező (használjon default paramétereket: ha a programozó nem ad meg életerőt, akkor a tagváltozó kezdeti értéke 1000 lesz)!
  • Írjunk egy Repair() függvényt, mely 100 ponttal növeli a tank életerejét! Ügyeljünk rá, hogy 1000 fölé sosem kerülhessen az érték.
  • Írjunk egy Attack(MicroTank& otherTank) függvényt, mely támadást indít egy másik tank ellen! A függvény tartalma csakis akkor fusson le, ha a "saját" tankunk életereje nagyobb mint 0! A támadás hatására otherTank életereje csökkenjen (("saját" tankunk támadóértéke) - (otherTank védekezőereje)) értékkel! Ügyeljünk rá, hogy 0 alá nem csökkenhet a tank életereje ill. ha nagyobb otherTank védekezőereje mint a "saját" tankunk támadóereje, akkor ne változzon az életerő (ne fordulhasson elő, hogy támadás hatására növekszik otherTank életereje)!
  • Írjunk egy egyszerű main függvényt, amely létrehoz két tankot, amelyek közül az egyik megtámadja a másikat. Minden esemény után írjuk ki a tankok állapotát!



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


3.9 .  Tört osztály

Webmester felhasználó Írjunk egy törtet reprezentáló osztályt Tort néven, melynek tagváltozói:
int szamlalo;
int nevezo;

- Inicializáláskor a tört adatait meg lehessen adni a konstuktorban.
- Készítsünk kívülről elérhető függvényeket, melyekkel lekérdezhető, illetve módosítható a tört számlálója és nevezője.
- Készítsünk kívülről elérhető függvényt, mellyel a tört valós értékét megkaphatjuk.
- Készítsünk függvényeket, amely elvégzi a négy alapműveletet és a hatványozást a törtekre!
- 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 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.02. |  Permalink  |  Hozzászólások: 0  |  Tárgyszavak:


3.10 . megoldással  Hibák az osztályokban

Webmester felhasználó Keressük meg a hibát az alábbi kódrészletekben!
a)

class A

{ 

      int a;

public:

      f()const

      {

            a++;

      }

};

 

b)

class A

{

      int a;

      static void f(){a++;}

};

  

c)

class C

{

      const int x=2;

};


d)

class A

{

      static int c=3;

};







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


3.11 .  Multihalmaz osztály

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 rögzíthetjü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! 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


3.12 . megoldással  Objektumpéldányok száma

Webmester felhasználó Írjunk olyan osztályt, ami számolja, hogy hány objektumpéldány létezik belőle és ezt le is lehet tőle kérdezni!

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


3.14 . megoldással  Rombusz alakzat modellezése

Webmester felhasználó

Írjunk osztályt egy rombusz modellezésére!

  • A tagváltozók és tagfüggvények deklarációit külön fejlécfájlban tároljuk, és gondoskodjunk róla, hogy egy esetleges többszöri beépítés ne jelentsen problémát!
  • Az osztály tárolja privát tagváltozókban a rombusz adatait (két átlójának hosszát). A külső elérés érdekében írjunk hozzá publikus lekérdező és értékadó tagfüggvényeket. Ügyeljünk rá hogy a rombusz átlói csak pozitív értékeket kaphassanak!
  • Az osztálypéldányokat a rombusz két átlójának hosszával lehet inicializálni, de bármelyik elhagyható példányosításkor (ekkor a 10 kezdőértéket veszik fel).
  • Le lehet tőle kérdezni a rombusz oldalának hosszát, a kerületét és a területét.
  • Redelkezik egy publikus bool IsSquare() tagfüggvénnyel, amely logikai igaz értékkel tér vissza ha a rombusz amelyre meghívjuk egyben négyzet is.

 



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


3.15 . megoldással  Szabadon eső test szimulációja

Webmester felhasználó

Egy testet h0 magasságból elengedünk, így a gravitációs erő álltal gyorsítva halad a föld felé. Írjunk osztály a test mozgásának modellezésére!

  • A tagváltozók és tagfüggvények deklarációit külön fejlécfájlban tároljuk, és gondoskodjunk róla, hogy egy esetleges többszöri beépítés ne jelentsen problémát!
  • Az osztály tárolja privát tagváltozókban a gravitációs gyorsulást és azt a magasságot ahonnan a testet elengedjük. A külső elérés érdekében írjunk hozzá publikus lekérdező és értékadó tagfüggvényeket. Ügyeljünk rá hogy a gravitációs gyorsulás és a magasság csak pozitív értékeket kaphassanak!
  • Az osztálypéldányokat a magassággal és a gravitációs gyorsulással (elhagyható, ekkor a 9.81 kezdőértéket kapja) lehet inicializálni.
  • Lekérdezhető az adott időpillanatban mekkora a sebessége és milyen magasan van (mindkettő 0 ha már földet ért).

  • Lekérdezhető melyik időpillanatban fog földet érni.


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