Ohjelmointi++ 2002/ 25.2

Demo 6


Tehtävät


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.