-
- 1*.
- Muuta edellisen demon tehtävän
7&8 vastaus olio-ohjelmaksi.
- 2*.
- Ks. luentomoniste Tehtävä 9.78 Päivämäärätyyppi, mutta toteuta luokkana.
- 3-4.
- Suunittele ja toteuta cVali-tyyppi, joka tallettaa
suljetun reaalilukuvälin. Kirjoita metodit lue ja
Osuuko(vali). lue kelpuuttaa seuraavat syötöt:
Anna väli (0-5) >[ret] => 0-5
Anna väli (0-5) >3[ret} => 3-3
Anna väli (0-5) >3-[ret] => 3-5
Anna väli (0-5) >-3[ret] => 0-3
Anna väli (0-5) >1-3[ret] => 1-3
-
- Testiohjelma kysyy kaksi väliä ja sitten Osuuko
paluttaa tiedon siitä osuuko toinen väli itse olioon.
Testiohjelma voisi olla esimerkiksi:
int main(void)
{
cVali v1,v2; int osuma;
v1.lue(); v2.lue();
v1.tulosta(); v2.tulosta();
osuma = v1.Osuuko(v2);
if ( osuma == 0 )
cout << "v1 osuu v2:een!" << endl;
else if ( osuma == -1 )
cout << "v1 välin arvot pienempiä kuin v2:en!" << endl;
else if ( osuma == 1 )
cout << "v1 välin arvot suurempia kuin v2:en!" << endl;
return 0;
}
-
- (vihje: Piirrä kuva, miten kaksi väliä käyttäytyy
toisiinsa nähden).
- 5.
- Suunnittele luokka cLinjaAuto, jossa on paikkojen lukumäärä ja vapaiden paikkojen lukumäärä. Tee metodit tulosta sekä lisaa ja vahenna muuttamaan matkustajien lukumäärää. Kirjoita testipääohjelma.
- 6.*
- Modifioi edellistä ratkaisua siten, että luokaa cLinjaAuto voi käyttää seuraavassa testiohjelmassa:
...
int main(void)
{
cLinjaAuto pikkubussi(10),isobussi(45);
pikkubussi.lisaa(4); pikkubussi.tulosta();
isobussi.lisaa(30); isobussi.tulosta();
int yli = pikkubussi.lisaa(15);
isobussi.lisaa(yli);
pikkubussi.tulosta(); isobussi.tulosta();
if ( isobussi.tilaa() )
cout << "Isoon bussiin mahtuu!" << endl;
return 0;
}
- 7.
- Kirjoita luokka cTietokone, jossa on tietokoneelle tarpeellisia attribuutteja (muistin määrä, kovalevyn koko
jne..). Kirjoita myös testipääohjelma.
- 8.
- Lue itsenäisesti monisteesta luku
10.4. Mitä tapahtuu seuraavassa ohjelmanpätkässä
(tutki pöytätestillä):
/* 01 */ int a=23,b=13,c=17;
/* 02 */ char m = 'b';
/* 03 */ if ( a = b ) c+=0x0f;
/* 04 */ if ( a & ~b ) c--;
/* 05 */ m ^= 1 << 5;
/* 06 */ if ( m == 'B' ) b &= c;
/* 07 */ printf("a=%d b=%d c=%d m=%c\n",a,b,c,m);
- B1-2
- Muuta Demo 3:n guru-tehtävän vastaus sellaiseksi, että siinä on luokka cOppilas ja
attribuutteina luokassa on aliohjelman KasitteRivi tarvittavat lokaalit muuttujat. Varsinaisen muunnostyön
hoitaa metodi setAsHTMLString ja tulos saadaan metodilla getAsListString. Muut metodit ja konstruktorit yms.
saat määritellä itse.
- B3.
- Täydennä luennolla annettu
n:\kurssit\cpp\moniste\esim\olioalk\astia.cpp
niin että se toimii alkukommenteissa olevien
määritysten mukaan. Vastaavan Windows-ohjelman löydät
n:\kurssit\winohj\moniste\tentit\v00.
- G1.
- Muuta tehtävää 3-4 siten, että Osuuko palauttaa välien
leikkauksen. Määrittele lisäksi mikä on tyhjä väli
(tyhjä joukko) ja tee vielä muunnosoperaattori jolla
cVali muuttuu int-tyypiseksi (ks.
moniste Olio-ohjelmointi
ja C++, 2.9.1 Operaattori-funktiot) siten, että
tyhjästä välistä tulee 0 ja muista 1. Tällöin voidaan
edelleen kysyä
if ( vali1.Osuuko(vali2) ) ...