C-ohjelmointi syksy 2009


Harjoitus 5

Ilmoita moodlessa kurssin alueella harjoitustyöaiheesi 12.10 mennessä. Jos teet työn ryhmässä, niin silloin yksi ryhmän jäsenistä ilmoittaa työn nimen ja ryhmän jäsenten nimet. Ryhmässä voi olla 2-3 opiskelijaa. Kirjautuessasi ensimmäistä kertaa kurssin moodle-alueelle tarvitset sanaa htyo. Kokeeseen saa ottaa yhden A4-arkin kokoisen muistilapun, jonka voi täyttää molemmin puolin.

Tehtävät käsitellään harjoitustilaisuuksissa 6-12.10.2009

  1. Tee harjoitustyöhösi liittyvä moduuli joko yksin tai ryhmäsi kanssa. Esimerkiksi jokin tietorakenne, jota tarvitset työssäsi.

  2. Tee pääohjelma, jonka avulla testaat moduuliasi.

    Palauta tehtävät 1 ja 2 moodleen. Näistä saat yhteensä maksimissaan kaksi pistettä. Näistä tehtävistä saat vertaispalautetta seuraavalla viikolla.

  3. Kirjoita funktio sumave, jolla on vaihteleva määrä parametreja. Ensimmäisenä parametrina annetaan lukumäärä, joka kertoo kuinka monta double arvoa vielä seuraa. Funktio varaa tilan tietueelle, jossa palautetaan parametrina annettujen double arvojen summa ja keskiarvo. Funktio palauttaa osoitteen kysyiseen tietueeseen.

  4. (Kirjan tehtävä 11-12) Binääritiedostoa "fname" käytetään tallentamaan tietoa työntekijöistä. Jokaisesta työntekijästä on talletettuna nimi, identifikaatiotunnus ja palkka:
    struct employee {
      long id;
      char name[50];
      double salary;
    };
    
    Kirjoita seuraavat funktiot:
    1. int add (fname, empId, stringName, salary), missä fname on merkkijono, joka kertoo binääritiedoston nimen, empId on kokonaisluku, stringname on merkkijono ja salary on double. Tämä funktio lisää uuden työntekijän binääritiedostoon (empId on avain ja se identifioi yksikäsitteisesti työntekijän)
    2. void moreDollars (fname, empId, incr), missä fname on merkkijono, joka kertoo binääritiedoston nimen, empId on kokonaisluku ja incr on double. Tämä funktio käyttää binääritiedostoa fname ja lisää parametrin incr ilmoittaman määrän verran kaikkien niiden työntekijöiden palkkaa, joiden identifikaatiotunnus on yhtäsuuri tai suurempi kuin empId.
    3. void show (const char *fname), kirjoittaa näkyviin kaiken binääritiedostoon fname tallennetun tiedon,

  5. (Kirjan tehtävä 12-3) Kirjoita tietotyyppi Elem, johon voi tallentaa joko kokonaisluvun tai merkin (mutta ei molempia). Kirjoita ohjelma joka lukee arvoja standardisyöttövirrasta. Kun ohjelma löytää kokonaislukuja, se tallentaa ne taulukkoon, joka koostuu Elem-tyyppisistä alkioista. Jos lukeminen epäonnistuu, ohjelma lukee yhden merkin ja tallettaa sen taulukkoon. Tämän jälkeen ohjelma jatkaa prosessointia. Lukeminen päättyy kun löytyy tiedoston loppu tai 100 alkiota on luettu. Ohjelmasi tulostaa käänteisessä järjsetyksessä kaikki kokonaisluvut, jotka on talletettu. Jos syöte on
    12 b3 6g
    
    taulukkoon talletetaan
    12
    b
    3
    6
    g
    
    ja tulostetaan
    6 3 12
    

  6. Kirjoita funktio min, jolla on kolme parametria, kaksi double arvoa x ja y ja funktioparametrina double funktio f(double). Funktio min palauttaa pienemmän arvoista f(x) ja f(y). Kirjoita myös funktio min1, joka muuten samanlainen kuin funktio min, mutta se palauttaa pienimmän arvon neljännessä parametrissa. Testaa funktiot.

.

Ohjausaikoina opittavia asioita:
  1. Esimerkki SDL-kirjaston käytöstä
  2. Merkkien luokittelufunktiot ja merkkijono-operaatiot
  3. Taulukko esimerkki (Esim. 10.2 maxMin)