C-ohjelmointi
Syksy 2006
Arvosteluperusteet ja malliratkaisut kurssikokeen 20.10.2006 tehtäviin
Tehtävä 1
Tehtävänannon 'kirjoittaa' voitiin tulkita ja olikin tulkittu kahdella eri tavalla:
- tulostaa
- kirjoittaa merkkijono toisin päin samalle muistialueelle
(tai molemmat)
Koska versio (1) on helpompi ja lyhyempi, tasapuolisuuden vuoksi tulkinnassa (2) ei sakotettu sellaisista virheistä, joita tulkinnassa (1) ei voi edes esiintyä. Erityisesti:
- virheistä tilapäisen taulukon allokoinnissa
- logiikkapuutteista taulukoiden alkioiden vaihtamisessa tai taulukoiden läpikäynnissä
Tehtävä jaettiin kolmeen 4 pisteen osaan seuraavasti:
- 4p taulukon oikeasta läpikäynnistä:
alustus, toistoehto, silmukan lisäys sekä silmukkamuuttujan oikea käyttö taulukossa (n. 1p per kohta) - 4p oikein tehdystä osoittimen käsittelystä ja sen arvon hakemisesta tai taulukon indeksoinnista (molemmat tavat yhtä hyviä)
- 4p I/O:sta, funktion oikeasta rajapinnasta sekä merkkijonon pituuden laskemisesta oikein (strlenin käyttö tai oma silmukka)
Tehtävä 2
malliratkaisu, ja versio joka ei muokkaa alkuperäisiä listoja.
Tehtävä oli jaettu osiin seuraavasti:
Tietue- ja funktiomäärittelyt 3p.
Tietueen ja tietue-osoittimien käyttö 3p: Osoittimen käyttö, tietueen kentän valinta ja käyttö, sekä funktioparametrien käyttö ja paluuarvon palautus.
Toimintalogiikka 6p: 2p listojen läpikäynti, 3p listan linkkien muuttaminen ja ylläpito, 1p siitä huolehtiminen, että pidemmän listan loppupää tulee mukaan lomitettuun listaan
Tehtävänannon kysymys "Miten funktiota tulisi muuttaa, jos alkuperäisiä listoja ei saisi muuttaa?" oli monintulkintainen. (Sanallinen selitys vai koodia?) Sen takia sanallinen selitys muistin varaamisesta uudelle solmulle riitti, ja tämän kohdan osuus tehtävän pisteistä oli 2/14. Samoin, jos oma ratkaisu ei alunperinkään muuttanut annettuja listoja, ja tämän mainitsi, niin vastaus oli riittävä tältä osin.
Tehtävä 3
Pisteytys:
2p koodin yleinen oikeellisuus, ohjelman oikea syntaktinen rakenne, otsaketiedostojen mukaan otto (stdio ja stdlib).
4p main-funktio:
Komentoriviparamterien syntaksista
ja käytöstä 3p, merkkijonon muuttamisesta
kokonaisluvuksi 1p (atoi/strtol/sscanf tai
käsin).
5p Tiedostonkäsittely ja I/O:
Avaus 1p, lukeminen 2p, kelaus
rewindilla, fseekilla tai sulkemalla
ja avaamalla uudestaan 1p, tulostus 1p.
Toimintalogiikka 3p:
Tiedoston läpikäynti, rivien laskenta,
kelaus ja tulostus
Perusratkaisussa tiedosto luettiin läpi kerran ja laskettiin rivit, sitten luettiin alusta uudelleen ja alettiin tulostaa sopivassa kohtaa.
Toinen vaihtoehto oli lukea tiedosto vain kerran läpi ja pitää n kappaletta uusimpia rivejä char **-taulukossa, ja lopuksi tulostaa nämä.