C-ohjelmointi syksy 2010


Harjoitus 6

Kokeeseen saa ottaa yhden A4-arkin kokoisen muistilapun, jonka voi täyttää molemmin puolin. Muistilappu voi olla käsinkirjoitettu tai tulostettu. Palauta muistilappusi koevastaustesi kanssa.

Palauta harjoitustyöhösi liittyvä moduuli 8.10 mennessä. Kurssin sivulle on ohjeet vertaispalautteesta. Vertaispalaute annetaan 15.10 mennessä.

Harjoitustyö suositellaan palautettavaksi ma 1.11.2010 mennessä ja se on palautettava viimeistään ma 8.11.2010.

Tehtävät käsitellään harjoitustilaisuuksissa 13-15.10.2010

  1. (Kirjan tehtävä 9-1) Toteuta kokonaisluvun palauttava funktio charInString (),   jolla on kolme parametria: merkkijono s merkkijonokohta kokonaislukuna pos, and kokonaislukuarvo value. Funktio palauttaa arvon 1, jos pos on kelvollinen merkkijonon s kohta muuten funktio palauttaa arvon 0. Jos merkkijonon kohta oli kelvollinen, charInString () palauttaa merkkijonon s kohdan pos parametrin value avulla.

  2. (Kirjan tehtävä 9-5) Kirjoita funktio void fill (char *p, int n, char pat),  joka alustaa muistia seuraavasti:  se  täyttää osoitteesta p alkaen  n muistitavua  merkin pat arvolla.

  3. (Kirjan tehtävä 11-6) Kirjoita funktio input, jolla on kaksi parametria: fname, joka kertoo tekstitiedoston nimen ja storage, joka on taulukko osoittimia mekkijoinoihin:
    #define MAX 100
    char* storage[MAX];
    
    input() lukee tiedoston fname ja tallettaa rivit tästä tiedostosta taulukkoon. Älä tee mitään oletuksia rivien pituudesta. Käytä funktiota getline() kirjan esimerkistä 10.3. Funktion input() pitää poistaa taulukosta kaikki rivit, jotka ovat tyhjiä (sisältävät vain rivinvaihtomerkin ja mahdollisesti välilyöntejä ennen sitä) ja kertoa kuinka monta riviä on poistettu. Tee myös main funktio, joka kutsuu funktiota input() ja tulostaa taulukon sisällön standardi syöttövirtaan.

  4. (Kirjan tehtävä 8-10) Kirjoita funktio
    void PrintGen(const void *block, size_t elemSize, size_t blockSize,
                  void (*printIt) (const void*));
    
    joka tulostaa kaikki lohkon alkiot käyttäen "callback" funktiota printIt. Testaa ohjelmasi käyttäen lohkoa, jossa on double arvoja ja lohkoa, jossa on viitteitä double arvoihin.

  5. (Kirjan tehtävä 9-14)Laadi ohjelma, joka saa omentoriviparametrina roomalaisen numeron (esim. MXLIV) ja tulostaa tämän numeron arabialaisina numeroina. Käsittele vain 1000 pienempiä arvoja.

.