Ohjelmointi++ 2002/ 8.4

Demo 11


1*2.
Kirjoita rahanvaihto-ohjelma, jossa on vakiotaulukko
 val.   kur.
+-----+----------+
|mk   |  1.0     |
|$    |  5.7     |
|EUROA|  5.94573 |
|SKr  |  0.6     |
+-----+----------+ 
ja jonka toiminta näyttäisi seuraavalta:
Määrä ja valuutta>10 Skr[RET]
10.00 Skr on 6.00 mk.
Määrä ja valuutta>2 EUROA[RET]
2 EUROA on 11.89 mk.
Määrä ja valuutta>loppu[RET]
Kiitos!

3.
Muuta edellinen ohjelma sellaiseksi, että valuuttataulukko luetaan tiedostosta.
4.
kerho\talletus.2\jasenet.cpp, metodi cJasenet::lisaa. Miten esikääntäjä käsittelee rivin:
if (jasenia >= max_jasenia ) IF_ERR_RETURN(kasvata_kokoa());
entäpä miten metodin cJasenet::luo rivin
IF_ERR_RETURN(luo_taulukko(max_koko));
5.
Esimerkiksi kerho\runko.1\kerho.cpp metodista cNaytto::lisaa_uusi_jasen voitaisiin piirtää seuraava kutsuhierarkia kun ei merkitä systeemikirjaston kutsuja (<<,rand...):
cNaytto:lisaa_uusi_jasen
  cJasen - parametriton konstruktori
    cJasen::alusta
  ::otsikko
    ::viiva      
  cJasen::rekisteroi
  cJasen::vastaa_aku_ankka
  cJasen::tulosta
  ::kylla_vastaus
    ::odota_nappain
      ::lue_merkki
  ::ilmoitus
    ::odota_jotakin
      ::odota_nappain
        ::lue_merkki
  cKerho::lisaa
    cJasen - copy konstruktori (tehty systeemin puolesta)
Kirjoita vastaava jasennys omalle ohjelmallesi (ht vaihe 6), metodia cNaytto::lisaa_uusi_jasen vastaavalle metodille. Piirrä sitten puumainen (ihan käsin) kuva, jossa kukin aliohjelma on vain kerran ja aina nuoli aliohjelmasta/metodista joka kutsuu, siihen aliohjelmaan/metodiin, jota kutsutaan.
Näin saat kuvan, missä nähdään mikä ohjelman osa kutsuu mitäkin aliohjelmaa/metodia. Tällaisia ohjelman osien riippuvuuksia voidaan kartoittaa myos mekaanisesti, eli on ohjelmia jotka tekevat valmiiksi näita riippuvuuksia. Jos saadaan käsiteltäväksi valmis"iso" ohjelma, jota pitää korjata, voi tällaisten riippuvuussuhteiden etsimen olla järkevää ennen muutostöiden aloittamista. Näin päästaan perille mika muutos vaikuttaa mihinkä ohjelman osiin.
6*.
Kirjoita funktio minimoi, ks. monisteen tehtävä 21.165.
7&8.
Ohjelma joka piirtää sin(x):n kuvaajan seuraavasti (automaattinen skaalaus y-akselille, funktion vaihto helpoksi, ks. integroi ja minimoi):
Piirrän funktion sin(x)
Anna väli ja tiheys jolla piirretään (-5.00  5.00  0.50) >[ret]
                                           *
                                           *
                                       *
                               *
                     *
            *
     *
    *
       *
              *
                       *
                                 *
                                        *
                                           *
                                          *
                                   *
                          *
                *
        *
    *
    *
Pääohjelma malliksi
int main(void)
{
  double x1=-5,x2=5,dx=0.5,y1,y2; string s;
  tFunc f = sin;

printf("Piirrän funktion sin(x)\n"); printf("Anna väli ja tiheys jolla piirretään (%5.2lf %5.2lf %5.2lf) >", x1, x2, dx); getline(cin,s); sscanf(s.c_str(),"%lf %lf %lf",&x1,&x2,&dx);

y1 = fun_min(f,x1,x2,dx); y2 = fun_max(f,x1,x2,dx);

piirra(f,x1,x2,y1,y2,dx);

return 0; }


G1
Toteuta piirto demo9:n guru-tehtävissä mainituilla muunnosmatriiseilla (3d.h ja 3d.cpp) (eli silloin voit merkitä 6-8,G1).
G2-3
Tee piirtämmisestä kunnon graafinen versio.
G4-5
Muuta graafinen versio sellaiseksi, että klikkaamalla kuvaa jossakin kohti, kuvaan piirretään tätä x:n arvoa vastaavaan kohtaan tangetti käyrälle.