C-ohjelmointi syksy 2009


Harjoitus 6

Kokeeseen saa ottaa yhden A4-arkin kokoisen muistilapun, jonka voi täyttää molemmin puolin.

Palauta harjoitustyöhösi liittyvä moduuli 12.10 mennessä. Kurssin sivulle tulee ohjeet vertaispalautteesta ja siitä kenelle kukin palautetta antaa 14.10 mennessä. Vertaispalaute annetaan 21.10 mennessä.

Harjoitustyö palautetaan viimeistään 9.11 mennessä.

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

  1. 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.

  2. (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.

  3. (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.

  4. Laadi ohjelma, jolle komentoriviparametreina voidaan  antaa joko pelkkä  tiedoston nimi (program file1) tai tiedoston nimi   ja  tulostettavien rivien lukumäärä (program file1 –d).  Jos  komentorivillä on vain tiedoston nimi, niin  tiedostosta tulostetaan  20 ensimmäistä riviä näytölle, muuten tulostetaan d ensimmäistä riviä. Esimerkiksi program aputied -10 tulostaa tiedoston aputied 10 ensimmäistä riviä. Jos tiedostossa on vähemmän rivejä, niin  tulostetaan niin monta  riviä kuin on mahdollista. Varaudu myös erilaisiin virhetilanteisiiin.

.