Ohjelmointi++ 2002/ 28.2

Pääteohjaus 3 ja puoli


Seuraavien tehtävien rungot löytyvät hakemistosta n:\kurssit\cpp\paate. Kopioi ne sieltä omaan hakemistoosi ja tee seuraavat tehtävät, eli ohjelmissa täydennä ... kohdat.

Pääohjelmilla tulisi jotenkin testata aliohjelmien toiminta.

1.
Huone ja asunto:
// huone.cpp
// Käsitellään huoneen tietoja /vl-96
/* Tehtävät:
    0. Käännä ja aja ensin sellaisenaan
    1. Laita huoneen metodit ala, tilavuus ja Kaappeja toimiviksi
       (Kaappeja palauttaa huoneen kaappien lukumäärän).
    2. Täydennä huoneen tulosta-metodi siten, että
       huoneen tiedot tulostuvat seuraavasti:
         olohuone    12 m2 24 m3  1 kaappia
    3. Laita kaikki asinamukaiset metodit const-metodeiksi
    4. Laita huoneen metodi lisaa_kaappeja toimivaksi
    5. Mitä ohjelma tulostaa nyt?
    6. Laita kaikki asianmukaiset metodit const-metodeiksi
    7. Kokeile vielä

*****************************************************************************/ #include <iostream.h> #include <iomanip.h> #include <string>

void tulosta_rivi(const string &teksti,double ala, double tilavuus, int kaappeja) // tulosta_rivi("olohuone",12,24,1) tulostaa rivin muodossa: // olohuone 12 m2 24 m3 1 kaappia { long oldf = cout.setf(ios::left); cout << setw(10) << teksti << " "; cout.flags(oldf); cout << setw(2) << ala << " m2 " << setw(2) << tilavuus << " m3 " << kaappeja << " kaappia" << endl; }

class cHuone { string nimi; double pit,lev,kork; int kaappeja; public: cHuone(const char *n="Huone", double p=2, double l=2, double k=2, int kaap=0) { nimi=n; pit=p; lev=l; kork=k; kaappeja=kaap; } double ala() { return 0; } double tilavuus() { return 0; } int Kaappeja() { return 0; } void lisaa_kaappeja(void) { cout << "Kaappi lisää" << endl; } void tulosta() { cout << "Huone" << endl; } };

int main(void) { cHuone olohuone("olohuone",3,4); olohuone.tulosta(); olohuone.lisaa_kaappeja(); olohuone.tulosta(); return 0; }



// asunto.cpp
// Käsitellään asunnon tietoja /vl-96
/* Tehtävät:
    0. Käännä ja aja ensin sellaisenaan

1. Kopioi-liimaa tiedostosta huone.cpp luokka cHuone asunto-luokan yläpuolella Kopioi-liimaa myös aliohjelma tulosta_rivi cHuoneen yläpuolelle 2. Lisää asunto-luokkaan kaksi huonetta: olohuone ja makuuhuone 3. Lisää asuntoon metodit ala, tilavuus ja Kaappeja, jotka palauttavat asunnon vast.. yhteistiedot 4. Täydennä asunnon tulosta-metodi siten, että asunnon tiedot tulostuvat seuraavasti: Asunto: Huone 4 m2 8 m3 0 kaappia Huone 4 m2 8 m3 0 kaappia Yhteensä: 8 m2 16 m3 0 kaappia

Kokeile! 5. Lisää asuntoon rakentaja-metodi cAsunto(const cHuone &h1,const cHuone &h2): olohuone(h1),makuuhuone(h2) {;} ja muuta kaksion alustus muotoon: cAsunto kaksio(cHuone("olohuone",3,4),cHuone("makuuhuone",3,3)); 6. Mitä ohjelma tulostaa nyt? 7. Laita kaikki asianmukaiset metodit const-metodeiksi 8. Tee asunnon lisaa_kaappeja metodista sellainen, että se lisää kaapin aina siihen huoneeseen, jossa on vähiten kaappeja 9. Mitä ohjelma tulostaa nyt? 10. Korjaa huoneen konstruktori "tehokkaammaksi" *11. Muuta asunnon huoneet taulukoksi ja laita huonemäärä vakioksi sekä kokeile 3:lla huoneella. *****************************************************************************/ #include <iostream.h> #include <iomanip.h>

class cAsunto { public: cAsunto() {;} void lisaa_kaappeja() { cout << "Lisätään kaappeja" << endl; } void tulosta() { cout << "\n"; cout << "Asunto:\n"; } };

int main(void) { cAsunto kaksio; kaksio.tulosta(); cout << endl; for (int i=0; i<5; i++) kaksio.lisaa_kaappeja(); kaksio.tulosta(); cout << endl; return 0; }

2.
Demoprosentit
/* DEMO_PRO.C */
#include <stdio.h>

double demo_pros(int tehtavia,int tehtyja) /* Palautetaan montako prosenttia demoista on tehty */ { ... }

int demo_pist(double pros) /* Palautetaan montako demopistettä saa tehdystä demomäärästä ** Pistetaulukko löytyy työkirjan etukannesta */ { ... }

int main(void) { ... }


3.
Muuta tehtävä 2 olio-ohjelmaksi, eli tee luokka cDemo ja muuta aliohjelmat luokan metodeiksi.
4.
Demotehtävät.
5.
Muista poislähtiessäsi pyytää ohjaajalta oikeat vastaukset kirjallisena huone&asunto-tehtävään.