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:
-
Ensimmäinen mieleentuleva ratkaisu ei ole välttämättä
paras.
-
Huonoon ratkaisuun ei saa investoida liikaa liian aikaisin.
-
Hyvä ohjelma toimii oikein, tehokkuus on usein vähemmän
tärkeää.
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):
-
yhtenäinen ohjelmointityyli
-
vältä kielen erikoisuuksia ja kryptistä koodia
-
iskunkestävä ohjelma - ei natise, eikä kaadu
-
pieni opastus mukaan
-
muuttujat: kuvaavat nimet, joista selviää käyttötarkoitus
merkitys ja käyttö huomioonottaen
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:
-
Kukin ohjelmatiedosto sisältää yleiskommentin:
-
Mihin tiedosto on tarkoitettu
-
Mitä funktioita tiedosto sisältää
-
Mitä muiden tiedostojen funktioita tiedosto käyttää
-
Käytettyjä kirjastofunktioita ei tarvitse listata
-
Selvitä tärkeät tietorakenteet.
-
Kerro kustakin funktiosta:
-
Mitä funktio tekee
-
Mitkä ovat parametrit
-
Mitä funktio palauttaa
-
Varo liiallista kommentointia. Käytä selkeitä muuttujanimiä,
kielen rakenteet oletetaan tunnetuksi jne.
-
Kommentoi vaikeat ja erikoiset ratkaisut
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:
-
ohje-tiedosto
-
kaikki lähdekieliset koodi- ja määrittelytiedostot
-
tiedosto Makefile, jonka avulla ohjelma saadaan käännettyä
-
testaukseen käytetyt tiedostot ja muu testausmateriaali
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:
-
Luo hakemisto c-harjoitus ja siirrä tarvittavat tiedostot sinne.
Sen voi tehdä esim. näin (sillä oletuksella, että testimateriaalilla
on aina pääte .tst):
mkdir c-harjoitus
mv *.c *.h ohje Makefile *.tst c-harjoitus
-
Suorita komento
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
-
palautat sen ohjetta noudattaen määräaikaan mennessä,
-
se toimii virheettömästi ja tehtävämäärittelyn
mukaisesti ja
-
olet tehnyt dokumentoinnin vaatimusten mukaisesti.
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!