C++ fundamentals through coding exercises
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

143 lines
4.0 KiB

4 years ago
  1. ## 1 Korttipakka koostuu korteista
  2. **Tehtävä:**
  3. 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.
  4. 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.
  5. Sinun tehtävänäsi on luokka KorttiPakka, johon on liitetty kokoonpanollisella koostumissuhteella (automaattisella oliotaulukolla) 52 korttioliota, sekä seuraavassa esitetyt funktiot.
  6. 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.
  7. 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.
  8. Example output:
  9. ```
  10. Hertta 1
  11. Ruutu 8
  12. Pata 2
  13. Risti 2
  14. Risti 13
  15. ```
  16. **Vastaus:**
  17. ```
  18. //** Pre-defined code in the assignment **//
  19. #include<iostream>
  20. using namespace std;
  21. class Kortti
  22. {
  23. public:
  24. int KerroMaa();
  25. int KerroArvo();
  26. void AlustaKortti(int maa, int arvo);
  27. Kortti();
  28. private:
  29. int maa_; // 1=hertta, 2=ruutu, 3=pata, 4=risti
  30. int arvo_;
  31. };
  32. Kortti::Kortti() : maa_(0), arvo_(0)
  33. {
  34. }
  35. int Kortti::KerroMaa()
  36. {
  37. return maa_;
  38. }
  39. int Kortti::KerroArvo()
  40. {
  41. return arvo_;
  42. }
  43. void Kortti::AlustaKortti(int maa, int arvo)
  44. {
  45. maa_ = maa;
  46. arvo_ = arvo;
  47. }
  48. //** ---------- ---------- ---------- **//
  49. class KorttiPakka
  50. {
  51. public:
  52. KorttiPakka();
  53. ~KorttiPakka();
  54. void TulostaKortti(int jnro)
  55. {
  56. int arvo = jnro+1;
  57. if (jnro >= 0 && jnro <= 13) {
  58. cout << "Hertta " << arvo << endl;
  59. } else if (jnro > 13 && jnro <= 26) {
  60. cout << "Ruutu " << arvo-13 << endl;
  61. } else if (jnro > 26 && jnro <= 39) {
  62. cout << "Pata " << arvo-26 << endl;
  63. } else if (jnro > 39 && jnro <= 51) {
  64. cout << "Risti " << arvo-39 << endl;
  65. } else {
  66. cerr << "Kortin on oltava väliltä 0-51" << endl;
  67. }
  68. }
  69. private:
  70. Kortti* kortti_[51];
  71. int jnro_;
  72. };
  73. KorttiPakka::KorttiPakka() : jnro_(0)
  74. {
  75. int a;
  76. for (int i=0; i<=51; i++) {
  77. if (jnro_ > 12) {
  78. jnro_ = 1;
  79. }
  80. if(i >= 0 && i <= 13) {
  81. a = 1;
  82. } else if (i > 13 && i <= 26) {
  83. a = 2;
  84. } else if (i > 26 && i <= 39) {
  85. a = 3;
  86. } else if (i > 39 && i <= 51) {
  87. a = 4;
  88. } else {
  89. cerr << "Kortin on oltava väliltä 0-51" << endl;
  90. }
  91. kortti_[i] = new Kortti();
  92. kortti_[i]->AlustaKortti(a,jnro_);
  93. jnro_++;
  94. }
  95. }
  96. KorttiPakka::~KorttiPakka()
  97. {
  98. for (int i=0; i<51; i++) {
  99. delete kortti_[i];
  100. }
  101. }
  102. //** Pre-defined code in the assignment **//
  103. int main()
  104. {
  105. int jnro;
  106. KorttiPakka pakka;
  107. pakka.TulostaKortti(0); // Hertta 1
  108. pakka.TulostaKortti(20); // Ruutu 8
  109. pakka.TulostaKortti(27); // Pata 2
  110. pakka.TulostaKortti(40); // Risti 2
  111. pakka.TulostaKortti(51); // Risti 13
  112. return 0;
  113. }
  114. //** ---------- ---------- ---------- **//
  115. ```