Modulaarinen ohjelmointi Kertaus osoittimista

Samankaltaiset tiedostot
C-ohjelmointi, syksy Modulaarinen ohjelmointi. Luento C-ohjelmointi Syksy

Modulaarinen ohjelmointi

Lyhyt kertaus osoittimista

Loppukurssin järjestelyt

Loppukurssin järjestelyt C:n edistyneet piirteet

Tietueet. Tietueiden määrittely

Rakenteiset tietotyypit Moniulotteiset taulukot

ITKP102 Ohjelmointi 1 (6 op)

815338A Ohjelmointikielten periaatteet Harjoitus 5 Vastaukset

Merkkijono määritellään kuten muutkin taulukot, mutta tilaa on varattava yksi ylimääräinen paikka lopetusmerkille:

TIETORAKENTEET JA ALGORITMIT

Ohjelmassa muuttujalla on nimi ja arvo. Kääntäjä ja linkkeri varaavat muistilohkon, jonne muuttujan arvo talletetaan.

Muistin käyttö. Muistin käyttö. Muistin käyttö. Muistin käyttö. Muistin käyttö. Muistin käyttö. Muistin käyttö C-ohjelmassa

Osoitin ja viittaus C++:ssa

4. Luokan testaus ja käyttö olion kautta 4.1

tietueet eri tyyppisiä tietoja saman muuttujan arvoiksi

815338A Ohjelmointikielten periaatteet Harjoitus 3 vastaukset

Operaattoreiden ylikuormitus. Operaattoreiden kuormitus. Operaattoreiden kuormitus. Operaattoreista. Kuormituksesta

Sisällys. 1. Omat operaatiot. Yleistä operaatioista. Yleistä operaatioista

1. Omat operaatiot 1.1

ITKP102 Ohjelmointi 1 (6 op)

Sisällys. Yleistä attribuuteista. Näkyvyys luokan sisällä ja ulkopuolelta. Attribuuttien arvojen käsittely aksessoreilla. 4.2

Harjoitus 4 (viikko 47)

Tietorakenteet ja algoritmit

AS C-ohjelmoinnin peruskurssi 2013: C-kieli käytännössä ja erot Pythoniin

JAVA-PERUSTEET. JAVA-OHJELMOINTI 3op A JAVAN PERUSTEET LYHYT KERTAUS JAVAN OMINAISUUKSISTA JAVAN OMINAISUUKSIA. Java vs. C++?

Tietorakenteet ja algoritmit

C-ohjelmoinnin peruskurssi. Pasi Sarolahti

Metodit. Metodien määrittely. Metodin parametrit ja paluuarvo. Metodien suorittaminen eli kutsuminen. Metodien kuormittaminen

C-kielessä taulukko on joukko peräkkäisiä muistipaikkoja, jotka kaikki pystyvät tallettamaan samaa tyyppiä olevaa tietoa.

ITKP102 Ohjelmointi 1 (6 op)

Harjoitus 5 (viikko 48)

Moduli 5: Kehittyneitä piirteitä

Jakso 4 Aliohjelmien toteutus

ITKP102 Ohjelmointi 1 (6 op)

Dynaaminen muisti. Pasi Sarolahti Aalto University School of Electrical Engineering. C-ohjelmointi Kevät 2017.

Modulaarisessa ohjelmoinnissa jaetaan ohjelma osiin (moduuleihin), jotka ovat yksinkertaisia ja lyhyitä.

Tiedostot. Tiedostot. Tiedostot. Tiedostot. Tiedostot. Tiedostot

Olio-ohjelmointi Javalla

Tähtitieteen käytännön menetelmiä Kevät 2009 Luento 4: Ohjelmointi, skriptaus ja Python

Sisällys. Yleistä attribuuteista. Näkyvyys luokan sisällä. Tiedonkätkentä. Aksessorit. 4.2

Pythonin alkeet Syksy 2010 Pythonin perusteet: Ohjelmointi, skriptaus ja Python

Sisällys. JAVA-OHJELMOINTI Osa 7: Abstrakti luokka ja rajapinta. Abstraktin luokan idea. Abstrakti luokka ja metodi. Esimerkki

C-ohjelma. C-ohjelma. C-ohjelma. C-ohjelma. C-ohjelma. C-ohjelma. Operaatioiden suoritusjärjestys

7. Oliot ja viitteet 7.1

5. HelloWorld-ohjelma 5.1

Ohjelmointi 2 / 2010 Välikoe / 26.3

Sisältö. 2. Taulukot. Yleistä. Yleistä

11. oppitunti III. Viittaukset. Osa. Mikä on viittaus?

C++ Kuva 1-1. C- ja C++ kielien perustana olevat kielet.

Luokassa määriteltävät jäsenet ovat pääasiassa tietojäseniä tai aliohjelmajäseniä. Luokan määrittelyyn liittyvät varatut sanat:

Tietorakenteet ja algoritmit

2) Aliohjelma, jonka toiminta perustuu sivuvaikutuksiin: aliohjelma muuttaa parametrejaan tai globaaleja muuttujia, tulostaa jotakin jne.

3. Binääripuu, Java-toteutus

8. Näppäimistöltä lukeminen 8.1

Tietorakenteet ja algoritmit

Sisällys. 7. Oliot ja viitteet. Olion luominen. Olio Java-kielessä

Dynaaminen muisti Rakenteiset tietotyypit

Tietorakenteet ja algoritmit

Luento 4 Aliohjelmien toteutus

Rajapinta (interface)

Yleistä. Nyt käsitellään vain taulukko (array), joka on saman tyyppisten muuttujien eli alkioiden (element) kokoelma.

TAMPEREEN TEKNILLINEN YLIOPISTO Digitaali- ja tietokonetekniikan laitos. Harjoitustyö 4: Cache, osa 2

Sisältö. 22. Taulukot. Yleistä. Yleistä

Ohjelmoinnin perusteet Y Python

Sisällys. 12. Näppäimistöltä lukeminen. Yleistä. Yleistä

Ohjelmoinnin jatkokurssi, kurssikoe

ELM GROUP 04. Teemu Laakso Henrik Talarmo

Sisällys. 18. Abstraktit tietotyypit. Johdanto. Johdanto

15. Ohjelmoinnin tekniikkaa 15.1

12 Mallit (Templates)

8. Näppäimistöltä lukeminen 8.1

18. Abstraktit tietotyypit 18.1

12. Näppäimistöltä lukeminen 12.1

Monipuolinen esimerkki

C++11 lambdat: [](){} Matti Rintala

812347A Olio-ohjelmointi, 2015 syksy 2. vsk. X Poikkeusten käsittelystä

Olion elinikä. Olion luominen. Olion tuhoutuminen. Olion tuhoutuminen. Kissa rontti = null; rontti = new Kissa();

1.1 Pino (stack) Koodiluonnos. Graafinen esitys ...

Osoittimet ja taulukot

Luento 4 (verkkoluento 4) Aliohjelmien toteutus

Toinen harjoitustyö. ASCII-grafiikkaa

Muuttujien roolit Kiintoarvo cin >> r;

Aliohjelmatyypit (2) Jakso 4 Aliohjelmien toteutus

7/20: Paketti kasassa ensimmäistä kertaa

Toinen harjoitustyö. ASCII-grafiikkaa 2017

C-ohjelmoinnin peruskurssi. Pasi Sarolahti

Listarakenne (ArrayList-luokka)

Kompositio. Mikä komposition on? Kompositio vs. yhteyssuhde Kompositio Javalla Konstruktorit set-ja get-metodit tostring-metodi Pääohjelma

IDL - proseduurit. ATK tähtitieteessä. IDL - proseduurit

Harjoitustyö: virtuaalikone

815338A Ohjelmointikielten periaatteet Harjoitus 6 Vastaukset

Luento 4 (verkkoluento 4) Aliohjelmien toteutus

Solidity älysopimus ohjelmointi. Sopimus suuntautunut ohjelmointi

Osoittimet ja taulukot

ATK tähtitieteessä. Osa 3 - IDL proseduurit ja rakenteet. 18. syyskuuta 2014

TT00AA Ohjelmoinnin jatko (TT10S1ECD)

Java-kielen perusteet

Pakkauksen kokoaminen

Java kahdessa tunnissa. Jyry Suvilehto

Transkriptio:

, kevät 2006 Modulaarinen ohjelmointi Kertaus osoittimista Luento 9 28.3.2006 Kevät 2006 Liisa Marttinen 1

Sisältö Modulaarisuus C:ssä Käännösyksikkö ja otsaketiedosto Makefile Kertaus osoittimista ja funktioista Kokeesta Kevät 2006 Liisa Marttinen 2

Ison ohjelman toteuttaminen Kokonaisuus on jaettava hallittaviin osiin Toiminnallisia kokonaisuuksia (Java: luokat) Syöttö ja tulostus Virheiden käsittely Tietyn toiminnan tai rajatun tehtävän toteuttaminen Osien väliset rajapinnat eli parametrit ja paluuarvot Selkeästi määriteltyjä Vähän riippuvuuksia eri osien välillä Moduularisuus on keino hallita monimutkaisuutta! Moduulit toteuttavat abstraktion, kapseloinnin ja informaation piiliottamisen. Kevät 2006 Liisa Marttinen 3

Modulaarisuuden hyödyt Jako osiin + selkeät ja yksinkertaiset rajapinnat => koko ohjelman rakenne selkeämmäksi Ohjelmisto voidaan toteuttaa projektityönä: eri henkilöt ohjelmoivat eri osat Testaus voidaan aloittaa hyvin varhaisessa vaiheessa Ylläpito helpottuu: muutokset vain tarvittaviin kohtiin eli joihinkin funktioihin Koodin uudelleenkäyttö: standardikirjastot, omat kirjastot Kerran ratkaistu ja koodattu, voidaan käyttää monta kertaa Kevät 2006 Liisa Marttinen 4

Modulaarinen ohjelmointi ja C-kieli C ei varsinaisesti tue modulaarista ohjelmointia (vertaa esim. Modula) C:ssa on piirteitä, joiden avulla ohjelman modulaarisuus voidaan toteuttaa funktiot ja niiden protyypit otsaketiedostot (header files) Näitä piirteitä sopivasti käyttämällä saadaan C:ssä toteutettua modulaarinen ohjelma tehokkaasti Toiminnon toteutus Piilotetaan käyttäjältä toiminnon käyttö tarkat ohjeet käyttämiseen Kevät 2006 Liisa Marttinen 5

C:n piirteitä modulaariseen ohjelmointiin funktiot Ohjelma jaetaan useaksi pienehköksi funktioksi, joista kukin suorittaa tietyn toimenpiteen ~ noin 20 riviä kommentteineen on sopiva funktion koko, sillä näkyy helposti kokonaan näytöllä Valmiit kirjastofunktiot: standardikirjaston funktiot tai omat kirjastofunktiot käytettävissä Pääohjelma main lähinnä koostuu funktiokutsuista Lisähierarkiaa: funktiot voivat kutsua toisia funktioita funktioiden esittelyt eli prototyypit Funktio on määriteltävä tai esiteltävä ennen käyttöä Kääntäjä voi tarkistaa oikean käytön otsaketiedostot Sisältävät tietoja, joita ohjelmat tarvitsevat voidakseen käyttää muualla määriteltyjä funktioita Kevät 2006 Liisa Marttinen 6 #include <stdio.h>

Pienehkön ohjelman modulaarinen rakenne #include-määrittelyt kirjastofunktioiden liittämiseksi voivat sisältää toisia includeja vakiomäärittelyt, tyyppiesittelyt helpompi hallita: löytää ja muuttaa Ohjelman funktioiden prototyypit eli niiden esittely Näin määritellään ennen käyttöä Pääohjelma main (joka ohjelmassa ainakin yksi) ja sen funktiokutsut Ohjelman funktioiden määrittelyt Kevät 2006 Liisa Marttinen 7

Entä kun funktioita on hyvin paljon ja niitä toteuttavat eri projektiryhmät ja useat ihmiset? main Linux: ytimessä 2.4 miljoonaa koodiriviä; tästä 1.4 milj. riviä eri laitteiden ajureita varten 78 000 C-tiedostoa, tiedoston keskim. koko 273 riviä; Koko KJ:n koko n. 20-30 miljoona riviä sub1 sub2 sub3 sub4 subsub1 subsub2 subsub2 Standardikirjaston funktiot Ohjelmoijan oma funktiokirjasto Modulaarisuus funktioiden tasolla Kevät 2006 Liisa Marttinen 8

Isohko ohjelma tai projekti Yhteenkuuluvat funktiot omiksi tiedostoiksi eli käännösyksiköiksi => moduuli Linuxin koodi Kukin käännösyksikkö voidaan kääntää ja testata erikseen => objektimoduuli Ajettava ohjelma saadaan, kun erikseen käännetyt objektimoduulit linkitetään yhteen Erikseen kunkin moduulin lähdekooditiedosto ja otsaketiedosto => joustavuutta kääntämisessä Ei tarvitse kääntää turhaan objektimoduulin koodia Otsaketietojen liittäminen riittää Kevät 2006 Liisa Marttinen 9

Kooditiedostot muodostavat C:n moduulin C:n funktiot ovat globaaleja, kaikkialta ohjelmasta kutsuttavissa Eivät sellaisenaan yhdessä tiedostossa tarjoa riittävää kapselointia toteuttamisen, muuttamisen, kääntämisen ja ylläpidon joustavuutta Toteutuksen ja käytön erottava moduuli syntyy, kun kootaan joukko yhteenliittyviä funktioita samaan kooditiedostoon (jokunimi.c) = moduulin toteutus ja näiden funktioiden prototyypit ja muu muiden moduulien käyttöön tarkoitettu data otsaketiedostoon (jokunimi.h) = moduulin rajapinta Kevät 2006 Liisa Marttinen 10

Kapselointi: static - Määrittelee talletusluokkaa ja näkyvyyttä (scope) Paikalliset muuttujat Funktion paikallisille muuttujille varataan tilat pinosta. Ne ovat käytettävissä vain funktion suoritusajan. static-määrittely => vain funktion sisällä käytettävissä, mutta säilyttävät arvonsa käyttökerrasta toiseen (esim.käyttökertalaskuri) Globaalit muuttujat ja funktiot static-määrittely rajaa näkyvyyden siihen tiedostoon, jossa ne ovat määritelty Mahdollistaa datan piilottamisen Kevät 2006 Liisa Marttinen 11

Kapselointi: estä tiedon vuotaminen ulkopuolelle ~ Javan private Kapseloidaan moduulin muuttujia ja funktioita static => eivät ole käytettävissä moduulin ulkopuolella Hyvä käytäntö jotenkin erottaa nimestä tällaiset muuttujat ja funktiot funktiota edeltää static-määre static void e_append_(); /* kuuluu editor.h-tiedostoon */ Globaalia muuttujaa edeltää static-määre static int e_flag_ = 0; /* tämä samoin*/ static muuttaa sen, kuinka linkittäjä käsittelee muuttujaa Huom! C:ssä kapselointiyksikkönä on tiedosto! Javassa objekti. Kevät 2006 Liisa Marttinen 12

extern-määrittely Funktioiden esittelyssä oletusarvona => voidaan jättää pois Yhteiskäyttöiset muuttujat Harvoin todella tarpeen ja hyödyllisiä extern int myerrorno Linkittäjä: kaikki viittaukset kohdistuvat samaan muuttujaan, vaikka olisivat eri tiedostoissa Globaalin muuttujan static-määrittely =>vain samassa tiedostossa kaikki viittaukset kohdistuvat samaan muuttujaan. Toisen tiedoston viittaukset kohdistuvat toiseen muuttujaan. Kevät 2006 Liisa Marttinen 13

Vaikutus linkittäjän toimintaan Ohjelmassa voi olla useita samannimisiä muuttujia (esim. i,j) ja linkittäjän täytyy tietää, milloin kyseessä on viite yhteen ja samaan muuttujaan ja milloin taas eri muuttujiin muuttujien linkkiytymistapa (linkage) ulkoinen (external): ulommalla tasolla määritellyt Yhteiskäyttöisiä, usean tiedoston sisällä viittaavat aina yhteen ja samaan olioon ei mitään: funktion sisällä määritellyt Linkittäjän kannalta aina eri olioita sisäinen (internal): const-määritellyt muuttujat, rakenteiset tyypit (struct, union, enum) Yhden tiedoston sisällä viittavat aina samaan olioon, eri tiedostoissa eri olioihin static ja extern muuttavat linkkiytymistapaa static muuttaa ulkoisen sisäiseksi extern muuttaa ulkoiseksi Kevät 2006 Liisa Marttinen 14

Javassa ei ole globaaleja muuttujia! Globaalit muuttujat Ohjelmassa funktion ulkopuolella määritellyt muuttujat ovat globaaleja koko ohjelmassa käytettävissä määrittelynsä jälkeen elinikä sama kuin koko ohjelmalla alustetaan nollaksi C:ssä tulee käyttää hyvin harkiten ja pyrkiä välttämään käyttämistä Funktiokutsut eivät saa muuttaa globaaleja muuttujia Seuraa vaikeuksia: testaus, virheiden jäljitys, ylläpito Dokumentoitava huolelisesti Määriteltävä yhdessä käännösyksikössä ja liitettävä.h tiedostoon (extern int globalvar) Kevät 2006 Liisa Marttinen 15

Käännösmoduulit mod1.h Funktioiden koodit Mainohjelman koodi mod1.c mod2.h Moduulin funktioiden koodit mod2.c mod3.h Moduulin funktioiden koodit mod3.c Kevät 2006 Liisa Marttinen 16

Kooditiedosto (.c) Sisältää yhteenkuuluvien, jollakin tavoin samaan kokonaisuuteen liittyvien funktioiden koodin Kukin funktio suorittaa jonkun tietyn toiminnon esim. syöttötietojen käsittelyn tulostukset varsinaisen tietojen käsittelyn ja muokkaamisen: laskenta, lajittelu, jne virheidenkäsittelyn Jne Yhdessä kooditiedostossa main Muiden moduulien käyttöön tarkoitettu informaatio kootaan otsaketiedostoksi Pyritään pitämään suhteellisen pienenä Eri moduulit suhteellisen riippumattomiksi toisistaan Kevät 2006 Liisa Marttinen 17

Vastaa Javan rajapintaa (interface) Otsaketiedosto Sisältää: funktioiden esittelyt (prototyypit) Makrot vakioiden määrittelyt (const) Header files usually ONLY contain definitions of data types, function prototypes and C preprocessor commands. Dokumentoinnin: kaikki mitä käyttäjän tarvitsee tietää osatakseen käyttää Ei mitään pelkästään toteutukseen liittyvää esikääntäjä liittää otsaketiedoston moduuliin #include <stdio.h> standardikirjaston funktion prototyypit moduuliin #include oma.h Samassa hakemistossa olevan oman otsaketiedoston liittäminen Kevät 2006 Liisa Marttinen 18

makefile Ohjelmassa on useita moduuleja. Kukin moduuli eli käännösyksikkö omassa tiedostossaan, kirjastofunktiot omassa tiedostossaan Käännösyksiköt käännetään erikseen ja linkitetään sitten yhteen gcc c main.c tekee objektitiedoston main.o gcc c mod1.c gcc c mod2.c => mod1.o => mod2.0 gcc o ohjelma main.o mod1.o mod2.o linkittää objektitiedostot suoritettavaksi ohjelmaksi Kevät 2006 Liisa Marttinen 19

/* main.c */ #include <stdio.h> #include mod1.h #include mod2.h int main(void) { mod1(); mod2(); return 1; } /* mod1.c */ #include <stdio.h> #include mod1.h void mod1(void){. puts( moduuli yksi );.. } /*mod1.h */ void mod1(void); /* mod2.c */ #include <stdio.h> #include mod2.h void mod2(void){. puts( moduuli kaksi );.. } /*mod2.h */ void mod2(void); gcc c main.c gcc c mod1.c gcc c mod2.c gcc o ohjelma main.o mod1.o mod2.o

Moduulien kääntäminen make Kääntämiskomennot ja ohjeet kirjoitetaan säännöiksi makefile tai Makefile nimiseen tiedostoon kohde: tarvittavat tiedostot komento1 komento2. komentoz Huom. Komentojen sisennykseen käytetään tabulaattorimerkkiä (tabulointia), ei välilyöntejä. Kevät 2006 Liisa Marttinen 21

makefile:n laatiminen Eräs skriptikieli, kuten mm -Job Control Languages -Unix Shell -QuakeC, AWK, perl, gcc c main.c gcc c mod1.c gcc c mod2.c gcc o ohjelma main.o mod1.o mod2.o Makefile kirjoitetaan vain kerran, mutta sitä voidaan käyttää monta kertaa komennolla make käännetään vain ne tiedostot, joita on muutettu linkitetään uudelleen vain, jos jokin linkitettävistä objektitiedostoista on muuttunut #makefile # kommenttirivi CC = gcc ansi pedantic Wall ohjelma: main.o mod1.o mod2.o $(CC) o ohjelma main. mod1.o mod2.o mod1.o: mod1.c mod1.h $(CC) c mod1.c mod2.o: mod2.c mod2.h $(CC) c mod2.c main.o: main.c mod1.h mod2.h $(CC) c main.c http://www.cs.helsinki.fi/group/sqltr/makefile_ohje.html http://www.eng.hawaii.edu/tutor/make/index.html http://vertigo.hsrl.rutgers.edu/ug/make_help.html Kevät 2006 Liisa Marttinen 22

riippuvuusgraafit Harjoitustyö.o.o.o.o main.o mod1.o mod2.o modz.o.c.h.c.h.c.h.c main.c mod1.h mod1.c mod2.h mod2.c modz.h modz.c Kevät 2006 Liisa Marttinen 23

Modular programming is a life saver, you can save an immense amount of time, if you do it right Kevät 2006 Liisa Marttinen 24

Lyhyt kertaus osoittimista char *p; /* char, int, jne ilmoittavat, minkä tyyppisiä */ Keskusmuisti int *q; /* olioita sisältäviin muistilohkoihin osoittavat */ Nämä määrittelyt varaavat tilan vain osoittimelle! 345: muistilohko char *p = Tätä varten varataan muistitilaa ; int luvut[] = {1, 2, 3, 4, 5}; double taulu[100]; 678: osoitin p 740: ohjelmakoodi funktio foo1 Nämä varaavat tilaa myös muistilohkolle sekä asettavat osoittimen osoittamaan ko. muistilohkoa. 680: 830: funktio foo2 Tilaa voidaan varata myös malloc- ja callocfunktioilla ja samalla asettaa jokin osoitin osoittamaan varattua muistilohkoa. 915: osoitin q Kevät 2006 Liisa Marttinen 25

Osoittimien käyttöä int **p; int *q,r; int i; i= **p q = &i; /* i:n osoite q:n arvoksi i = *q+1; i = *q++; /*???? */ r = q; *r = 3; /* i=3 */ q i = ++*q; /* i=6*/ i p void *p; i= *(int*) p; char *pv = On aika ; On aika\0 pv Kevät 2006 Liisa Marttinen 26 5 5 3 12 char viesti [] = On aika ; 4 9 const int *p; int const *p; const int const *p; viesti: On aika\0

Osoitin parametrina C:ssä vain arvoparametreja => funktio käyttää vain kopioita eikö voi mitenkään muuttaa saamiensa parametrien arvoja: void swap(int x, int y) { int apu; apu=x; x=y; y= apu; } kopioita void swap(int *x, int *y) { int apu; apu=*x; *x=*y; *y= apu; } Kutsu: swap (&x, &y); Varmistaa, ettei funktio muuta viiteparametrina saamaansa lohkoa Kevät 2006 Liisa Marttinen 27 x y 3 4 x:n osoite, y:n osoite double product (const double block, int size);

Java: overriding C: funktio-osoittimet Esimerkki: funktio voi suorituksen aikana vaihtaa käyttämäänsä lajittelualgoritmia alkioiden lukumäärän perusteella int (*fp) (void); int *fp() Funktio, joka palauttaa inttyyppisen osoittimen! Osoitin int-tyypin palauttavaan funktiooon int fname(); /* kunhan funktio on oikean tyyppinen */ fp = fname; /* fp() merkitsee nyt samaa kuin fname() Funktion parametrina funktio void qsort(*line[], int left, int right, int (*comp)(void *, void*)); Kevät 2006 Liisa Marttinen 28

void main (void) { typedef double (*funcptr) (double ); int choice; double x, fx; funcptr fp;.. funcprt function[7] = {NULL, sin, cos, tan, log, log_2, exp}; /*määriteltyjä funktioita*/ /* funktiomenun tulostus: käyttäjää valitsee haluamansa vaihtoehdon */. scanf ( %i, &choice); /* lisäksi tarkistetaan, että valinta on sallittu arvo */ if (choice ==0) break; printf( Enter x: ); scanf/( %lg, &x); fp = function[choice]; fx = fp(x); printf( \n (%g) = %g\n, x, fx); } } function [0] [1] [2] [3] [4] [5] [6] NULL sin cos tan log log_2 exp

Kurssikokeesta 2.5. klo 16-19 Ylimääräinen koetilaisuus 8.5. klo 9-12 niille, jotka hyvästä syystä ovat estyneet osallistumasta 2.5. pidettävään kokeeseen Ilmoita Liisalle (liisa.marttinen@cs.helsinki.fi), jos olet tulossa tähän kokeeseen! Näihin kokeisiin saa osallistua vain, jos on jättänyt harjoitustyönsä tarkastettavaksi 24.4. mennessä Kokeessa saa olla mukana A4:n kokoinen lunttilappu Kevät 2006 Liisa Marttinen 30

Vähän kokeesta: mitä pitää osata Aiempien kurssin asioista perusohjelmointi, algoritmien kirjoittaminen, tietorakenteiden käyttö( taulukko, lista, pino) ja niiden tavanomaiset käsittelyrutiinit (lisääminen, poisto ja järjestäminen) C-kielen syntaksi ja semantiikka. Kirjastorutiinien käyttöä ei sinänsä edellytetä, mutta erimerkiksi merkkijonojen ja tiedostojen käsittelyyn käytettävät tavanomaiset funktiot on syytä hallita. Kielen rakenteista on hyvä hallita ainakin: Funktioiden ja niiden parametrien käyttö Taulukko Tekstitiedosto Linkitetty tietorakenne ja osoittimet Komentoriviparametrit Merkkijonot Kevät 2006 Liisa Marttinen 31

Lisää kokeesta Näistä osattavista asioista muodostetaan sitten kokeessa erilaisia yhdistelmiä eri tehtävissä. Esimerkiksi toukokuun 2005 kokeessa oli tehtävässä 1: funktion käyttöä ja tietojen lukemista käyttäjältä (eli tiedostosta stdin), tehtävässä 2: funktio, osoittimia ja linkitetyn listan kopiointi ja järjestäminen tehtävässä 3: Tekstitiedosto, komentoriviparametri ja taulukko Koska koeaikaa on vain 2,5 tuntia, niin kolmeen tehtävään vastaaminen edellyttää jonkinlaista rutiinia C-ohjelmien kirjoittamisessa Tätä rutiinia on saatu jo Viopen harjoituksissa, mutta etenkin kurssin harjoitustehtäviä tehdessä! Lunttilappu helpottaa asioiden muistamista! Kevät 2006 Liisa Marttinen 32