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.

190 lines
4.3 KiB

4 years ago
  1. ## 3 Kuviosta periytyvä nelikulmio
  2. **Tehtävä:**
  3. Luvun viimeisessä tehtäväsi sinun tulee kirjoittaa luokan määrittely ja jäsenfunktioiden toteutus luokalle Nelikulmio, joka on edellisessä tehtävässä laaditun abstraktin Kuvio-luokan aliluokka.
  4. Luokan tulee sisältää seuraavat ominaisuudet:
  5. - Jäsenmuuttujat: korkeus_ ja leveys_
  6. - Parametrillinen muodostin, joka välittää Kuvio-luokan muodostimelle Nelikulmio-muodostimen saaman char-tyyppisen parametrin ja alustaa edellisessä mainitut jäsenmuuttujat muodostimelle välitetyin parametrein.
  7. - Funktion Piirra toteutus, joka piirtää nelikulmion sen jäsenmuuttujissa olevien korkeus ja leveys tietojen perusteella. Piirtämiseen käytetään yliluokan jäsenmuuttujassa olevaa tekstuurimerkkiä kuten esimerkkitulosteesta voidaan havaita. Piirtämiseen tarvittava tekstuuri saadaan käyttöön Kuvio-luokan PalautaTekstuuri() funktiolla.
  8. Example output:
  9. ```
  10. Muodostetaanko neliö (syötä 1) vai nelikulmio (syötä muu luku): 2
  11. Anna muodostettavan nelikulmion sivun korkeus: 4
  12. Anna muodostettavan nelikulmion sivun leveys: 7
  13. Syötä merkki, jota käytetään nelikulmion tekstuurina: O
  14. Muodostetaanko neliö (syötä 1) vai nelikulmio (syötä muu luku): 1
  15. Anna muodostettavan neliön sivun pituus: 4
  16. Syötä merkki, jota käytetään neliön tekstuurina: W
  17. Muodostetaanko neliö (syötä 1) vai nelikulmio (syötä muu luku): 2
  18. Anna muodostettavan nelikulmion sivun korkeus: 5
  19. Anna muodostettavan nelikulmion sivun leveys: 10
  20. Syötä merkki, jota käytetään nelikulmion tekstuurina: @
  21. Muodostetut kuviot piirrettynä:
  22. OOOOOOO
  23. OOOOOOO
  24. OOOOOOO
  25. OOOOOOO
  26. WWWW
  27. WWWW
  28. WWWW
  29. WWWW
  30. @@@@@@@@@@
  31. @@@@@@@@@@
  32. @@@@@@@@@@
  33. @@@@@@@@@@
  34. @@@@@@@@@@
  35. ```
  36. **Vastaus:**
  37. ```
  38. //** Pre-defined code in the assignment **//
  39. #include<iostream>
  40. using namespace std;
  41. class Kuvio
  42. {
  43. public:
  44. Kuvio(char tekstuuri);
  45. char PalautaTekstuuri();
  46. virtual void Piirra() = 0;
  47. private:
  48. char tekstuuri_;
  49. };
  50. Kuvio::Kuvio(char tekstuuri) : tekstuuri_(tekstuuri)
  51. {
  52. }
  53. char Kuvio::PalautaTekstuuri()
  54. {
  55. return tekstuuri_;
  56. }
  57. class Nelio : public Kuvio
  58. {
  59. public:
  60. Nelio(char tekstuuri, int sivun_pituus);
  61. void Piirra();
  62. private:
  63. int sivun_pituus_;
  64. };
  65. Nelio::Nelio(char tekstuuri, int sivun_pituus) : Kuvio(tekstuuri), sivun_pituus_(sivun_pituus)
  66. {
  67. }
  68. void Nelio::Piirra()
  69. {
  70. int i, j;
  71. for (i=0; i < sivun_pituus_; i++)
  72. {
  73. for (j=0; j < sivun_pituus_; j++)
  74. {
  75. if (j == sivun_pituus_ - 1)
  76. {
  77. cout << PalautaTekstuuri() << endl;
  78. }
  79. else
  80. {
  81. cout << PalautaTekstuuri();
  82. }
  83. }
  84. }
  85. }
  86. //** ---------- ---------- ---------- **//
  87. class Nelikulmio: public Kuvio
  88. {
  89. public:
  90. Nelikulmio(char tekstuuri, int korkeus, int leveys);
  91. void Piirra();
  92. private:
  93. int korkeus_;
  94. int leveys_;
  95. };
  96. Nelikulmio::Nelikulmio(char tekstuuri, int korkeus, int leveys)
  97. : Kuvio(tekstuuri), korkeus_(korkeus), leveys_(leveys)
  98. {
  99. }
  100. // TODO Remove duplicate functionality
  101. void Nelikulmio::Piirra()
  102. {
  103. int i, j;
  104. for (i=0; i < korkeus_; i++)
  105. {
  106. for (j=0; j < leveys_; j++)
  107. {
  108. if (j == leveys_ - 1)
  109. {
  110. cout << PalautaTekstuuri() << endl;
  111. }
  112. else
  113. {
  114. cout << PalautaTekstuuri();
  115. }
  116. }
  117. }
  118. }
  119. //** Pre-defined code in the assignment **//
  120. int main()
  121. {
  122. int sivun_leveys, sivun_korkeus, i, valinta;
  123. char tekstuuri;
  124. Kuvio* kuviot[3];
  125. for(i=0; i<3; i++)
  126. {
  127. cout << "Muodostetaanko neliö (syötä 1) vai nelikulmio (syötä muu luku): ";
  128. cin >> valinta;
  129. if (valinta == 1)
  130. {
  131. cout << "Anna muodostettavan neliön sivun pituus: ";
  132. cin >> sivun_leveys;
  133. cout << "Syötä merkki, jota käytetään neliön tekstuurina: ";
  134. cin >> tekstuuri;
  135. kuviot[i] = new Nelio(tekstuuri, sivun_leveys);
  136. }
  137. else
  138. {
  139. cout << "Anna muodostettavan nelikulmion sivun korkeus: ";
  140. cin >> sivun_korkeus;
  141. cout << "Anna muodostettavan nelikulmion sivun leveys: ";
  142. cin >> sivun_leveys;
  143. cout << "Syötä merkki, jota käytetään nelikulmion tekstuurina: ";
  144. cin >> tekstuuri;
  145. kuviot[i] = new Nelikulmio(tekstuuri, sivun_korkeus, sivun_leveys);
  146. }
  147. }
  148. cout << endl << "Muodostetut kuviot piirrettynä:" << endl << endl;
  149. for (i=0; i<3; i++)
  150. {
  151. kuviot[i]->Piirra();
  152. cout << endl;
  153. }
  154. return 0;
  155. }
  156. //** ---------- ---------- ---------- **//
  157. ```