|
|
- ## 1 Korttipakka koostuu korteista
-
- **Tehtävä:**
-
- Luvun ensimmäisessä tehtävässä on laadittu ennalta luokka Kortti, joka sisältää kaksi kokonaislukutyypin jäsenmuuttujaa: maa_ ja arvo_. Luokan logiikka perustuu oletukseen, jonka mukaan muuttujan maa_ arvot merkitsevät seuraavia maita: 1-> hertta, 2->ruutu, 3->pata ja 4->risti. Muuttuja arvo_ saa korteista tuttuja arvoja väliltä 1-13.
-
- Kortti-luokassa on oletusmuodostin, joka alustaa luokasta muodostettavan luokassa olevien korttiolioiden jäsenet arvolla 0. Lisäksi luokka sisältää jäsenfunktiot KerroMaa() ja KerroArvo(), jotka palauttavat nimensä mukaiset kortti-olioon kuuluvat arvot. Neljäs Kortti-luokkaan kuuluva funktio on AlustaKortti(maa, arvo), joka alustaa kortin annetuilla arvoilla.
-
- Sinun tehtävänäsi on luokka KorttiPakka, johon on liitetty kokoonpanollisella koostumissuhteella (automaattisella oliotaulukolla) 52 korttioliota, sekä seuraavassa esitetyt funktiot.
-
- KorttiPakkaan on kirjoitettava oletusmuodostin, joka antaa korttipakkaan kuuluville korttiolioille todelliset kortteja ilmentävät arvot. Korttien alustamiseen käytetään Kortti-luokkaan kuuluvaa AlustaKortti jäsenfunktiota, joka saa parametrina kortin maan ja arvon. Alustaminen on tehtävä siten, että pakan kortit alustuvat seuraavaan järjestykseen (oliotaulukon ensimmäinen alkio = pakan ensimmäinen kortti): hertta 1 - 13, ruutu 1-13, pata 1-13 ja risti 1-13.
-
- KorttiPakka-luokan ainoa varsinainen jäsenfunktio on TulostaKortti(jnro), joka saa parametrina kortin järjestysnumeron alustetussa pakassa ja tulostaa järjestysnumeron mukaisen kortin esimerkkitulosteen mukaisesti. Laatimaasi luokkaa testaava pääohjelma muodostaa korttipakka-olion ja tulostaa pakasta joitakin kortteja.
-
- Example output:
-
- ```
- Hertta 1
- Ruutu 8
- Pata 2
- Risti 2
- Risti 13
- ```
-
- **Vastaus:**
-
- ```
- //** Pre-defined code in the assignment **//
- #include<iostream>
- using namespace std;
-
- class Kortti
- {
- public:
- int KerroMaa();
- int KerroArvo();
- void AlustaKortti(int maa, int arvo);
- Kortti();
-
- private:
- int maa_; // 1=hertta, 2=ruutu, 3=pata, 4=risti
- int arvo_;
- };
-
- Kortti::Kortti() : maa_(0), arvo_(0)
- {
- }
-
- int Kortti::KerroMaa()
- {
- return maa_;
- }
-
- int Kortti::KerroArvo()
- {
- return arvo_;
- }
-
- void Kortti::AlustaKortti(int maa, int arvo)
- {
- maa_ = maa;
- arvo_ = arvo;
- }
- //** ---------- ---------- ---------- **//
-
- class KorttiPakka
- {
- public:
- KorttiPakka();
- ~KorttiPakka();
- void TulostaKortti(int jnro)
- {
-
- int arvo = jnro+1;
-
- if (jnro >= 0 && jnro <= 13) {
- cout << "Hertta " << arvo << endl;
- } else if (jnro > 13 && jnro <= 26) {
- cout << "Ruutu " << arvo-13 << endl;
- } else if (jnro > 26 && jnro <= 39) {
- cout << "Pata " << arvo-26 << endl;
- } else if (jnro > 39 && jnro <= 51) {
- cout << "Risti " << arvo-39 << endl;
- } else {
- cerr << "Kortin on oltava väliltä 0-51" << endl;
- }
- }
-
- private:
- Kortti* kortti_[51];
- int jnro_;
- };
-
- KorttiPakka::KorttiPakka() : jnro_(0)
- {
- int a;
-
- for (int i=0; i<=51; i++) {
-
- if (jnro_ > 12) {
- jnro_ = 1;
- }
-
- if(i >= 0 && i <= 13) {
- a = 1;
- } else if (i > 13 && i <= 26) {
- a = 2;
- } else if (i > 26 && i <= 39) {
- a = 3;
- } else if (i > 39 && i <= 51) {
- a = 4;
- } else {
- cerr << "Kortin on oltava väliltä 0-51" << endl;
- }
-
- kortti_[i] = new Kortti();
- kortti_[i]->AlustaKortti(a,jnro_);
- jnro_++;
- }
-
- }
-
- KorttiPakka::~KorttiPakka()
- {
- for (int i=0; i<51; i++) {
- delete kortti_[i];
- }
- }
-
- //** Pre-defined code in the assignment **//
- int main()
- {
- int jnro;
- KorttiPakka pakka;
- pakka.TulostaKortti(0); // Hertta 1
- pakka.TulostaKortti(20); // Ruutu 8
- pakka.TulostaKortti(27); // Pata 2
- pakka.TulostaKortti(40); // Risti 2
- pakka.TulostaKortti(51); // Risti 13
- return 0;
- }
- //** ---------- ---------- ---------- **//
- ```
|