Kertaus osoittimista Modulaarinen ohjelmointi

Slides:



Advertisements
Samankaltaiset esitykset
Tuloksellinen Java-ohjelmointi Luku 3 Luokkien käyttäminen
Advertisements

18. Abstraktit tietotyypit
Olio-ohjelmoinnin perusteet luento 3: Muuttujista ja funktioista Sami Jantunen LTY/Tietotekniikan osasto.
@ Leena Lahtinen Helia TIETO JA TIETOKONEOHJELMA  TIETOKONEOHJELMA KÄSITTELEE TIETOJA  TIETOJA VOIDAAN KÄSITELLÄ OHJELMASSA VAIN SALLITUILLA.
© Jukka Harju, Viittausmuuttujat. © Jukka Harju, Viittaukset •Viittausmuuttuja sisältää tiedon siitä missä muistipaikassa olio.
© Hannu Laine 1 Tietorakenteet ja algoritmit Funktio-osoittimet Funktio-osoittimen ja taulukko-osoittimen vertailu Funktio-osoittimen käyttötapoja.
JavaScript (c) Irja & Reino Aarinen, 2007
Syksy 2001 KYAMK/J.Ansamäki/Olio- ohjelmointi71 Olio-ohjelmointi 2. osa: diat (2. välikoe) KYMENLAAKSON AMMATTIKORKEAKOULU Jarkko Ansamäki, 2001.
EXtensible Markup Language
Taulukoiden määrittely, käsittely ja kopiointi Vaihtoehdot taulukoille
C-kieli ja dynaaminen muistin varaus
Rakenteinen ohjelmointi
Ohjelmointitaito (ict1td002, 12 op) Syksy 2008
Olio-mallinnus Tietojärjestelmien suunnittelu KYAMK, Liiketalous, Kouvola Jarkko Ansamäki, 2002.
13. Pakkaukset.
Näytölle tulostaminen. 7.2 Sisällys System.out.println - ja System.out.print -operaatiot. Tulostus erikoismerkeillä. Edistyneempää tulosteiden.
Sovellusohjelman suunnittelu & toteutus
C-ohjelmointi, kevät 2006 Taulukot Binääritiedostot Luento
OHJELMAN OSITTAMINEN LUOKKA ATTRIBUUTIT METODIT. LUOKKA JAVA ohjelma koostuu luokista LUOKKA sisältää metodeja molemmat sisältävät attribuutteja eli muuttujia.
@ Leena Lahtinen OHJELMAN OSITTAMINEN LUOKKA ATTRIBUUTIT METODIT.
Ohjelman jakaminen useampaan tiedostoon Olio-ohjelmointi (C++) KYAMK, Jarkko Ansamäki 2001.
Olio-ohjelmoinnin perusteet luento 3
Poikkeuskäsittely- lohkot tMyn1 Poikkeuskäsittelylohkot try-catch Poikkeustilanteiden käsittelymekanismi toteutetaan varatuilla sanoilla try, throw ja.
(Joskus puhutaan myös komponenttitestauksesta.) Pienin kokonaisuus, joka on järkevä testata erikseen. ● Perinteisesti yksittäinen aliohjelma. ● Olio-ohjelmien.
16. Lohkot Sisällys Tutustutaan lohkoihin. Muuttujien ja vakioiden näkyvyys sekä elinikä erityisesti operaation lohkossa. Nimikonfliktit. Muuttujat.
© Jukka Harju, Jukka Juslin Java-ohjelmointi Opas ammattimaiseen osaamiseen Luku 9 Poikkeuskäsittely.
Poikkeustenkäsittely  Mitä poikkeustenkäsittely tarkoittaa?  Poikkeuksen käsitteleminen  Poikkeusluokkien hierarkia  Poikkeuksen heittäminen 1.
TIETO JA TIETOKONEOHJELMA TIETOKONEOHJELMA KÄSITTELEE TIETOJA TIETOJA VOIDAAN KÄSITELLÄ OHJELMASSA VAIN SALLITUILLA MENETELMILLÄ.
Sami Jantunen LTY/Tietotekniikan osasto
13. Hyvä ohjelmointitapa (osa 1)
© Jukka Harju, Jukka Juslin
Funktion esittely eli prototyyppi tMyn1 Funktion esittely eli prototyyppi Funktion esittely (function declaration) kertoo funktion nimen, parametrien tyypit.
1 Kertaus koetta varten oleellisista asioista Jukka Juslin.
Johdatus ohjelmointiin Ohjelmistosuunnittelu Jaana Holvikivi.
Luokan määrittely class-määreellä tMyn1 Luokan määrittely class-määreellä Luokan määrittely tarkoittaa luokan tietojäsenten esittelyä ja jäsenfunktioiden.
GNU-ohjelmointityökalut Jussi Raunio TI09OHJ
String-vertailusta ja Scannerin käytöstä (1/2)
GNU-Ohjelmointityökalut. Tärkeimmät perustyökalut ovat: Kääntäjä (GCC) Asennusohjelma (MAKE) Virhejäljitin (GDB) GNU Binary Utilities (binutils) GNU C.
Metodit – Arvotyyppi Ellei metodi palauta arvoa, sen arvotyyppi on void Tällöin ”return;”-lauseke ei ole metodissa pakollinen, vaikka sen käyttö on sallittua.
Muuttujat ja vakiottMyn1 Muuttujat ja vakiot PHP-kielen syntaksi on lainattu suurimmaksi osaksi C- kielestä. PHP on erityisesti HTML-dokumenttien sisään.
4. Attribuutit 4.1. Sisällys Yleistä attribuuteista. Näkyvyys luokan sisällä ja ulkopuolelta. Attribuuttien arvojen käsittely aksessoreilla. 4.2.
5. Kapselointi Yleistä Kapseloinnilla (encapsulation) tarkoitetaan luokan tietojen ja toimintojen pakkaamista yhdeksi suojatuksi kokonaisuudeksi.
10. Abstrakti luokka Johdanto Abstrakti luokka (abstract class) poikkeaa konkreettisesta luokasta (ei-abstrakti luokka) siten, että siitä ei.
@ Leena Lahtinen OHJELMAN OSITTAMINEN LUOKKA ATTRIBUUTIT METODIT.
Hyvä ohjelmointitapa (osa 2) Yleistä Lisää hyviä ohjelmointikäytäntöjä: − Jaa pitkä koodi osiin. − Käytä attribuutteja säästeliäästi.
Ohjelmointitaito (ict1td002, 12 op) Kevät 2008 Raine Kauppinen
@ Leena Lahtinen Toistorakenne Ohjelmassa toistetaan tiettyjä toimenpiteitä monta kertaa peräkkäin Toisto noudattaa sille kuuluvia tarkkoja standardoituja.
Rinnakkaisuus Järjestelmässä, jossa voi olla useita prosesseja rinnakkain suorituksessa voi tulla tilanteita, joissa prosessien suoritusta täytyy kontrolloida.
FunktiottMyn1 Funktiot Funktiot voidaan jakaa –Kirjastofunktioihin, jotka ovat valmiina kaikkien käytössä. Erikoisempien kirjastofunktioiden käyttöönotto.
Vesa Ollikainen & Outi Grotenfelt
Visual Basic -ohjelmointi
11. Rajapinnat Sisällys Mitä rajapinnat ovat? Kuinka ne määritellään ja otetaan käyttöön? Moniperiytyminen rajapintojen avulla. Varoituksen.
Johdetun luokan olion alustus tMyn1 Johdetun luokan olion alustus määrätyillä arvoilla Kun ohjelmassa esiintyy johdetun luokan olion määrittely, järjestelmä.
15. Ohjelmoinnin tekniikkaa
Ohjausrakenteet Määräävät ohjelmakoodin suoritusjärjestyksen Ehtolause if – else on muotoa if (lauseke) lause1 else lause2 Jos lauseke on tosi, niin suoritetaan.
Muuttujan osoite int a=1; 0xbfffea64 /* tulostetaan a:n osoite*/ printf(“%p\n”, &a); 0xbfffea68 /* tulostetaan a:n osoite + 1*/ printf(“%p\n”, &a+1); /*
C-ohjelman käännösvaiheet
String-vertailusta ja Scannerin käytöstä (1/2)
5. Kapselointi.
7. Hyvä ohjelmointitapa..
3. Luokat, oliot ja metodit Java-kielessä (Lausekielinen ohjelmointi I ja II –kursseilla opitun kertausta.)
8. Näppäimistöltä lukeminen
14. Hyvä ohjelmointitapa.
13. Pakkaukset.
4. Attribuutit.
7. Hyvä ohjelmointitapa..
7. Näytölle tulostaminen
3. Attribuutit.
13. Pakkaukset.
4. Luokan testaus ja käyttö olion kautta
Esityksen transkriptio:

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

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

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. C-ohjelmointi Kevät 2006 Liisa Marttinen

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 C-ohjelmointi Kevät 2006 Liisa Marttinen

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  toiminnon käyttö Piilotetaan käyttäjältä tarkat ohjeet käyttämiseen C-ohjelmointi Kevät 2006 Liisa Marttinen

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 #include <stdio.h> C-ohjelmointi Kevät 2006 Liisa Marttinen

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 C-ohjelmointi Kevät 2006 Liisa Marttinen

Modulaarisuus funktioiden tasolla Entä kun funktioita on hyvin paljon ja niitä toteuttavat eri projektiryhmät ja useat ihmiset? 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ä main sub1 sub2 sub3 sub4 subsub1 subsub2 subsub2 Ohjelmoijan oma funktiokirjasto Standardikirjaston funktiot Modulaarisuus funktioiden tasolla C-ohjelmointi Kevät 2006 Liisa Marttinen

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ää C-ohjelmointi Kevät 2006 Liisa Marttinen

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 C-ohjelmointi Kevät 2006 Liisa Marttinen

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 C-ohjelmointi Kevät 2006 Liisa Marttinen

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. C-ohjelmointi Kevät 2006 Liisa Marttinen

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. C-ohjelmointi Kevät 2006 Liisa Marttinen

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 C-ohjelmointi Kevät 2006 Liisa Marttinen

Globaalit muuttujat Javassa ei ole globaaleja muuttujia! 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) C-ohjelmointi Kevät 2006 Liisa Marttinen

Käännösmoduulit mod2.h mod1.h mod3.h Funktioiden koodit Main-ohjelman koodi Moduulin funktioiden koodit Moduulin funktioiden koodit mod3.c mod2.c mod1.c C-ohjelmointi Kevät 2006 Liisa Marttinen

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 C-ohjelmointi Kevät 2006 Liisa Marttinen

Otsaketiedosto Sisältää: esikääntäjä liittää otsaketiedoston moduuliin Vastaa Javan rajapintaa (interface) Sisältää: funktioiden esittelyt (prototyypit) Makrot vakioiden määrittelyt (const) 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 Header files usually ONLY contain definitions of data types, function prototypes and C preprocessor commands. C-ohjelmointi Kevät 2006 Liisa Marttinen

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 => mod1.o gcc –c mod2.c => mod2.0 gcc –o ohjelma main.o mod1.o mod2.o linkittää objektitiedostot suoritettavaksi ohjelmaksi C-ohjelmointi Kevät 2006 Liisa Marttinen

/* 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”); ……….. } /* mod2.c */ #include <stdio.h> #include ”mod2.h” void mod2(void){ ………. puts(”moduuli kaksi”); ……….. } /*mod1.h */ void mod1(void); /*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ä. C-ohjelmointi Kevät 2006 Liisa Marttinen

makefile:n laatiminen Eräs skriptikieli, kuten mm -Job Control Languages Unix Shell QuakeC, AWK, perl, … # kommenttirivi gcc –c main.c gcc –c mod1.c gcc –c mod2.c gcc –o ohjelma main.o mod1.o mod2.o #makefile 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 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 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 C-ohjelmointi Kevät 2006 Liisa Marttinen

riippuvuusgraafit … Harjoitustyö .o main.o mod1.o mod2.o modz.o .c .h main.c mod1.h mod1.c mod2.h mod2.c modz.h modz.c C-ohjelmointi Kevät 2006 Liisa Marttinen

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

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

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

Osoitin parametrina x:n osoite, y:n osoite 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; } void swap(int *x, int *y) { int apu; apu=*x; *x=*y; *y= apu; } Kutsu: swap (&x, &y); kopioita x y 3 4 double product (const double block, int size); Varmistaa, ettei funktio muuta viiteparametrina saamaansa lohkoa C-ohjelmointi Kevät 2006 Liisa Marttinen

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

typedef double (*funcptr) (double ); void main (void) { 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); } typedef double (*funcptr) (double ); 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 C-ohjelmointi Kevät 2006 Liisa Marttinen

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 C-ohjelmointi Kevät 2006 Liisa Marttinen

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! C-ohjelmointi Kevät 2006 Liisa Marttinen