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.
 

4.3 KiB

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