Ohjelmointi 2 2006/ 3.5

Demo C2


Huom! Demon aika siirretty ke 3.5 klo 12:15-14:00. Paikka selviää Korpista.
1.
Suunnittele luokka cLinjaAuto, jossa on paikkojen lukumäärä ja vapaiden paikkojen lukumäärä. Tee metodit tulosta sekä lisaa ja vahenna muuttamaan matkustajien lukumäärää. Alla testipääohjelma:
...
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;
}
2.
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.
3.
Muuta n:\kurssit\cpp\moniste\demo\c-ohj\valuutts.cpp:n luokka cValuutat sellaiseksi, että perinnän tilalla käytetään koostamista. Mihinkään muualle ei saa tehdä muutoksia kuin tähän luokkaan (tavitsee uudemman kääntäjän, esim gcc 2.8.1 tai C++Builder 5.0, periatteessa voi tehdä hyvinkin ihan paperitehtävänä, jos omistaa vain vanhan kääntäjän).
4*.
Kirjoita taul_d.cpp (ks. moniste 16.5) taulukolle metodi sijoita, jolla voidaan sijoittaa taulukkoon toinen taulukko:
...
int main(void)
{
  cTaulukko luvut(7);
  luvut.lisaa(0); luvut.lisaa(2);
  cout << luvut << endl;
  cTaulukko taul;
  taul.sijoita(luvut);   // tai jopa  taul = luvut;
  cout << taul << endl;  // tulostaa saman kuin edellä
  return 0;
}
5*.
Kirjoita edellisen tehtävän luokkaan sijoitusoperaattori ja CopyConstruktori.

6-7.
Kirjoita ohjelma, joka kyselee nimiä kunnes annetaan tyhjä rivi ja tulostaa tämän jälkeen nimet aakkosjärjestyksessä. Nimet syötetään muodossa "Aku Ankka", mutta siitä huolimatta ne lajitellaan siten, että "Iines Ankka" < "Hannu Hanhi", eli sukunimen mukaan. Käytä ratkaisussa jotakin STL:n tietorakennetta sekä algoritmia ja ota pohjaksi esim: AakkostaHenkilot.java.
// Merkkijonon lukeminen päätteltä:
 string s;
 cout << "Anna jono";
 getline(cin,s);

8.
Muuta pasianssiaohjelma
(n:\kurssit\ohj2\moniste\demo\cpp\pasi.cpp) kunnolliseksi olio-ohjelmaksi, eli tietueet luokiksi ja aliohjelmat metodeiksi.
9.
Muuta pasianssiaohjelmaa siten, että ohjelma piirtää lopuksi histogrammin siitä, millä todennäköisyydellä peli päättyy i:teen korttiin (siis esimerkiksi seuraavasti):
1 ************************
2 *****************
3 *********
4 ****
5 **
6 *
7 *
...

Malliohjelmassa luokka näytti seuraavalta:
/*************************************************************************/
class cHisto {
  int lkm;
  long *esiintymat;
public:
  cHisto(int n);
  ~cHisto();
  int lisaa(int i);
  long etsi_max() const;
  int piirra() const;
};

10*.
Lisää cHisto-luokkaan private sijoitusoperaattori ja CopyConstruktori. (Tämän voi tehdä vaikka ei tekisi 8-9 tehtäviä, kun tekee "dummy"-metodit noista muista).