-
Katso seuraavissa (tehtävät 1-3) Demo 5:n vastauksia
tehtävään 2 (älä välitä "turhista" metodeista ja
operaattoreista,
n:\kurssit\cpp\moniste\demo\c-ohj\pvm.cpp).
- 1.
- Kirjoita luokkaan cPvm saantimetodit päivälle,
kuukausille ja vuosille.
- 2.
- Kirjoita tavallinen funktio (ei metodi)
vertaa(pv1,pv2), joka palauttaa -1, mikäli päivämäärä
pv1 on ennen päivämäärää pv2, 0 jos päivämäärät ovat
samoja ja 1 muuten (pv1 ja pv2 tyyppiä
cPvm, tarvitseeko cPvm muutoksia
jotta voidaan toteuttaa?).
- 3*.
- Tee edellisestä aliohjelmaa vastaava metodi, eli lisää
päivämäärä-luokkaan cPvm metodi vertaa(pv2), joka palauttaa kuten edellä (-1,0 tai 1) kun
verrataan oliota itseään ja päivämäärää pv2. (Huom!
jos et osannut 1&2. tehtävää, voi tämän tehdä silti).
// Käyttöesimerkki 2&3:een
cPvm pv1(1.2),pv2(3.3);
if ( vertaa(pv1,pv2) < 0 ) cout << pv1 << " < " << pv2 << endl;
if ( pv1.vertaa(pv2) != 0 ) cout << pv1 << " != " << pv2 << endl;
- 4.
- Kirjoita vertailun vuoksi luennolla jaettu
n:\kurssit\cpp\moniste\esim\olioalk\elukat.cpp
käyttämättä perintää, eli siten että pääohjelma näyttää
samalta kuin esimerkissäkin, mutta cElain-luokka
puuttuu. Mitä voittaa? Mitä häviää? Lisää
kummassakin "kirjoittamistavassa" vielä cKotka.
- 5*
- Kirjoita luokka cKulkuneuvo, jossa on ainakin nopeus ja
matkustajien lukumäärä. Peri tästä luokat cLaiva ja
cLentokone joissa kummassakin on jokin oma erikoisominaisuus yleiseen kulkuneuvoon verrattuna. Kirjoita
myös pieni testipääohjelma.
Seuraavia asioita ei ole viela käsitelty luennolla, mutta ne
on käsitelty Johdatus ohjelmointiin-kurssilla ja myös
monisteen luvussa 13.
- 6*.
- Tee aliohjelma pienimman_paikka, joka palauttaa kokonaislukutaulukon pienimmän alkion paikan (indeksin).
Esim. monisteen luvun 13.1.4 taulukosta:
i = pienimman_paikka(k_pituudet,12); /* => i=1 */
-
- Tee edellistä aliohjelmaa käyttäen aliohjelma pienin,
joka palauttaa kokonaislukutaulukon pienimman alkion
arvon
n = pienin(k_pituudet,12); /* => n = 28 */
Tehtävissä 7&8 katso monisteen luku
11 ja 12:
- 7*.
- Piirrä kuva tietorakenteesta, jossa olisi levyjä ja
kullakin levyllä voisi olla useita kappaleita. Jos
omassa harjoitustyössäsi on vastaava tietorakenne, niin
tämä käy myös (kerho-ohjelman perusversiossa ei ole!).
- 8.
- Suunnittele oliot edelliseen "ohjelmaan" CRC-kortteja
käyttäen.
- B1-2
- Muuta
n:\kurssit\cpp\moniste\demo\c-ohj\astia2.cpp).
olio-ohjelmaksi, joka toimisi suurinpiirtein
seuraavasti:
...
int main(void)
{
cAstiaPeli peli;
peli.lisaa_astia("8",8);
peli.lisaa_astia("5",5);
peli.tulosta_ohje();
peli.pelaa(),
return 0;
}
-
- Ainoa muutos jonka saat tehdä cAstia-luokkaa
parametrittömän muodostajan lisääminen. Pelin
"graafinen versio" löytyy osoitteesta:
http://www.mit.jyu.fi/~vesal/kurssit/winohj/moniste/tentit/v00/
- G1.
- Tee edellinen tehtävä MUUTTAMATTA lainkaan alkuperäistä
cAstia-luokkaa (eli samalla tehtävällä tulee silloin
B1-2 ja G1).
- B3-4
- Lisää astiapeliin seuraavanlainen tulostus ennen kuin
käyttäjä valitsee astiat:
Olet ratkaissut tilavuudet: 3 5 8.
Ratkaisematta on 1 2 4 6 7 9 10 11 12 13.
Ja peliin automaattinen lopetus kun kaikki tilavuudet on
ratkaistu.
HUOM! Muistakaa että jokainen ohjelmalistaus alkaa vähintään
kommentilla jossa on 1) Tiedoston nimi, 2) Syy tekoseen 3)
Tekijän nimi ja päivämäärä. Jos tekijöitä on useita, on
KAIKKIEN nimi mainittava.