Olio-ohjelmointi 2-välikoe 9.12.2009 Mallivastaukset (Copyright Antti Vänskä)
1. Tee vector-luokkaa käyttävä ohjelma, joka kysyy käyttäjältä lukuja, kunnes syötetään 0.
Ohjelma tulostaa luvut suuruusjärjestyksessä pienimmästä suurimpaan.
#include <iostream>
#include <vector>
using namespace std;
int main() {
vector <float> luvut;
vector <float>::iterator it;
float luku, i=1;
do {
cout << "Luku " << i << ": ";
cin >> luku;
if (luku!=0)
luvut.push_back(luku);
i++;
} while(luku!=0);
sort(luvut.begin(),luvut.end());
cout << endl << "Luvut j\x84rjestyksess\x84:" << endl;
for (it=luvut.begin();it!=luvut.end();it++) cout << *it << endl;
return 0;
}
2 Tee luokka kolmio, joka sisältää tietojäseninä mielivaltaisen kolmion sivun pituudet (a, b ja c). Luokan on pystyttävä tarjoamaan seuraavat palvelut:
• Sivunpituuksien alustus haluttuihin alkuarvoihin
• Sivunpituuksien muuttaminen ohjelman aikana
• Sivunpituuksien tulostus ylikuormatulla tulostusoperaattorilla
• Kolmion pinta-alan laskenta
• Periytymistä ei tarvitse käyttää
• Mielivaltaisen kolmion pinta-ala lasketaan ns. Heronin kaavalla.
#include <iostream>
#include <math.h>
using namespace std;
class kolmio {
private:
double a;
double b;
double c;
public:
kolmio(double x, double y, double z) {
a=x;
b=y;
c=z;
}
void set_pituudet() {
cout << endl << "Sivu a:n uusi pituus: ";
cin >> a;
cout << "Sivu b:n uusi pituus: ";
cin >> b;
cout << "Sivu c:n uusi pituus: ";
cin >> c;
}
double laske_ala() {
double ala;
ala=(sqrt((a+b+c)*(a+b-c)*(b+c-a)*(c+a-b)))/4;
return ala;
}
friend ostream& operator << (ostream &, const kolmio &);
};
ostream& operator << (ostream &os, const kolmio &k) {
os << "a = " << k.a << endl;
os << "b = " << k.b << endl;
os << "c = " << k.c << endl;
return os;
}
int main() {
kolmio kuvio(-6,6,67);
cout << endl << "Alustetut arvot:" << endl;
cout << kuvio;
kuvio.set_pituudet();
cout << endl << "Muutetut arvot:" << endl;
cout << kuvio;
cout << endl << "Kolmion pinta-ala: " <<
kuvio.laske_ala() << endl;
return 0;
}
3) Johda kolmioluokasta aliluokat tasakylkinen_kolmio ja tasasivuinen_kolmio. Tee luokkiin tarvittavat muodostimet sekä metodit, joiden avulla voit laskea kolmioiden pinta-alat.
Testaa luokkien toiminta pääohjelman avulla.
#include <iostream>
#include <math.h>
using namespace std;
class kolmio {
protected:
double a;
double b;
double c;
public:
kolmio() {}
void set_pituudet() {
cout << endl << "Sivu a:n uusi pituus: ";
cin >> a;
cout << "Sivu b:n uusi pituus: ";
cin >> b;
cout << "Sivu c:n uusi pituus: ";
cin >> c;
}
double laske_ala() {
double ala;
ala=(sqrt((a+b+c)*(a+b-c)*(b+c-a)*(c+a-b)))/4;
return ala;
}
friend ostream& operator << (ostream &, const kolmio
&);
};
ostream& operator << (ostream &os, const kolmio &k) {
os << "a = " << k.a << endl;
os << "b = " << k.b << endl;
os << "c = " << k.c << endl;
return os;
}
class tasakylkinen_kolmio : public kolmio {
public:
tasakylkinen_kolmio(double x, double y) {
a=b=x;
c=y;
}
double laske_ala() {
double ala;
ala=(sqrt((a+b+c)*(a+b-c)*(b+c-a)*(c+a-b)))/4;
return ala;
} };
class tasasivuinen_kolmio : public kolmio {
public:
tasasivuinen_kolmio(double x) {
a=b=c=x;
}
double laske_ala() {
double ala;
ala=(sqrt((a+b+c)*(a+b-c)*(b+c-a)*(c+a-b)))/4;
return ala;
} };
int main() {
tasakylkinen_kolmio kuvio1(5,3);
tasasivuinen_kolmio kuvio2(7);
cout << endl << "Tasakylkisen kolmion pituudet:" << endl;
cout << kuvio1;
cout << "Pinta-ala: " << kuvio1.laske_ala() << endl;
cout << endl << "Tasasivuisen kolmion pituudet:" << endl;
cout << kuvio2;
cout << "Pinta-ala: " << kuvio2.laske_ala() << endl;
return 0;
}