OHJEITA C-OHJELMOINNIN HARJOITUSTYÖTÄ VARTEN (Syksy 1999)

YLEISTÄ

Valitse yksi tehtävälistan ohjelmointitehtävä ja toteuta se ANSI-C -kielellä. Voit tehdä työsi millä tahansa koneella, mutta tuloksen on kuitenkin ehdottomasti toimittava myös kruunassa (muista siis siirrettävyys).

Varsinaisia työnohjaustilaisuuksia ei järjestetä. Voit kuitenkin kysellä työhön tarvittavia ohjeita ja opastusta ainakin kurssin harjoitusten yhteydessä. Ilmoita valitsemasi ohjelmointyön numero harjoitusten pitäjälle.

Kokoa lopuksi ratkaisuusi liittyvät tiedostot yhdeksi nipuksi ja lähetä ratkaisu elektronisessa postissa harjoitusten pitäjällesi. Tarkemmat ohjeet löytyvät tästä ohjeesta.

Harjoitustyö ON PAKOLLINEN. Jos se jää tekemättä, et voi osallistua kurssin uusintakokeeseen, vaan sinun on tultava kurssille uudestaan.

Harjoitustyö on palautettava perjantaina 29.10.1999 klo 23:59:59 mennessä. Vastuu sopivasta aikataulusta on sinulla itselläsi. Muista välikokeesi ja pysy aikataulussasi!

HYVIN SUUNNITELTU PUOLIKSI TEHTY

Hahmottele ongelmakenttää ja lyö lukkoon toiminnallinen määrittely, käytettävät tietorakenteet sekä ratkaisujen päälinjat. Esittele valintojasi ja ratkaisujasi harjoitusten ohjaajalle. Voit säästää koodinkirjoitusvaivojasi jo hyvillä tietorakenteilla.

POIS TURHA HIENOSTELU: Eli tee se ja vain se mitä pyydetään ja tee lisävirittelysi vain omaan versioosi!

Sopiva ohjelman pituus on 200-500 riviä koodia (plus kommentit). Pituutta tärkeämpää on kuitenkin, että ohjelma tekee mitä pyydetään.

Älä aliarvioi suunnittelun merkitystä toimintapainotteisessakaan lähestymistavassa.

HYVÄT OHJELMAT EIVÄT KASVA ITSESTÄÄN - NE TEHDÄÄN

Arvioi tehdyn suunnitelman toteuttamiskelpoisuutta: Sijoita funktioiden esittelyt, tietorakenteiden tyyppimäärittelyt ym. yhteiset esittelyt .h -loppuisiin määrittelytiedostoihin. Varsinainen suoritettava koodi ja muuttujamäärittelyt tulevat .c -loppuisiin lähdekooditiedostoihin.

Laadi aina erillinen pääohjelma ja sijoita yhteenkuuluvat, jonkin selkeän osatehtävän suorittavat funktiot omiin lähdekooditiedostoihinsa

Tee työsi hyvällä maulla (AINA):

Testausta kannattaa tehdä järjestelmällisesti heti alusta alkaen. Voit etsiä yksinkertaisia virheitä ja 'epäilyttäviä' kohtia gcc-kääntäjän optioilla -Wall -ansi

DOKUMENTOINTI: TARPEELLINEN OSA

Tiedostoon ohje kirjattu noin parisivuinen ohjelman käyttöohje ja huolellisesti tehty kommentointi riittää tällä kertaa.

Ohjelman kommentoinnissa pätevät seuraavat yksinkertaiset säännöt:

HARJOITUSTYÖN PALAUTUS: MITENKÄS SE MENIKÄÄN?

Palauta harjoitustyö harjoitusryhmäsi vetäjälle tutkittavaksi sähköpostitse. Lähetä harjoitustyö yhtenä helposti purettavana pakettina.

Paketissa tulee olla mukana:

Makefile-tiedostoa ei tarvitse tehdä itse. Tässä on malli:



#Laita =:n perään käyttämäsi C-kääntäjä (esim. gcc)
CC=

#laita =:n perään käyttämäsi optiot (esim. -Wall)
CFLAGS=

#laita =:n perään .c-ohjelmatiedostot (esim. paa.c runko.c)
SRC=

#laita =:n perään vastaavat tiedostot .o -päätteisinä (esim. paa.o runko.o)
OBJS=

#laita =:n perään ohjelmasi nimi (esim. pasianssi)
PROGRAM=

#Huom. Ennen $(CC):ta pitää olla Tabulaattori-merkki, ei välilyöntejä!
$(PROGRAM): $(OBJS)
        $(CC) $(OBJS) -o $(PROGRAM)

#Huom. Ennen rm:aa pitää olla Tabulaattori-merkki, ei välilyöntejä!
clean:
        rm $(OBJS) $(PROGRAM) core *.bak *~



Tässä on esimerkki-Makefile. Tämä kääntää ohjelman, joka muodostuu kolmesta lähdekielisestä tiedostosta paa.c, kaanna.c ja apu.c (ja mahdollisesti joukosta .h-päätteisiä alustustiedostoja, ne eivät näy tässä). Tuloksena saadaan ohjelma ympari:


#Laita =:n perään käyttämäsi C-kääntäjä (esim. gcc)
CC=gcc

#laita =:n perään käyttämäsi optiot (esim. -Wall)
CFLAGS=-Wall -ansi

#laita =:n perään .c-ohjelmatiedostot (esim. paa.c runko.c)
SRC=paa.c kaanna.c apu.c

#laita =:n perään vastaavat tiedostot .o -päätteisinä (esim. paa.o runko.o)
OBJS=paa.o kaanna.o apu.o

#laita =:n perään ohjelmasi nimi (esim. pasianssi)
PROGRAM=ympari

#Huom. Ennen $(CC):ta pitää olla Tabulaattori-merkki, ei välilyöntejä!
$(PROGRAM): $(OBJS)
        $(CC) $(OBJS) -o $(PROGRAM)

#Huom. Ennen rm:aa pitää olla Tabulaattori-merkki, ei välilyöntejä!
clean:
        rm $(OBJS) $(PROGRAM) core *.bak *~


Voit käyttää mainiosti Makefilea toteutusvaiheessa. Jos Makefile on oikein tehty, komento make kääntää lähdekoodisista tiedostoista nimeämäsi ohjelman. Komento make clean puhdistaa työhakemistostasi ylimääräiset tiedostot.

Kun olet valmis palauttamaan työsi, toimi seuraavasti:

  1. Luo hakemisto c-harjoitus ja siirrä tarvittavat tiedostot sinne. Sen voi tehdä esim. näin (sillä oletuksella, että testimateriaalilla on aina pääte .tst):
    1. mkdir c-harjoitus
      mv *.c *.h ohje Makefile *.tst c-harjoitus
  2. Suorita komento
    1. tar cf - c-harjoitus | uuencode c-harjoitus.tar | mail ohjaajan-osoite missä ohjaajan-osoite on harjoitusryhmäsi ohjaajan sähköpostiosoite. Esim. luennoijan ryhmissä oikea komento on:

      tar cf - c-harjoitus | uuencode c-harjoitus.tar | mail liisa.marttinen@cs.helsinki.fi

      Jos ylläoleva komento ei toimi, kokeile korvata mail komennolla /usr/ucb/mail

      Komentoa kannattaa kokeilla ensin lähettämällä sähköpostia itselleen. Tuloksena pitäisi olla sähköposti, joka alkaa rivillä begin 600 c-harjoitus.tar ja sen jälkeen on kummaa sotkua. Luku 600 voi olla muutakin.
    Älä lähetä pakettia ohjaajalle useaan kertaan!

    Harjoitustyö on hyväksytty, kun

    Isot puutteet palautetaan korjattavaksi.

    Harjoitustyön palautusaika määräytyy elektronisen postin aikaleimasta. Palautusajan ehdoton takaraja on 29.10.1999 klo 23:59:59

    Onnea työlle!