OHJEITA C-OHJELMOINNIN HARJOITUSTYÖTÄ VARTEN (Syksy 1997) YLEISTÄ Valitse yksi tehtävälistan ohjelmointitehtävä ja toteuta se 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ä lappusesta myöhemmin. Harjoitustyö ON PAKOLLINEN. Jos se jää tekemättä, et voi osallistua kurssin uusintakokeeseen, vaan sinun on tultava kurssille uudestaan. Harjoitustyö on palautettava 12.12.1997 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 alustustiedostoihin. Varsinainen suoritettava koodi ja muuttujamäärittelyt tulevat .c -loppuisiin lähdekooditiedostoihin. 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 alustustiedostot * 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: 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): mkdir c-harjoitus mv *.c *.h ohje Makefile *.tst c-harjoitus 2. 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 juha.taina@cs.helsinki.fi Jos ylläoleva komento ei toimi, kokeile korvata mail komennolla /usr/ucb/mail (ATK-keskuksen koneissa tuntuu olevan tällainen lisävaatimus). 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 12.12.1997 klo 23:59:59 Onnea työlle!