• Ei tuloksia

Olio-ohjelmointi 2. välikoe 27.4.2007 HYV5SN

N/A
N/A
Info
Lataa
Protected

Academic year: 2022

Jaa "Olio-ohjelmointi 2. välikoe 27.4.2007 HYV5SN"

Copied!
6
0
0

Kokoteksti

(1)

Olio-ohjelmointi 2. välikoe 27.4.2007

HYV5SN

1. Tee ohjelma, joka sisältää laatikko-luokan. Luokan tietojäseninä ovat laatikon syvyys, leveys ja korkeus. Toteuta luokkaan muodostin, jonka avulla olio voidaan alustaa.

Toteuta myös metodi, joka tulostaa laatikon tilavuuden.

#include <iostream>

using namespace std;

class laatikko {

private:

double syvyys,leveys,korkeus;

public:

laatikko(double s,double l,double k) {

syvyys=s;

leveys=l;

korkeus=k;

}

double tilavuus() {

return syvyys*leveys*korkeus;

} };

int main() {

laatikko olio(2,3,4);

cout << olio.tilavuus();

system("PAUSE");

}

2. Tee ohjelma, joka kysyy käyttäjältä 5 lukua STL:n vektoriin ja tulostaa ne käyttäen iteraattoria.

//Kertaustehtävä 1

#include <iostream>

#include <vector>

using namespace std;

int main() {

(2)

vector <int> luvut;

vector <int>::iterator it;

int i,luku;

for (i=0;i<5;i++) {

cout << "Luku ?" << endl;

cin >> luku;

luvut.push_back(luku);

}

for (it=luvut.begin();it!=luvut.end();it++) cout << *it << endl;

system("PAUSE");

}

3. Luo yleinen luokka: Rakennus, joka ylläpitää tietoa rakennuksen kerrosten ja huoneiden lukumäärästä sekä kokonaispinta-alasta.

a. Luo johdettu luokka: Talo, joka perii rakennuksen ja ylläpitää tietoja makuuhuoneiden ja kylpyhuoneiden lukumääristä.

b. Luo johdettu luokka: Toimisto, joka perii rakennuksen ja ylläpitää tietoja varauloskäytävien ja puhelimien lukumääristä.

Tee pääohjelma, jossa kokeilet luokkiesi toimivuutta.

#include <iostream>

using namespace std;

class Rakennus {

private:

int kerrosten_lkm;

int huoneiden_lkm;

double pinta_ala;

public:

Rakennus(int k,int h,double a) {

kerrosten_lkm=k;

huoneiden_lkm=h;

pinta_ala=a;

}

Rakennus() {

kerrosten_lkm=0;

huoneiden_lkm=0;

pinta_ala=0;

}

void tulosta() {

cout << "Kerrosten lukumäärä " << kerrosten_lkm

<< endl;

cout << "Huoneiden lukumäärä " << huoneiden_lkm

<< endl;

(3)

cout << "Pinta-ala " << pinta_ala << endl;

} };

class Talo : public Rakennus {

private:

int makuuhuoneiden_lkm;

int kylpyhuoneiden_lkm;

public:

Talo(int m,int k) {

makuuhuoneiden_lkm=m;

kylpyhuoneiden_lkm=k;

}

void tulosta() {

cout << "Makuuhuoneiden lukumäärä " <<

makuuhuoneiden_lkm << endl;

cout << "Kylpyhuoneiden lukumäärä " <<

kylpyhuoneiden_lkm << endl;

} };

class Toimisto : public Rakennus {

private:

int varauloskaytavien_lkm;

int puhelimien_lkm;

public:

Toimisto(int v,int p) {

varauloskaytavien_lkm=v;

puhelimien_lkm=p;

}

void tulosta() {

cout << "Varauloskäytävien lukumäärä " <<

varauloskaytavien_lkm << endl;

cout << "Puhelimien lukumäärä " <<

puhelimien_lkm << endl;

} };

int main() {

Rakennus rakennus_olio(3,18,6000);

Talo talo_olio(3,2);

Toimisto toimisto_olio(1,20);

rakennus_olio.tulosta();

talo_olio.tulosta();

toimisto_olio.tulosta();

system("PAUSE");

return 0;

}

(4)

4. Tarkastellaan oheista kompleksilukuja käsittelevää luokkaa nimeltään complex.

a) Lisää luokkaan ylikuormatut operaattorit – ja *, jotka laskevat kahden kompleksiluvun erotuksen ja tulon. (1p / operaattori)

b) Lisää luokkaan ylikuormatut vertailuoperaattorit > ja <, joiden avulla vertaillaan kahden kompleksiluvun itseisarvojen suuruutta. (1p / operaattori)

c) Tee pääohjelma, jonka avulla voit testata kirjottamiesi operaattorien toimintaa (2p).

Alla olevaa ohjelmakoodia ei tarvitse kopioida vastauspaperiin, mutta vastauksestasi on käytävä ilmi, mihin kohtaan koodia lisäämäsi ohjelmarivit tulevat.

Kompleksiluvun z=a+jb itseisarvo lasketaan kaavalla

2

2

b

a

z = +

Neliöjuuri löytyy C++-standardikirjastosta <cmath> ja sen prototyyppi on double sqrt(double);

complex complex::operator + (const complex &z) {

complex foo;

foo.real=this->real+z.real;

foo.imag=this->imag+z.imag;

return foo;

}

complex complex::operator * (const complex &z) {

complex foo;

double itseisarvo,kulma;

itseisarvo=this->abs()*z.abs();

kulma=this->angle()+z.angle();

foo.real=itseisarvo*cos(kulma);

foo.imag=itseisarvo*sin(kulma);

return foo;

}

bool complex::operator > (const complex &z) {

if (this->abs() > z.abs()) return true;

else

return false;

}

(5)

bool complex::operator < (const complex &z) {

if (this->abs() < z.abs()) return true;

else

return false;

}

int main() {

complex z1(-1.),z2(3.3,2.2);

complex z3(0),z4(1,1);

cout << (z1 > z2) << endl;

cout << (z2 < z3) << endl;

z1=z2+z3;

z2=z1*z4;

cout << z1 << z2 << z3 << z4 << endl;

cout << "Anna z1 ja z2" << endl;

cin >> z1 >> z2;

cout << z1*z2 << endl;

return 0;

}

#include <iostream>

using namespace std;

class complex {

private:

double re,im;

public:

complex operator+(complex &);

bool operator==(complex &);

friend ostream &operator<<(ostream &,const complex &);

complex();

complex(const double &,const double &);

};

complex::complex() {

re=0;

im=0;

}

ostream &operator << (ostream &os, const complex &p) {

os << p.re << "+j" << p.im << endl;

(6)

return os;

}

bool complex::operator == (complex &p) {

if ((this->re == p.re) && (this->im == p.im)) return 1;

else

return 0;

}

complex::complex(const double &r,const double &i) {

re=r;

im=i;

}

complex complex::operator +(complex &x) {

complex tulos;

tulos.re=this->re+x.re;

tulos.im=this->im+x.im;

return tulos;

}

Viittaukset

LIITTYVÄT TIEDOSTOT

jolle syötetään kaksi kokonaislukua, ja joka palauttaa toden, jos luvut ovat samat, ja epätoden, jos ne eivät ole samoja.. Tee myös pääohjelma, jonka avulla voit testata

Arvoa kasvatetaan funktiossa f lauseella ::i++; Ensimmäisen kutsun jälkeen arvo on siis 1 ja toisen kutsun jälkeen 2.. Muuttuja 2 on pääohjelmassa määritelty

Tee aliohjelmamallia (function template) käyttävä funktio, joka palauttaa return-lauseella kutsuvaan ohjelmaan kahdesta annetusta parametrista suuremman.. Testaa funktion

Kirjoita STL:n vector-luokkaa käyttävä ohjelma, joka kysyy käyttäjältä

Arvoa kasvatetaan funktiossa f lauseella ::i++; Ensimmäisen kutsun jälkeen arvo on siis 1 ja toisen kutsun jälkeen 2.. Muuttuja 2 on pääohjelmassa määritelty

Tee luokkiin tarvittavat muodostimet sekä metodit, joiden avulla voit laskea

Toteuta ohjelma siten, että se toimii silmukassa eli tilavuuksia lasketaan niin kauan kuin säde ja korkeus molemmat ovat positiivisia ja laskenta loppuu kun jompikumpi tai

Toteuta ohjelma siten, että se toimii silmukassa eli tilavuuksia lasketaan niin kauan kuin säde ja korkeus molemmat ovat positiivisia ja laskenta loppuu kun jompikumpi tai