Helsingin yliopisto Tietojenkäsittelytieteen laitos
 

Tietojenkäsittelytieteen laitos

Tietoa laitoksesta:

 

C-ohjelmointi
Syksy 2006

Arvosteluperusteet ja malliratkaisut kurssikokeen 20.10.2006 tehtäviin

Tehtävä 1

malliratkaisu

Tehtävänannon 'kirjoittaa' voitiin tulkita ja olikin tulkittu kahdella eri tavalla:

  1. tulostaa
  2. 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:

Tehtävä jaettiin kolmeen 4 pisteen osaan seuraavasti:

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

malliratkaisu

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