|
|
- ## 3 Kuviosta periytyvä nelikulmio
-
- **Tehtävä:**
-
- 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.
-
- Luokan tulee sisältää seuraavat ominaisuudet:
-
- - Jäsenmuuttujat: korkeus_ ja leveys_
-
- - Parametrillinen muodostin, joka välittää Kuvio-luokan muodostimelle Nelikulmio-muodostimen saaman char-tyyppisen parametrin ja alustaa edellisessä mainitut jäsenmuuttujat muodostimelle välitetyin parametrein.
-
- - 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.
-
- Example output:
-
- ```
- Muodostetaanko neliö (syötä 1) vai nelikulmio (syötä muu luku): 2
- Anna muodostettavan nelikulmion sivun korkeus: 4
- Anna muodostettavan nelikulmion sivun leveys: 7
- Syötä merkki, jota käytetään nelikulmion tekstuurina: O
- Muodostetaanko neliö (syötä 1) vai nelikulmio (syötä muu luku): 1
- Anna muodostettavan neliön sivun pituus: 4
- Syötä merkki, jota käytetään neliön tekstuurina: W
- Muodostetaanko neliö (syötä 1) vai nelikulmio (syötä muu luku): 2
- Anna muodostettavan nelikulmion sivun korkeus: 5
- Anna muodostettavan nelikulmion sivun leveys: 10
- Syötä merkki, jota käytetään nelikulmion tekstuurina: @
-
- Muodostetut kuviot piirrettynä:
-
- OOOOOOO
- OOOOOOO
- OOOOOOO
- OOOOOOO
-
- WWWW
- WWWW
- WWWW
- WWWW
-
- @@@@@@@@@@
- @@@@@@@@@@
- @@@@@@@@@@
- @@@@@@@@@@
- @@@@@@@@@@
- ```
-
- **Vastaus:**
-
- ```
- //** Pre-defined code in the assignment **//
- #include<iostream>
- using namespace std;
-
- class Kuvio
- {
- public:
- Kuvio(char tekstuuri);
- char PalautaTekstuuri();
- virtual void Piirra() = 0;
-
- private:
- char tekstuuri_;
- };
-
- Kuvio::Kuvio(char tekstuuri) : tekstuuri_(tekstuuri)
- {
- }
-
- char Kuvio::PalautaTekstuuri()
- {
- return tekstuuri_;
- }
-
- class Nelio : public Kuvio
- {
- public:
- Nelio(char tekstuuri, int sivun_pituus);
- void Piirra();
-
- private:
- int sivun_pituus_;
- };
-
- Nelio::Nelio(char tekstuuri, int sivun_pituus) : Kuvio(tekstuuri), sivun_pituus_(sivun_pituus)
- {
- }
-
- void Nelio::Piirra()
- {
- int i, j;
- for (i=0; i < sivun_pituus_; i++)
- {
- for (j=0; j < sivun_pituus_; j++)
- {
- if (j == sivun_pituus_ - 1)
- {
- cout << PalautaTekstuuri() << endl;
- }
- else
- {
- cout << PalautaTekstuuri();
- }
- }
- }
- }
- //** ---------- ---------- ---------- **//
-
- class Nelikulmio: public Kuvio
- {
- public:
- Nelikulmio(char tekstuuri, int korkeus, int leveys);
- void Piirra();
-
- private:
- int korkeus_;
- int leveys_;
- };
-
-
- Nelikulmio::Nelikulmio(char tekstuuri, int korkeus, int leveys)
- : Kuvio(tekstuuri), korkeus_(korkeus), leveys_(leveys)
- {
- }
-
-
- // TODO Remove duplicate functionality
- void Nelikulmio::Piirra()
- {
- int i, j;
- for (i=0; i < korkeus_; i++)
- {
- for (j=0; j < leveys_; j++)
- {
- if (j == leveys_ - 1)
- {
- cout << PalautaTekstuuri() << endl;
- }
- else
- {
- cout << PalautaTekstuuri();
- }
- }
- }
- }
-
- //** Pre-defined code in the assignment **//
- int main()
- {
- int sivun_leveys, sivun_korkeus, i, valinta;
- char tekstuuri;
- Kuvio* kuviot[3];
-
- for(i=0; i<3; i++)
- {
- cout << "Muodostetaanko neliö (syötä 1) vai nelikulmio (syötä muu luku): ";
- cin >> valinta;
-
- if (valinta == 1)
- {
- cout << "Anna muodostettavan neliön sivun pituus: ";
- cin >> sivun_leveys;
- cout << "Syötä merkki, jota käytetään neliön tekstuurina: ";
- cin >> tekstuuri;
- kuviot[i] = new Nelio(tekstuuri, sivun_leveys);
- }
- else
- {
- cout << "Anna muodostettavan nelikulmion sivun korkeus: ";
- cin >> sivun_korkeus;
- cout << "Anna muodostettavan nelikulmion sivun leveys: ";
- cin >> sivun_leveys;
- cout << "Syötä merkki, jota käytetään nelikulmion tekstuurina: ";
- cin >> tekstuuri;
- kuviot[i] = new Nelikulmio(tekstuuri, sivun_korkeus, sivun_leveys);
- }
- }
-
- cout << endl << "Muodostetut kuviot piirrettynä:" << endl << endl;
-
- for (i=0; i<3; i++)
- {
- kuviot[i]->Piirra();
- cout << endl;
- }
- return 0;
- }
- //** ---------- ---------- ---------- **//
- ```
|