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