C-ohjelmointi kevät 2006

 

Harjoitus 6
Tehtävät käsitellään keskiviikon 29.3.2006 harjoitustilaisuuksissa 12-14 salissa C221 ja 14-16 salissa B119.
Vain tietokoneella koetellut ratkaisut kelpaavat!  Kun pyydetään tekemään funktio, niin laadi myös pääohjelma, jolla  testaat funktion toimintaa.

  1. Kirjoita funktio, joka järjestää parametrina annetun kokonaislukutaulukon alkiot nousevaan järjestykseen.

  2. Kirjoita funktio reversed_copy(), joka saa parametrina taulukon ja palauttaa parametrina taulukon, jossa taulukon alkiot ovat käännetyssä järjestyksessä: alkuperäisen taulukon ensimmäinen alkio on nyt viimeisenä ja viimeinen ensimmäisenä. Funktio ei siis muuta alkuperäistä taulukkoa, vaan tekee siitä kopion, jonka palauttaa parametrina.

  3. Kirjoita ohjelma, joka lukee opiskelijan suoritukset komentoriviparametrina annetusta tiedostosta taulukkoon. Kullakin rivillä on kurssin nimi, sen opintopistemäärä, arvosana ja päivämäärä. Ohjelma tulostaa tiedot ja laskee opintosuoritusten painotetun arvosanan. Arvosanat ovat 1-5 ja kurssin nimessä voi olla välilyöntejä. Opintosuoritusten haluttu tulostusjärjestys annetaan komentoriviparametrina: ilmoitetaan kenttä, jonka perusteella opintosuoritukset järjestetään ja etumerkillä ilmoitetaan, halutaanko suoritukset kentän perusteella nousevassa (+) tai laskevassa järjestyksessä (-). Esimerkiksi annetaan komentorivillä ohjelma opinnot +3 , jos halutaan tulostaa tiedostossa opinnot olevat opintosuoritukset kentän kolme eli arvosanan mukaan nousevassa järjestyksessä.
    Jaa ohjelmasi sopivasti funktioihin.

  4. Kirjoita funktio, joka lukee parametrina annetusta tiedostosta 'mielivaltaisen' pituisen rivin ja palauttaa osoittimen puskuriin, johon rivi on talletettu. Jos talletus ei onnistu, niin funktio palauttaa arvon -1. Käytä funktiota realloc() tarvittaessa lisätilan varaamiseen, mutta käytä sitä järkevästi.