OHJ-1151 Ohjelmointi 2e

Koko: px
Aloita esitys sivulta:

Download "OHJ-1151 Ohjelmointi 2e"

Transkriptio

1 OHJ-1151 Ohjelmointi 2e Essi Lahtinen 2009 Kurssinjärjestelyt Kurssintavoitteet... 5 Käskytvs.tietojatieto-ohjattuohjelmointi... 6 ÑÒ-funktionparametrit ÑÒ-funktionpaluuarvo Funktioidenkuormittaminen Funktionoletusparametrit Rekursio Kertaus:Tietueet Ohjelmanjakaminentiedostoihin Abstraktiot Abstraktittietotyypit Sammakkoesimerkki Murtolukuesimerkki Luokat Luokanesittelyn ÔÖ Ú Ø -osa Luokanesittelyn ÔÙ-osa Jäsenfunktioidenmäärittely Toteutuksen"kätkeminen"luokansisällä Mistäabstraktittietotyypittulevat? Abstraktientietotyyppienhyödyt Rakentajanparametrit ØÖÙØinrakentajat Modulaarisuusjamoduulit TV-ohjelmatietokantaesimerkki Moduulit ModuulientoteuttaminenC++:lla Esittely-eli º-tiedostot Määrittely-eli º-tiedostot Mistämoduulittulevat? Modulaarisuudenhyödyt Automatisoitukäännös Ñ Ö Versionhallintaja Tietokoneenmuisti Ehdollinenosoittaminen Osoittimet Taulukotjaosoittimet Taulukotfunktionparametrina ÓÒ Øitonmonet! Osoittimet ØÖÙØ-ja -tietotyyppeihin Muuttujiennäkyvyysaluejaelinikä Dynaaminenmuistinhallinta Dynaamisettietorakenteet Dynaaminenpinotietorakenne-esimerkki Purkaja Virhetilanteetjaniidenkäsittely Poikkeukset ØÙØÒ Û-kirjasto Puhelinluettelolistana Muitadynaamisiatietorakenteita Tietorakenteenkopiointi:alustusjasijoitus STL(StandardTemplateLibrary) Iteraattorit STL:nsäiliöt Sarjat Assosiatiivisetsäiliöt Esimerkki:Harvataulukko Geneerisetalgoritmit Geneerisyys Geneerinenpino-esimerkki GeneerisyysC++:ssa Lisääohjelmointityylistä Lisääpoikkeuksista Ohjelmointikielistä Mitäsitten? Ohjelmistotekniikanpää-jasivuaineopinnot

2 OHJ-1151 Ohjelmointi 2e Kurssin järjestelyt 2009 Essi Lahtinen on koonnut tämän prujun usean eri lähdemateriaalin pohjalta. Jotta teksti ei turhaan sekavoituisi jatkuvista viittauksista lähteisiin, kaikki lähteet mainitaan tässä alussa. Suurin osa tekstistä on lainattu Ari-Pekka Suntioisen luentoprujuista Ohjelmointi I ja Ohjelmointi II. Lisäksi tekstilainauksia on Vespe Savikon, Mikko Tiusasen ja Heikki Virtasen Laajan ohjelmoinnin prujuista sekä Jyke Jokisen ja Matti Rintalan kirjoittamasta TTY:n Ohjelmistotekniikan laitoksen C++-tyylioppaasta. Osan tekstistä olen kirjoittanut itse. Suurin osa esimerkeistä on Essin itse kirjoittamia. Muutamia esimerkkejä on lainattu kirjasta Jan Skansholm: C++ From the Beginning, Apsin ja Vespen prujuista tai Terhi Kilamolta, Atri Vainikaiselta ja Pablo Virolaiselta. Kiitos kaikille ohjelmistotekniikanlaitoksen tyypeille, jotka ovat auttaneet prujun kokoamisessa. Erityiskiitokset hengelliselle johtajalleni Bitille sekä Anssille. Kurssin vastuuhenkilö Terhi Kilamo(terhi.kilamo@tut.fi, huone: TF206, puh ) vastaa kurssin sisällöstä, materiaalista, korvauksista ja luennoista Kurssivääpeli Teemu Erkkola(teemu.erkkola@tut.fi, huone: TE212, puh: ) vastaa kaikista kurssiin liittyvistä käytännönjärjestelyistä (harjoitusryhmät, harjoitustöihin liittyvät asiat, jne.). Lisäksi kurssin henkilökuntaan kuuluu yhdeksän mukavaa ja avuliasta assistenttia, jotka ohjaavat viikkoharjoituksia ja harjoitustöitä. Kurssin henkilökunnan vastaanottoajat löytyvät kurssin nettisivulta. Kurssin asioista tiedotetaan ensisijaisesti uutisryhmässä tut.ot.ohj2e, jota kannattaa seurata, jos haluaa tietää, mistä puhutaan. Kurssin kotisivulla ohj2e/ on pääasiassa vain kurssin keston ajan muuttumatonta tietoa. Kotisivu kannattaa lukea perusteellisesti läpi, jos haluaa välttää höynäytetyksi tulemisen. OHJ-1151 Ohjelmointi 2e Kurssin suorittaminen Kurssi muodostuu seuraavista osista: Luennot(4. periodilla 4 h/vk ja 5. periodilla 4-0 h/vk) Harjoitukset(4. ja 5. periodeilla 2 h/vk) Palautustehtävät(5 kpl, joista 4 pakollisia), henkilökohtaisia Vaiheittain tehtävä harjoitustyö(sisältää välipalautuksen, 4 vaihetta ja lopullisen palautuksen sekä loppudokumentin), henkilökohtainen ja pakollinen Tentti, pakollinen Luentojaon36hjaharjoituksia22h,mikäonyhteensä58h.Kurssista saa5op,jokamerkitseen.133htyötä. Muihinhommiinmenee enemmän aikaa kuin Ohjelmointi 1e:ssä! Ohjelmoimaan oppii vain ohjelmoimalla. OHJ-1151 Ohjelmointi 2e Kurssin arvostelu Kurssin arvosana määräytyy kokonaispistemäärän(= suorituspisteet + bonuspisteet) perusteella. Suorituspisteitä saa tentistä(n. 30) ja harjoitustyöstä(6). Bonuspisteitä voi saada harjoituksista(yht. 3). Suoristuspisteet vaikuttavat arvosanarajojen määräytymiseen. Bonuspisteillä voi korottaa saamaansa arvosanaa korkeintaan yhdellä.(hylättyä suoritusta ei voi korottaa.)

3 Ç Ú Ø Ó ß ÒÙÑ Ä Ê Ç Ì Ä ÀÁ Á Á ÁÄ ÁÆ ÃË Ã Ã Å Å Å ÅÁ ÅÆ ÅÇ ÅË ÅÌ Æ Æ Æ ÆÀ ÆÂ ÆÅ ÆÎ Æ Ä ÇÃ ÇÊ È ÊÁ Ë Ë ÌÆ Ì ÍÌ Î ÎÌ Ï ÏÁ ÏÎ Ï ÇÀ ÅÝ ÑÑ Ò Ñ Ó Ñ ÙÒ Ø Ó Ó ÑÙÙØØ Ó Ú Ø Ó ÓÓÒ Ò Ñ º Ó Ú Ø ÓÆ Ñ Ç Ú Ø Ó Ó Ú µ ß ØÖ Ò Ó Ú µ ß Û Ø Ã Ä Ñ ¾ Ö Ú ÔÓ Ø ØØÙ ØÒ ØÑ ÏÎ Ï Ø Î ÖÒ Ï ÏÝÓÑ Ò ÙØ OHJ-1151 Ohjelmointi 2e Materiaali Kurssin pruju myydään TiTe-killan kautta. Pruju on tarkoitettu luentojen tueksi, ei itseopiskeluun, ja sen rinnalle on hyvä hankkia jokin C++-opus. Tällaiseksi sopii esimerkiksi: Walter Savitch: Problem Solving with C++, The Object of Programming tai Jan Skansholm: C++ From the Beginning Epätoivoisesti englanninkieltä pelkäävät voivat kokeilla esim. hiukan kevyempää: Päivi Hietanen: C++ ja olio-ohjelmointi C++-perusteos, järeää luettavaa unettomille ja kielestä enemmän kiinnostuneille, enemmän referenssi, kuin oppikirja Bjarne Stroustrup: The C++-programming language (saatavana myös suomenkielisenä) OHJ-1151 Ohjelmointi 2e Kurssin tavoitteet Tavoitteena on saavuttaa kyky soveltaa seuraavien osa-alueiden osaamista käytännön ongelmiin: tiedon abstraktio ja abstraktit tietotyypit modulaarisuus ja moduulit dynaamiset perustietorakenteet(taulukko, lista) olennaisimmat työkaluohjelmat Kurssilla hankitaan hyvä tuntuma koodin kirjoittamiseen ja C++-kieleen. Jatkokursseilla voidaan keskittyä olennaisempaan. Kurssi ei ole teoriapainotteinen, vaan se antaa opiskelijalle käytännön perustaidot pienten ohjelmien suunnitteluun ja kirjoittamiseen C++-kielellä. Ammattiohjelmoijia ei kurssilla synny, mutta kurssi antaa hyvät lähtökohdat ohjelmistotekniikan opiskeluun syvällisemmin. OHJ-1151 Ohjelmointi 2e Käskyt tieto OHJ-1151 Ohjelmointi 2e Ajatellaan aluksi funktiota, jossa ei ole hyödynnetty tieto-ohjatun ohjelmoinnin filosofiaa: Tietokoneohjelmat koostuvat tiedosta ja sillä operoivista toimenpiteistä eli käskyistä Todellisuudessa jako ei ole noin selvärajainen, vaan joissain tilanteissa tieto voi korvata osan käskyistä tai päinvastoin. Tätä käytetään hyväksi nk. tieto-ohjatussa suunnittelussa ja ohjelmoinnissa(data-driven/data-directed design/programming). Tieto-ohjatun ohjelmoinnin idea on suunnitella ja toteuttaa ohjelmaan tietorakenteita, joiden avulla tietoa käsittelevien käskyjen määrä saadaan pienemmäksi. Korvataan käskyjä tiedolla. Tämä kaikki on helpompi ymmärtää muutaman esimerkin avulla. Î ÖÒ Ò Ó Ú Ø Ó ÓÓ

4 Ç Ú Ø ÓÁÒ Ó ß ØÖÙØ ÓÓ Ç Ú Ø Ó Ç Ú Ø ÓÁÒ Ó ÁÆ Ç ß ÓÒ Ø Ã ß Ä Ñ ß Ö Ú ÔÓ Ø ØØÙ ØÒ ØÑ ÏÎ Ï Ø Î ÖÒ ß Ï ÏÝÓÑ Ò ß ÅÇÆÌ ÃÇ Þ Ó ÁÆ Ç µ» Þ Ó Ç Ú Ø ÓÁÒ Ó µ ÓÒ Ø Ó Ú Ø ÓÆ Ñ Ç Ú Ø Ó Ó Ú µ ß ØÖ Ò ¼ ÅÇÆÌ ÃÇ µ ß ÓÖ ÁÆ Ç º ÓÓ Ó Ú µ ß ÁÆ Ç ºÒ Ñ Î ÖÒ Ò Ó Ú Ø Ó ÓÓ º»ÖÓ ÒØÖ ÁÒØÒ ÒÝ ÔÖÓ Á º»ÖÓ ÔØ Ú Ê Ó Ë ÑÔ Ò ÕÙ ÔÑ ÔÖÓ ÊË ÑÒ Ö Ö Ö Ú µ ß OHJ-1151 Ohjelmointi 2e Sama ohjelman osa tieto-ohjatun ohjelmoinin periaatteella: ÒÙÑ Ç Ú Ø Ó ß Ñ Ù Ò Ò Ñ ØÖ Ò OHJ-1151 Ohjelmointi 2e Näiden kahden esimerkin ero on selvä: kun nähtiin hiukan vaivaa sopivan tietorakenteen suunnitelussa ja alustamisessa, niin varsinainen Ó Ú Ø ÓÆ Ñ -funktiosupistuiminimaaliseksi. Jos tietorakenne on sopivasti/hyvin suunniteltu, siitä koituva hyöty voi moninkertaistuauudelleenkäytettävyytenä(esim. Ò Ñ Ç Ú Ø Ó funktio). Toteutustekniikkana on aina(tavalla tai toisella) etukäteen prosessoitu informaatio, joka muodostuu lähtöarvoista ja niistä seuraavasta lopputuloksesta. Tieto-ohjatun ohjelmoinnin hyötyjä ovat: 1. Syntyvät ohjelmat ovat yleensä lyhyempiä, mutta niiden selkeys ei silti kärsi. 2. Virheiden mahdollisuus pienenee. 3. Ohjelmien laajennettavuus ja ylläpidettävyys on helpompaa. Varma merkki tieto-ohjatun uudelleensuunnittelun tarpeesta ohjelmassaonliianpitkäksikasvava -tai Û Ø -rakenne. OHJ-1151 Ohjelmointi 2e Harjoitus Kirjoita Ò Ñ Ç Ú Ø Ó -funktioedelliseenesimerkkiin. OHJ-1151 Ohjelmointi 2e ÑÒ-funktionparametrit Ajatellaanohjelmaa ÖÓ,jollevoitaisiinkäynnistysvaiheessasyöttää komentoriviltä sanoja, joiden alkukirjaimista se muodostaisi akronyymin: ÔÖÓ KomentorivillälueteltutietosaadaanC++:ssaohjelmankäyttöön ÑÒfunktiolle sopivasti määriteltyjen parametrien välityksellä: Parametri Ö kertookomentorivilläannettujensanojenmäärän(ohjelmannimimukaanlukien).parametri Ö Úontaulukko,jonkaalkiot sisältävät osoittimia komentorivillä annettuihin sanoihin.

5 Ó ØÖÑ ÒÙ Ø ÒÙ ØÖ Ò ÒÙ Ò Ñ Ô Ø Ù Ò ÑÒ Ö Ö Ö Ú µ ß Ö ½ µ ß ÂÓ ÓÑÓÖ Ú ÑÙÙØ Ù Ò Ó Ñ Ò Ò Ñ Ë ÑÙ Ø ½ Ø Ó Ó Ñ Ò Ò Ñ Ø º ½ Ö µ ß ÓÖ Ò Ù Ø ØÒ ¹Ñ ÖÓÒÓ Ö Ú Ò Ö Ú µ ØÖ Ò Ò ÓÙØ ÁÌ ËÍ ËË º» ÙÑÑ ÔÖÓ ÓÒ º ËÙÑÑ OHJ-1151 Ohjelmointi 2e Alkiossa Ö Ú ¼ onohjelmannimi. Ö Ú:nosoittamatalkiotovatC-kielestäperiytyväämerkkijonotyyppiä (Ö ),eivät ØÖ Ò -tyyppiä. Josjakunohjelmoijahaluaakäsitellä Ö Ú:nalkiota ØÖ Ò -tyyppisinä,tyyppimuunnosonohjelmoijanvastuulla. Esimerkiksi tilanteessa: OHJ-1151 Ohjelmointi 2e Akronyymiohjelman toteutus näyttää seuravalta: º»ÖÓ ÒØÖ ÁÒØÒ ÒÝ ÔÖÓ ÑÒ:inmuodollisissaparametreissaonarvot: Ö :ssäsanojenmäärä4 Ö Úsisältäämerkkijonot: argv ÓÙØ Ò º Ø ¼ µ ÌÙÓ Ø ØÒ Ò Ò Ò ÑÑ Ò Ò Ö Ò º»ÖÓ ÒØÖ ÁÒØÒ ÒÝ OHJ-1151 Ohjelmointi 2e Perinteisesti ÑÒ:inmuodollisiaparametrejakutsutaan Ö :ksija Ö Ú:ksi, muttatodellisuudessanimetvoivatollamitätahansa,kunhanniiden järjestysjatyypitovatoikein(ja Ö ). Kerrataanvielä,että ÑÒ:inargumentitovatC-merkkijonoja. Josniiden sisältämää informaatiota tarvitaan ohjelmassa jonkin muun tyyppisenä( ØÖ Ò,, ÓÙjne.)ontyyppimuunnosohjelmoijanvastuulla. Lopuksi vielä yksityiskohta, jolla ei varsinaisesti ole mitään tekemistä C++:n kanssa, mutta siihen törmää usein käytännön tilanteissa. Jos UNIX-komentotulkille syöttää käskyn: OHJ-1151 Ohjelmointi 2e Harjoitus Kirjoita ohjelma, joka laskee yhteen komentoriviparametreina saamansa numerot. ÔÖÓ ÔÖÓ º» Ø ÝÝ Ó ØÓÒ ÄÓ Ò niin ÑÒ-funktiosaa Ö Ú:ssäneljäsanaa. Jos halutaan, että Los Angeles tulkitaan yhdeksi sanaksi, se on kirjoitettava lainausmerkkien sisään: ÔÖÓ º» Ø ÝÝ Ó ØÓÒ ÄÓ Ò Lyhenteitäilmaisuistaargumentcountjaargumentvector.

6 OHJ-1151 Ohjelmointi 2e ÑÒ-funktionpaluuarvo OHJ-1151 Ohjelmointi 2e Useissakomentotulkeissaonmuuttuja, jonkaarvoononviimeisimmänsuoritetunkomennon ÑÒ-funktionpaluuarvo(statustaiexitstatus): C++:ssa ÑÒ-funktionpaluuarvontyyppion : ÔÖÓ º»ÖÓ Æ Û Å Ü Ó ÆÅ ÑÒ ÑÒ:insuorituksenpitääsiisainapäättyäkäskyyn Ù, jokamäärää,minkäarvon ÑÒpalauttaa. Normaalisti paluuarvo evaluoituu funktiokutsun arvoksi, mutta koska ÑÒ:iakutsutaanautomaattisesti,niinminnesenpaluuarvopäätyy? ÑÒ:inpaluuarvovälitetääntavallataitoisellaohjelmankäynnistäneelle ympäristölle. Esimerkiksi UNIX-järjestelmissä paluuarvo päätyy käyttäjän komentotulkille, joka voi sitten hyödyntää paluuarvoa, tai olla hyödyntämättä. ¼ Paluuarvoon0,koska ÁÌ ËÍ ËËon Ø -kirjastossamääritelty jotenkinseuraavasti: ÓÒ Ø ÁÌ ËÍ ËË ¼ Vastaavasti ÁÌ ÁÄÍÊ onmääriteltyjoksikinnollastapoikkeavaksi arvoksi. Tämä käytäntö johtuu siitä, että UNIX-järjestelmä tulkitsee ohjelman paluuarvon 0 onnistumiseksi ja kaikki muut arvot ilmaisevat, että ohjelman suorituksessa meni jotain pieleen(ohjelma päättyi virhetilanteeseen). ÔÖÓ Ó Onsyytäkorostaa,ettäkyseessäonkomentotulkinmuuttuja,jollaeiolemitään tekemistä C++-ohjelman muuttujien kanssa. OHJ-1151 Ohjelmointi 2e ÑÒ:inpaluuarvoonsiistapapalauttaatietoaajonaikaiselleympäristölle. Usein ohjelma voi joutua erilaisiin virhetilanteisiin, jotka aiheuttavan sen suorituksen päättymisen. Jokaiselle virheelle voi antaa oman kokonaislukukoodinsa,jonka ÑÒvoisittenvirhetilanteessapalauttaa. Komentotulkki on ohjelmointikieli itsessään ja voi sisältää mm. oikosulkevat -ja ²²-operaattorit,jotkatoimivatyhteen ÑÒ:inpaluuarvojen kanssa: Ø ºØÜØtulostetaannäytöllevain,josseonolemassa(Ø Ø Tiedosto ¹ palauttaanollanvain,jossenparametritiedostoonolemassa): ÔÖÓ Ø Ø ¹ Ø ºØÜØ ²² Ø Ø ºØÜØ Tulostetaanilmoitus"Eitiedostoa"vain,jos Ø Ø ¹ epäonnistuu(paluuarvo on nollasta poikkeava, jos parametritiedosto ei ole olemassa): ÔÖÓ Ø Ø ¹ Ø ºØÜØ Ó Ø Ó ØÓ OHJ-1151 Ohjelmointi 2e Funktioiden kuormittaminen Funktion kuormittamisella(overloading) tarkoitetaan sitä, että ohjelmassa voi olla useita samannimisiä funktioita, kunhan niiden parametrit ovat määrältään ja/tai tyypiltään erilaisia. Kun ohjelmassa kutsutaan funktiota, joka on kuormitettu, kääntäjä tutkii kutsun todellisten parametrien määrän ja tyypit ja valitsee niiden pohjalta kutsuttavan funktion oikean version. Funtioiden kuormittaminen on hyvä työkalu, jos on tarve suorittaa loogisesti sama operaatio erityyppisille lähtötiedoille. Ajatellaanesimerkkinäoperaatiota Ñ Ü,jollaontarkoitusselvittääjonkin alkiojoukon suurin alkio. Suunniteluvaiheessa on havaittu, että välillä täytyy selvittää, mikä on kahdesta kokonaisluvusta suurin, ja välillä, mikä on kokonaislukutaulukon suurin alkio. Molemmat ovat loogisesti suurimman alkion valitsemista, mutta ne valitsevat alkion erityyppisistä lähtötiedoista.

7 Ó ØÖÑ ÒÙ Ø ÒÙ Ñ ÜÃ Ø Ù Ù½ Ù Ù¾ µ Ñ ÜÌ ÙÙ Ó Ø Ø ÙÙÓ ÑÖ µ ÑÒ µ ß ½ ½¼¼¼ ¾ ½¼¼½ ËÙÙÖ Ò ÙÚÙ Ø ½ ¾ ÓÒ ÓÙØ Ñ ÜÃ Ø ½ ¾µ Ò Ø ÙÙ ß ¾¼ ½¼¼½ ¾½ Ó Ó Þ Ó Ø ÙÙµ» Þ Ó µ Ì ÙÙ ÓÒ ÙÙÖ Ò Ó ÓÒ ÓÙØ Ñ ÜÌ ÙÙ Ó Ø Ø ÙÙ Ó Ó µ Ò ÙÒ Ø Ó Ò Ñ ÜÃ Ø Ñ ÜÌ ÙÙ Ó Ø ÑÖ ØØ ÝØ ØÙ Ú Ø Ø Ò Ñ Ü Ù Ù½ Ù Ù¾ µ ß Ù Ù½ Ù Ù¾ µ ß Ù Ù½ Ñ Ü Ø ÙÙÓ ÑÖ µ ß ÙÙÖ Ò ÁÆÌ ÅÁÆ ¼ ÑÖ µ ß ÓÖ ÙÙÖ Ò Ø ÙÙÓ µ ß ÙÙÖ Ò Ø ÙÙÓ ÙÙÖ Ò Ñ Ü Ù Ù½ Ù Ù¾ µ ÙÒ Ò Ñ Ü Ù Ù½ Ù Ù¾ µ ÎÁÊÀ Ó ØÖÑ ÒÙ Ø ÒÙ Ñ Ü Ù Ù½ Ù Ù¾ µ Ñ Ü Ø ÙÙÓ ÑÖ µ ÑÒ µ ß ½ ½¼¼¼ ¾ ½¼¼½ Ñ Ü ½ ¾ µ Ò Ø ÙÙ ß ¾¼ ½¼¼½ ¾½ Ó Ó Þ Ó Ø ÙÙµ» Þ Ó µ Ì ÙÙ ÓÒ ÙÙÖ Ò Ó ÓÒ Ñ Ü Ø ÙÙ Ó Ó µ Ò ÓÙØ OHJ-1151 Ohjelmointi 2e Jos kieli ei tukisi funktioiden kuormittamista, pitäisi määritellä kaksi erinimistä funktiota ja kutsua niitä oikeissa paikoissa: OHJ-1151 Ohjelmointi 2e Kuormitus mahdollistaa saman elegantimmin: Ù Ò Ò Ñ Ô Ø Ù Ò Ò Ñ Ô Ø ÓÙØ ËÙÙÖ Ò ÙÚÙ Ø ½ ¾ ÓÒ ÁÌ ËÍ ËË ÁÌ ËÍ ËË Molemmatfunktiotovatnytnimeltään Ñ Ü,muttaparametrientyypeissä on eroja. OHJ-1151 Ohjelmointi 2e Funktioiden toteutus on aivan normaali, vaikka niillä sattuu olemaan samat nimet: OHJ-1151 Ohjelmointi 2e Funktion oletusparametrit ß Ù Ù¾ Osa tai kaikki funktion parametrit voivat olla oletusparametreja(default arguments). Jos ohjelmoija ei funktiota kutsuessaan anna kaikkia todellisia parametreja, C++ käyttää puuttuville parametreille automaattisesti oletusarvoja. Tutkitaan esimerkki: Tekstitiedostoon voi tallentaa tietoja useista eri henkilöistä siten, että yhden henkilön tiedot ovat yhdellä rivillä jollakin erotinmerkeillä toisistaan eroteltuina, esimerkiksi näin: Eri paluuarvon tyyppi ei tee esittelyltään muuten identtisistä funktioista kuormitettuja. Seuraava yritys tuottaa käännösvirheen: ÌÑÙ Ì ÖÌ Ì½¾ Ì ÖÙ ¾¼ ÌÖ Halutaantehdäfunktio ÒØØ,jollevoidaanantaaparametrinamerkkijono, ja joka erottelee merkkijonon sisältämät kentät toisistaan. Näin saadaan Teemun tiedoista helposti selville, mikä hänen opiskelijanumeronsa on, kun tiedetään, että opiskelijanumero on kolmannessa kentässä.

8 Ó ØÖÑ ÒÙ Ø ÒÙ ØÖÑ ÒÙ Ò Ñ Ô Ø Ù Ò ÑÒ µ ß ØÑÙ ÌÑÙ Ì ÖÃÓÒ½¾ Ì ÖÙ ¾¼ ÌÖ ØÖ Ò ÌÑÙÒ Ó ÓÒ Ñ ÒØØ ØÑÙ µ Ò ÓÙØ ÌÑÙÒ ÓÔÒÖÓ ÒØØ ØÑÙ µ Ò ÓÙØ ØÓÒ Ó ÓÒ Ñ ÒØØ ØÓ ½ ³ س µ Ò ÓÙØ ØÓÒ ÓÔÒÖÓ ÒØØ ØÓ ³ س µ Ò ÓÙØ ÒØØ ØÖ Ò Ø ÓØ ÙÒ Ò ÒÖ Ö ÖÓØ Ò µ ß ØÖ Ò Ø ØØÝ ØÖ Ò ØØÓÚ ÖØ Ø ÓØ µ ØÖ Ò ØÖÑ ÙÒ Ò ¼ ÒÖ µ ß ÓÖ Ø ØØÝ OHJ-1151 Ohjelmointi 2e OHJ-1151 Ohjelmointi 2e On melko yleistä, että tiedostoissa, joihin on talletettu useita tietoja samalle riville, käytetään erotinmerkkinä kaksoispistettä. Lisäksi on varmaan melko yleistä, että halutaan etsiä rivin ensimmäinen kenttä. Ongelmaa voisi lähestyä kuormittamalla. Määriteltäisiin funktiosta ÒØØneljäeriversiota: haetaan n:ttä kenttää, erotinmerkkinä kaksoispiste haetaan n:ttä kenttää, erotinmerkkinä mikä vain merkki haetaan ensimmäistä kenttää, erotinmerkkinä kaksoispiste haetaan ensimmäistä kenttää, erotinmerkkinä mikä vain merkki Kuormittaminen ei kuitenkaan ole tässä tilanteessa hyvä ratkaisu, koska se johtaisi useaan algoritmiltaan identtiseen funktioon. Toteutetaan ÒØØ -funktiooletusparametrejakäyttäen. ØÖ Ò ÒØØ ØÖ Ò Ø ÓØ ÙÒ Ò ÒÖ ½ Ö ÖÓØ Ò ³ ³ µ ØÖ Ò ØÓ ØÓ Ë ÑÙÙØ Ó ØÌ ØØ ØÁÒ ÒÖÙ ¾¼ ÌÖ ÁÌ ËÍ ËË Ø Ò ØØÓÚ ÖØ Ø ØØÝ ÖÓØ Ò µ OHJ-1151 Ohjelmointi 2e Oletusparametrien arvot voi kertoa vaikkapa funktion esittelyssä kirjoittamallaparametrinnimenperään" "jaoletusarvon. Esimerkinfunktiolla ÒØØ onkolmeparametria,muttakutsuttaessa ei välttämättä tarvitse antaa kuin yksi. Jos kutsussa ei ole ÒÖ:ää ja ÖÓØ Òtavastaaviatodellisiaparametreja,niidentilallakäytetään funktion esittelyssä kerrottuja oletusarvoja(1 ja : ). Oletusarvoja voi antaa vain loppupään parametreille. Funktiota kutsuttaessa oletusarvoa voi käyttää vain viimeisille parametreille, eli jos erotinmerkki annetaan, täytyy myös kentän numero antaa. Tarvittaessa kaikilla parametreilla voi olla oletusarvo, jolloin funktiota voi kutsua kokonaan ilman parametreja. Oletusparametri voi olla myös lauseke. Se evaluoidaan uudelleen joka funktiokutsussa(mikäli oletusparametria tarvitaan). Kuormittaminen ja oletusparametrit ovat usein keskenään vaihtoehtoisia. Kannattaa harkita tarkkaan kumpi niistä soveltuu tilanteeseen paremmin. Kuormitus ja oletusparametrit voivat olla käytössä myös yhtä aikaa. OHJ-1151 Ohjelmointi 2e Harjoitus Halutaan tehdä funktioita, joiden avulla ohjelmoijan on helppo tulostaa erilaiset virheilmoitukset, joita syötetiedostojen lukemisessa saattaa tapahtua. Ainakin seuraavat virheilmoitustekstit ovat tarpeen: Î Ö Ø Ó ØÓÒ Ø Ó ØÓÒ Ñ Ö Ú Ö Ú ÒÖÓ º Î ÖÒ Ò Ñ Ö Ñ Ö Ø Ó ØÓ Ø Ó ØÓÒÒ Ñº Ì Ó ØÓ Ø Ó ØÓÒ Ñ ÚÓ Ú Ø º Suunnittele funktiot virheilmoitusten tulostamiseen.

9 Ó ØÖÑ ÒÙ Ø ÒÙ Ò Ñ Ô Ø Ù Ò ÑÒ µ ß ÖØÓÑ µ Ò ÓÙØ ÁÌ ËÍ ËË ÖØÓÑ µ Ò ÓÙØ ÁÌ ËÍ ËË OHJ-1151 Ohjelmointi 2e Rekursio Rekursio tarkoittaa jonkin asian määrittelemistä itsensä avulla. Esimerkiksi matematiikasta tuttu luonnollisen luvun kertoma: n! = n (n 1) (n 2) kunlisäksionmäärätty,että 0! = 1. Nollaa suuremman n:n kertoma on siis n:n ja kaikkien sitä pienempien positiivisten kokonaislukujen tulo. Esimerkiksi 5! = = 120. Kertoma voidaan määritellä myös rekursiivisesti: { 1 mikäli non 0 n! = n (n 1)! mikäli n > 0 OHJ-1151 Ohjelmointi 2e Soveltamalla rekursiivista määritelmää 5!:n laskemiseksi saadaan: 5! = 5 4! = 5 4 3! = ! = ! = ! = = 120 Rekursion idea on pyrkiä esittämään ongelman ratkaisu alkuperäisen ongelman kanssa samanmuotoisina, mutta ratkaisultaan yksinkertaisempina osaongelmina. Saatuihin osaongelmiin voidaan sitten soveltaa rekursiivista sääntöä uudelleen, kunnes lopulta päädytään niin yksinkertaiseen tapaukseen, että sen ratkaisu nähdään suoraan. Rekursion päämäärä on: hajoita ja hallitse. OHJ-1151 Ohjelmointi 2e Rekursio ohjelmoinnissa OHJ-1151 Ohjelmointi 2e Oletetaan,että ÖØÓÑ -funktiotakutsutaannäin: Kun puhutaan rekursiosta ohjelmoinnin yhteydessä, niin yleensä aihe liittyy funkioihin. Rekursiivinen funktio on määritelty itsensä avulla. Se kutsuu itseään. Toteutetaan edellä esitelty kertoman laskeminen rekursiivisella C++funktiolla: ÙÒ Ò ÖØÓÑ ÙÒ Ò Ò µ ß Ò ¼ µ ß ja tutkitaan vaihe-vaiheelta, kuinka suoritus etenee. Kun ÑÒ:insuoritussaavuttaakohdan,jossa ÖØÓÑ -funktiotakutsutaan, niin havainnollistetaan tilannetta seuraavasti: ½ ß Ò ÖØÓÑ Ò ¹ ½ µ ÑÒ Periaatteessa funktion voi kirjoittaa suoraan kertoman rekursiivisen määritelmän pohjalta(s. 28), mutta hyödyllisempää olisi ymmärtää, miksi funktio toimii ja vieläpä oikein.

10 Ò ¼ µ ß ½ ß Ò ÖØÓÑ Ò ¹ ½ µ Ò ¼ µ ß ½ ß Ò ÖØÓÑ Ò ¹ ½ µ Ò ¼ µ ß ½ ß Ò ÖØÓÑ Ò ¹ ½ µ OHJ-1151 Ohjelmointi 2e Pääohjelmanfunktiokutsunseurauksenapäädytäänsuorittamaan ÖØÓÑ funktion runkoa: OHJ-1151 Ohjelmointi 2e Itse asiassa suoritus etenee tällä rekursiokierroksella täysin samoin kuin edelliselläkin, paitsi että muodollisen parametrin Ò arvo on nyt 4: ÑÒ ÑÒ ÖØÓÑ ÖØÓÑ ÖØÓÑ Ò Ò Koska Ò:narvoon5,suoritetaan -haarajapäädytääntekemään rekursiivinen kutsu todellisen parametrin arvolla 4. Kuvassapeitettynäoleva ÑÒ-laatikkokuvaasitä,että ÑÒ-funktion suoritusonkesken. Vastakunsenpeittävä ÖØÓÑ -funktiosuorittaa -käskyn,jatkuu ÑÒ:insuoritussiitäkohdasta,jossa ÖØÓÑ akutsuttiin. Suoritusajautuusiis -haaraanjarekursioeteneeainavainsyvemmälle. Huomaa,kuinkataustallealkaakertyämyöskeskeneräisiä ÖØÓÑ funktion suorituksia. OHJ-1151 Ohjelmointi 2e Näin ohjelma etenee, kunnes lopulta saavutaan tilanteeseen, jossa parametrin Òarvoon0: ÑÒ ÖØÓÑ ja keskeneräisten funktiokutsujen suma alkaa purkautua. ÖØÓÑ ÖØÓÑ ÖØÓÑ ÖØÓÑ ÖØÓÑ Ò ¼ Enääeitapahdurekursiivistakutsua,vaan ÖØÓÑ palauttaaarvon1

11 Ò ¼ µ ß ½ ß Ò ÖØÓÑ Ò ¹ ½ µ ÔÙØØ ¾ ½ Ò ¼ µ ß ½ Ò ¼ µ ß ½ ß Ò ÖØÓÑ Ò ¹ ½ µ ÔÙØØ ½ ½ ß Ò ÖØÓÑ Ò ¹ ½µ ÔÙØØ ¾ ÖØÓÑ µ Ò ÓÙØ ÁÌ ËÍ ËË OHJ-1151 Ohjelmointi 2e Toiseksiviimeiselle ÖØÓÑ :nkutsullepalautuusiisviimeiseltärekursiiviselta kutsulta arvo 1, joka kerrotaan muodollisen parametrin Ò arvolla1: ÑÒ ÖØÓÑ ÖØÓÑ ÖØÓÑ ÖØÓÑ ÖØÓÑ Ò ½ OHJ-1151 Ohjelmointi 2e Edellinenkeskeneräinen ÖØÓÑ -funktiojatkuusamaantapaan: OHJ-1151 Ohjelmointi 2e Suorituseteneejasaavuttaalopultaylimmän ÖØÓÑ -funktion: ÑÒ ÑÒ ÖØÓÑ ÖØÓÑ ÖØÓÑ Ò ÖØÓÑ ÖØÓÑ ¾ Ò Joka palauttaa pääohjelmalle 5:n kertoman arvon: ÑÒ Huomaa, että jokaisella funktiolla on oma parametrimuuttuja Ò, jonka arvo on säilynyt ennallaan, kun rekursiivisen funktion kutsusta palataan takaisin suorittamaan kutsuneen funktion runkoa. Sama pätee kaikkiin paikallisiin muuttujiin. ØÙÓ ØÙÙ ½¾¼

12 OHJ-1151 Ohjelmointi 2e Rekursiossa ei ole ohjelmointikielen kannalta mitään erikoista. Rekursiiviset funktiot ovat funktioita siinä missä kaikki muutkin funktiot. Rekursion vaikeaselkoisuus piilee siinä, että se vaatii ohjelmoijalta eiluontaista tapaa hahmottaa ongelma ja sen ratkaisu. Rekursiivisten funktioiden suunnittelua ja ymmärtämistä helpottaa, kun pitää mielessään että: Funktio on rekursiivinen, jos se kutsuu itseään(suoraan tai epäsuoraan). Suorituksen kuluessa rekursiivisesta funktiosta on"käynnissä" yhtä monta instanssia, kuin mikä on keskeneräisten rekursiivisten kutsujen lukumäärä. Jokaisella instanssilla on omat arvonsa muodollisille parametreille ja paikallisille muuttujille. OHJ-1151 Ohjelmointi 2e Rekursiivisella funktiolla on kaksi olennaista ominaisuutta, jotka on syytä muistaa: 1. Sillä on oltava lopetusehto(tai ehtoja), joka tunnistaa ongelman triviaalitapaukset ja reagoi niihin ilman uuden rekursiivisen kutsun tarvetta. 2. Jokaisen rekursiivisen kutsun on yksinkertaistettava ratkaistavaa ongelmaa niin, että lopulta päädytään triviaalitapaukseen. Esimerkin ÖØÓÑ -funktiossanäitäkohtiaedustivat: 1. -rakenteenehto Ò ¼ triviaalitapausonnollankertoma:sen arvo tiedetään suoraan. 2. Jokaisella rekursiokierroksella selvitettiin yhtä pienemmän luvun kertomaa: kutsuparametri pieneni yhdellä. Jos jomman kumman unohtaa, niin funktiota kutsuttaessa koko ohjelma kaatuu(unixissa core dump). Tämä johtuu siitä, että funktio päätyy kutsumaan itseään loputtomiin (päättymätönrekursio) aiempienkutsukertojenmuuttujat kuluttavat muistia, kunnes se yksinkertaisesti loppuu. Jamuuaiempiinrekursiokierroksiinliittyväinformaatio. OHJ-1151 Ohjelmointi 2e OHJ-1151 Ohjelmointi 2e Rekursiolla saa aikaan toistoa. Periaatteessa mikä tahansa toistorakenne(silmukka) voidaan korvata rekursiolla. Parhaiten rekursio sopii kuitenkin sellaisten ongelmien ratkaisuun, jotka ovat luonteeltaan rekursiivisia. Niitä voidaan"luonnollisesti" yksinkertaistaa siten, että jäljelle jäävät osaongelmat ovat alkuperäisen ongelman yksinkertaistettuja tapauksia. Harjoitus Kirjoita ÖØÓÑ -funktiokäyttäenjotainsilmukkarakennettarekursionsijaan. Yleensä rekursiivinen ratkaisu on lyhyempi ja siistimpi kuin vastaava silmukkarakenteella toteutettu ratkaisu. Toisaalta, yleensä rekursiivinen ratkaisu on hitaampi ja kuluttaa enemmän muistia kuin silmukkarakenne.

13 ÒØ ÖØÓÑ ÙÒ Ò ØÙÓ ÙÒ Ò Ò µ ß ÙÒ Ò Ò ¼ µ ß ØÙÓ ß OHJ-1151 Ohjelmointi 2e OHJ-1151 Ohjelmointi 2e Harjoitus Harjoitus Kirjoita iteratiivinen ja rekursiivinen versio funktiosta, joka laskee potenssilaskun x y. Kirjoita iteratiivinen ja rekursiivinen versio funktiosta, joka etsii, löytyykö merkkijonosta tiettyä merkkiä. OHJ-1151 Ohjelmointi 2e Rekursiiviset funktiot voidaan ominaisuuksiensa perusteella jaotella ryhmiin, jotka kannattaa yleissivistyksen nimissä katsoa läpi. Suoraksi rekursioksi kutsutaan tapausta, jossa funktio kutsuu itseään omassa rungossaan. Esimerkin ÖØÓÑ onsuoraanrekursiivinen. Epäsuora rekursio eli rinnakkaisrekursio tarkoittaa tilannetta, jossa funktio ÙÒ kutsuufunktiota ÙÒ,jokataaskutsuu ÙÒ :tajne: OHJ-1151 Ohjelmointi 2e Häntärekursioksi(tail recursion) kutsutaan tapausta, jossa rekursiivisen kutsun paluuarvosta tulee ilman lisäoperaatioita kutsuvan instanssin paluuarvo. Toisin sanottuna"paluumatkalla" ei ole mitään tekemistä. Esimerkin ÖØÓÑ -funktioeiolehäntärekursiivinen. Rekursiivisenkutsun paluuarvo pitää ensin kertoa Ò:llä, jotta saadaan kutsujan paluuarvo: Ò ÖØÓÑ Ò ¹ ½ µ ÖØÓÑ voitaisiintoteuttaahäntärekursiivisena: ÙÒ ÙÒ Sotkuun voi osallistua useampiakin funktioita. Syntyvä"kutsusilmukka" voi olla pidempi. Epäsuoran rekursion käytössä kannattaa olla pidättyväinen, koska se on usein hankalasti hahmotettava. Ohjelmasta tulee vaikeatajuinen. ÒØ ÖØÓÑ ØÙÓ Ò Ò ¹ ½ µ Tätä pitäisi kutsua siten, että ensimmäiseksi parametriksi annetaan 1: ÓÙØ ÒØ ÖØÓÑ ½ Ò µ Ò

14 Ø ÒÙ Ó ØÖÑ ÒÙ ØÖ Ò ÒÙ Ú ØÓÖ ÒÙ Ò Ñ ØÖ Ò ØÖ Ò ÒÙÑ ÖÓØ Ú ØÓÖ À Ò ÚÓÒ Ø Ý ÙÙ ÔÙ ÒÒÙÑ ÖÓ ÆÙÑ ÖÓ Ì Óز Ø ÓØ ØÖ Ò ÒÙÑ ÖÓ µ ÚÓ À Ò Ò ØØÓÒ Ø Ñ Ò Ò ÚÓÒ ÙÓÖ ØØ Ø Ú ÓÒ ÓÆ Ñ Ì ÓØ Ø ÓØ ØÖ Ò Ù Ò µ Ø Ñ Ò Ò Ò Ñ Ò Ô ÖÙ Ø ÓÓ ÈÒ Ø Ø ÔÓ Ñ ØØÓØÝÝÔ Ø ÓØ ÑÒ µ ß ÒÓ½ ß ÌÑÙ Ì Ö Ú ØÓÖ ØÖ Ò µ Ì ÓØ ÒÓ¾ Ì ÓØ ÒÓ½ ¼ ¹½¾ µ ÆÙÑ ÖÓ ÒÓ½ ¼ ¼¹½¾ µ ÆÙÑ ÖÓ ÓÒ ÓÆ Ñ ÒÓ½ Ì Ö µ µ ß ÒÓ½ µ ØÙÓ Ø Ì ÓØ ÔÙ ÒÙ ØØ Ó Ú ØÓÖ ÒÓ½ µ ÔÙ ÒÙ ØØ ÓºÔÙ ØÑÔ ß Ç Ö ÇÒÒ ÑÓ Ò Ò Ú ØÓÖ ØÖ Ò µ Ì ÓØ ØÑÔ µ ÔÙ ÒÙ ØØ ÓºÔÙ ÙÒ Ò ¼ ÔÙ ÒÙ ØØ Óº Þ µ µ ß ÓÖ ÓÒ ÓÆÙÑ ÖÓ ÔÙ ÒÙ ØØ Óº Ø µ ¼ ¹ µ µ ß OHJ-1151 Ohjelmointi 2e OHJ-1151 Ohjelmointi 2e Harjoitus jatkuu Häntärekursiivisille funktioille on tyypillistä, että lopputulosta kerätään ylimääräiseen parametriin(øùó ), johon kertynyt arvo voidaan sitten suoraan palauttaa lopetusehdon täyttyessä. Kirjoita häntärekursiiviset versiot potenssifunktiosta ja funktiosta, joka etsii tiettyä merkkiä annetusta merkkijonosta. Tuosta seuraa, että ylimääräisen parametrin alkuarvon tulee olla triviaalitapauksen lopputulos. Häntärekursio on tärkeä käsite, koska se voidaan muuttaa mekaanisesti silmukkarakenteeksi. Saavutetaan rekursion hyödyt mutta päästään eroon sen huonoista puolista. OHJ-1151 Ohjelmointi 2e Kertaus: Tietueet OHJ-1151 Ohjelmointi 2e Seuraavan asiakokonaisuuden(abstraktit tietotyypit) ymmärtämiseksi on hyvä palauttaa mieleen tietueet. Esimerkki, tallennetaan tietueeseen yhden ihmisen puhelintiedot: ÒÓ¾ºÒ Ñ ØÓ Ë ÑÙÙØ Ó ÆÙÑ ÖÓ ÒÓ¾ ¼ ¹ µ Ù Ò Ò Ñ Ô Ø ØÖÙØ Ì ÓØ ß ÌØÓØÝÝÔÔ Ý Ò Ò Ò ÔÙ ÒÒÙÑ ÖÓØØÓÒ ØÒØ Ñ Ò ÔÙ ÒÙ ØØ ÓºÔÙ ÒÓ¾ µ Ø Ò ØÓ Ñ ÒÔ ØØ Ó Ø Ò Ò Ø Ó ÚÓÒ ÙÓÖ ØØ ÚÓ ØÙÓ Ø Ì ÓØ Ø ÓØ µ À Ò Ò Ø ÓØ ÚÓÒ ØÙÓ Ø ØÙÓ Ø ÔÙ ÒÙ ØØ Óº Ø µ µ ÁÌ ËÍ ËË ÓÓ ÓÒ ÓÆÙÑ ÖÓ Ì ÓØ Ø ÓØ ØÖ Ò ÒÙÑ ÖÓ µ Ø Ñ Ò Ò ÔÙ ÒÒÙÑ ÖÓÒ Ô ÖÙ Ø

15 ÅÖ Ø Ò ØÓ Ñ ÒÔ ØØ Ó Ø Ò Ò Ø Ó ÚÓÒ ÙÓÖ ØØ ØÙÓ Ø Ì ÓØ Ø ÓØ µ ß ÚÓ ÙÒ Ò ¼ Ø ÓغÒÙÑ ÖÓغ Þ µ µ ß ÓÖ Ø ÓغÒÙÑ ÖÓغ Ø µ Ò ÓÙØ ÆÙÑ ÖÓ Ì Óز Ø ÓØ ØÖ Ò ÒÙÑ ÖÓ µ ß ÚÓ ÒÙÑ ÖÓ µ Ø ÓغÒÙÑ ÖÓغÔÙ ÓÒ ÓÆ Ñ Ì ÓØ Ø ÓØ ØÖ Ò Ù Ò µ ß ÓÓ Ø ÓØºÒ Ñ ºÒ Ù Ò µ ØÖ Ò ÒÔÓ µ ß ÓÒ ÓÆÙÑ ÖÓ Ì ÓØ Ø ÓØ ØÖ Ò ÒÙÑ ÖÓ µ ß ÓÓ ÙÒ Ò ¼ Ø ÓغÒÙÑ ÖÓغ Þ µ µ ß ÓÖ Ø ÓغÒÙÑ ÖÓغ Ø µ ÒÙÑ ÖÓ µ ß ØÖÙ ÈÍÀ Ò ÈÍÀ Ò ØÖ Ò ÒÙ Ú ØÓÖ ÒÙ Ò Ñ ØÖ Ò ØÖ Ò ÒÙÑ ÖÓØ Ú ØÓÖ À Ò ÚÓÒ Ø Ý ÙÙ ÔÙ ÒÒÙÑ ÖÓ ÆÙÑ ÖÓ Ì Óز Ø ÓØ ØÖ Ò ÒÙÑ ÖÓ µ ÚÓ À Ò Ò ØØÓÒ Ø Ñ Ò Ò ÚÓÒ ÙÓÖ ØØ Ø Ú ÓÒ ÓÆ Ñ Ì ÓØ Ø ÓØ ØÖ Ò Ù Ò µ Ø Ñ Ò Ò Ò Ñ Ò Ô ÖÙ Ø ÓÓ OHJ-1151 Ohjelmointi 2e OHJ-1151 Ohjelmointi 2e Ohjelman jakaminen tiedostoihin ÓÙØ Ø ÓØºÒ Ñ Ò Jos ohjelma kasvaa suureksi, se on hyvä jakaa useampaan eri tiedostoon selkeyden säilyttämiseksi. Esim. samaan asiaan liittyvät funktiot voisi erottaa omaksi kokonaisuudekseen(moduuliksi) omaan tiedostoonsa. ØÖÙ Katsotaan, miten edellinen puhelinnumeroesimerkki voitaisin jakaa niin, että puhelinnumerotietue ja siihen liittyvät funktiot olisivat omissa tiedostoissaan. Tarvitaan kolme tiedostoa: Puhelintietoihinliittyvätesittelyt,ns.otsikkotiedosto(headerfile): ÔÙ º Puhelintietojenmäärittelyt: ÔÙ º Testipääohjelmaomassatiedostossaan: ÑÒº OHJ-1151 Ohjelmointi 2e Tiedostojenvälinentyönjakotoimiisiten,että º-päätteisetotsikkotiedostot(header files) sisältävät º-päätteisten lähdekooditiedostojen (source files) tarvitsemia esittelyjä. Varsinainen toiminnallinen koodi(esim. funktioiden rungot) sijaitsevat º-tiedostoissa. Jotta koodissa voitaisiin käyttää otsikkotiedostojen sisältämiä asioita, täytyykyseinen º-tiedostoottaamukaan ÒÙ-direktiivillä. OHJ-1151 Ohjelmointi 2e Puhelinluetteloesimerkki eri tiedostoihin jaettuna Tiedosto ÔÙ ºsisältääpuhelintietomoduulinjulkisenrajapinnan. Ù Ò Ò Ñ Ô Ø ØÖÙØ Ì ÓØ ß ÌØÓØÝÝÔÔ Ý Ò Ò Ò ÔÙ ÒÒÙÑ ÖÓØØÓÒ ØÒØ Ñ Ò ÒÙ Ø ÒÙ ÔÙ º Mikäli mukaan otettava tiedosto sijaitsee jossain systeemin oletushakemistossa,käytetään Ø Ó ØÓ -notaatiota,jolloinkääntäjälinkittääkin automaattisesti. Ø Ó ØÓº tarkoittaa,ettäotsikkotiedostoonsamassahakemistossa kuin sen mukaan otettava tiedosto. Ø Ò ØÓ Ñ ÒÔ ØØ Ó Ø Ò Ò Ø Ó ÚÓÒ ÙÓÖ ØØ ÚÓ ØÙÓ Ø Ì ÓØ Ø ÓØ µ À Ò Ò Ø ÓØ ÚÓÒ ØÙÓ Ø ÓÓ ÓÒ ÓÆÙÑ ÖÓ Ì ÓØ Ø ÓØ ØÖ Ò ÒÙÑ ÖÓ µ Ø Ñ Ò Ò ÔÙ ÒÒÙÑ ÖÓÒ Ô ÖÙ Ø Ò

16 ÔÙ º ÒÙ ØÖ Ò ÒÙ Ú ØÓÖ ÒÙ Ó ØÖÑ ÒÙ ØÙÓ Ø Ì ÓØ Ø ÓØ µ ß ÚÓ Ø ÓØºÒ Ñ Ò ÓÙØ ÙÒ Ò ¼ Ø ÓغÒÙÑ ÖÓغ Þ µ µ ß ÓÖ Ø ÓغÒÙÑ ÖÓغ Ø µ Ò ÓÙØ ÆÙÑ ÖÓ Ì Óز Ø ÓØ ØÖ Ò ÒÙÑ ÖÓ µ ß ÚÓ ÒÙÑ ÖÓ µ Ø ÓغÒÙÑ ÖÓغÔÙ ÓÒ ÓÆ Ñ Ì ÓØ Ø ÓØ ØÖ Ò Ù Ò µ ß ÓÓ Ø ÓØºÒ Ñ ºÒ Ù Ò µ ØÖ Ò ÒÔÓ µ ß ÓÒ ÓÆÙÑ ÖÓ Ì ÓØ Ø ÓØ ØÖ Ò ÒÙÑ ÖÓ µ ß ÓÓ ÙÒ Ò ¼ Ø ÓغÒÙÑ ÖÓغ Þ µ µ ß ÓÖ ÔÙ º ÒÙ Ø ÒÙ ØÖ Ò ÒÙ Ú ØÓÖ ÒÙ Ó ØÖÑ ÒÙ Ò Ñ Ô Ø Ù Ò ÈÒ Ø Ø ÔÓ Ñ ØØÓØÝÝÔ Ø ÓØ ÑÒ µ ß ÒÓ½ ß ÌÑÙ Ì Ö Ú ØÓÖ ØÖ Ò µ Ì ÓØ ÒÓ¾ Ì ÓØ ÒÓ½ ¼ ¹½¾ µ ÆÙÑ ÖÓ ÒÓ½ ¼ ¼¹½¾ µ ÆÙÑ ÖÓ ÓÒ ÓÆ Ñ ÒÓ½ Ì Ö µ µ ß ÒÓ½ µ ØÙÓ Ø ØÙØ ¹ ÔÙ º ÔÖÓ ØÙØ ¹ ÑÒº ÔÖÓ ØÙØ ¹Ó ÔÙ ÔÙ ºÓ ÑÒºÓ ÔÖÓ º»ÔÙ ÔÖÓ OHJ-1151 Ohjelmointi 2e Tiedosto ÔÙ º,jokasisältääpuhelintietomoduulintoteutuksen. OHJ-1151 Ohjelmointi 2e Tiedosto ÑÒº,jossaontestipääohjelma. Ù Ò Ò Ñ Ô Ø ÒÓ¾ºÒ Ñ ØÓ Ë ÑÙÙØ Ó ÆÙÑ ÖÓ ÒÓ¾ ¼ ¹ µ ØÖÙ Ò ÁÌ ËÍ ËË Ø ÓغÒÙÑ ÖÓغ Ø µ ÒÙÑ ÖÓ µ ß OHJ-1151 Ohjelmointi 2e Jotta ohjelma saadaan käännettyä, täytyy funktion määrittelyt sisältä tiedosto ottaa mukaan käännösvaiheessa. Tämä tapahtuu linkittämällä tiedostot yhteen. Kääntäjä suorittaa linkittämisen automaattisesti: OHJ-1151 Ohjelmointi 2e Isoja ohjelmia käännettäessä voi olla selkeämpää erottaa käännösja linkitysvaiheet toisistaan. Tietää heti, kummasta vaiheesta virheilmoitukset tulevat. Jos käännösvaiheiden ja linkitysvaiheiden ero halutaan selkeämmin esille, voidaan kääntää º-tiedostoista ºÓ-päätteisiä objektitiedostoja, jotka sitten linkitetään ajettavaksi ohjelmaksi. Esim: ÔÖÓ ØÙØ ¹Ó ÔÙ ÔÙ º ÑÒº ÔÖÓ º»ÔÙ Tärkeää on huomata, että kääntäjälle syötetään vain º-tiedostot, ei koskaan º-tiedostoja. Kääntäjäosaaottaa º-tiedostotmukaan ÒÙ-direktiivienavulla. puh.cc käännös puh.o linkitys main.cc include käännös main.o puh.hh puh Ohjelma Ñ helpottaatätähuomattavastiautomatisoimallakäännöksen. Ñ stalisäämyöhemmin.

17 OHJ-1151 Ohjelmointi 2e Tässä kohdassa on hyvä täydentää Ohjelmointi 1e:ssä esitetty kaavio kääntämisen vaiheista vastaamaan C++-totuutta: Lähdekoodi OHJ-1151 Ohjelmointi 2e Ota ÒÙdirektiivillämukaanainoastaanotsikkotiedostoja. Kirjoita varsinainen leipäkoodi aina º-tiedostoihin. Esikääntäjä Esikäännetty koodi Kääntäjä Objektitiedosto Linkkeri Kirjastot Kirjastot Koska ÒÙainoastaanliittäätiedostotosaksikäännettäväätiedostoa, on mahdollista, että jokin tiedosto tulee mukaan useampaan kertaan ja päällekkäiset määrittelyt estävät kääntämisen. Otsikkotiedostondirektiivit Ò, Ò ja Ò kertovatesikääntäjälle(esiprosessori), että tiedoston sisältö liitetään ainoastaan kerran käännettävään tiedostoon riippumatta siitä, kuinka monta kertaa sitä yritetään ottaa mukaan. Jos ei halua jakaa ohjelmaa useampaan tiedostoon, lyhyen ohjelman luettavuuttavoimyösselkeyttääsiirtämällä ÑÒ-funktiontiedostonalkuun ja omien funktioiden määrittelyt sen perään. Tällöin funktiot pitää esitelläennen ÑÒ:ia,jottaniitävoikäyttää. Suoritettava ohjelma OHJ-1151 Ohjelmointi 2e Abstraktiot Sivistyssanastosta voilöytääseuraavatmääritelmät: abstrakti ajatuksessa eristetty, semmoisenaan katsottu tai ajateltu, käsitteellinen. abstraktio epäolennaisten ainesten erottaminen ajatuksessa itse oliosta, käsitteenmuodostus(tai sen tulos), yleistys, käsite. Määritelmissä ei sinänsä ole mitään vikaa, ne ovat vain liian yleisellä tasollaesitettyjä, jottaniitävoisiymmärtääilmanesimerkkejä. Tutkitaan muutama esimerkki sekä elävästä elämästä että tietokoneohjelmoinnin maailmasta. Hagfors,Manninen:Jokamiehensivistyssanasto,11.painos, WSOY, 1972, ISBN Siisliianabstrakteja! OHJ-1151 Ohjelmointi 2e Puhutun kielen sana auto Sana auto tarkoittaa laitetta, jolla pääsee nopeasti paikasta toiseen. Jokainen ymmärtää tuon merkityksen ja pystyy keskustelemaan autoista, vaikkei hänellä olisikaan ymmärrystä auton todellisesta luonteesta: esim. kuinka polttomoottori tai vaihdelaatikko toimivat, saatika sitten, kuinka suunnitella ja rakentaa auto omin käsin. Auto on siis abstraktio, joka ihmisten ajatusmaailmassa kuvaa erittäin monimutkaisen laiteen niin, että sitä voi ajatella ja siitä voi keskustella takertumatta epäolennaisiin yksityiskohtiin. Itse asiassa kaikki puhutun kielen sanat ovat abstraktioita aivan samoilla perusteilla. Toki samasta asiasta voi olla eri tasoisia abstraktioita(abstraktiotasoja) vrt. Risto Rikkaan, Antti Autoilijan, Matti Mekaanikon ja Seppo Suunnittelijan näkemys autosta.

18 Ø ÖÚÓ ÓÙ µ ß ÓÙ ¼ µ ß ¹ Ñ Ø ÒÙ Ò Ñ Ô Ø Ù Ò Ø ÖÚÓ ÓÙ µ ß ÓÙ µ OHJ-1151 Ohjelmointi 2e OHJ-1151 Ohjelmointi 2e Ajatellaan merkintää vtdt uv Matemaattiset abstraktiot Merkintäesittää ajassatkuljettuamatkaa,kunnopeus(vektori)onv. Tämän jälkeen aina kun näemme vastaavan integraalimerkinnän, tiedämme että"siinähän selvästi lasketaan kuljettua matkaa". Tämä on kuitenkin abstraktia tietämystä, sillä emme välttämättä osaa laskea lausekkeelle arvoa, tai jos osaamme, niin emme tunne matemaattisia perusteita, jotka takaavat tuloksen oikeellisuuden. Abstraktiot ohjelmoinnissa Kaikki tieto, jota tietokoneohjelmissa käsitellään, on abstraktia. Esimerkiksitietotyyppi.Senlisäksi,ettäkokonaisluvutitsessäänovat abstraktioita,niinniidenesitysohjelmointikielessä(siis )onsitämyös: :intoteutuksestakonekieli-taipuolijohdetasollaeiolemitäänvarmuutta. Kuitenkin -tyyppiävoidaankäyttää,kunymmärretään sen käyttäytyvän kuin kokonaisluku. Usein puhutaan tietoabstraktiosta(data abstraction). Ohjelmointiin liittyy myös toinen abstraktiokäsite: toiminnallinen abstraktio(functional abstraction). Hyvä esimerkki toiminnallisesta abstraktiosta ovat funktiot. Luultavastieiesitä,vedettyhatustaesimerkinvuoksi.Oletetaankuitenkin,ettätämä on merkinnän fyysinen tulkinta. OHJ-1151 Ohjelmointi 2e Funktio on sarjalle toimintoja annettu abstrakti nimi. Esim. kun on päätetty, että luvun itseisarvo saadaan funktiolla ÓÙ Ø ÖÚÓ ÓÙ µ niin sen jälkeen on yhdentekevää, kuinka funktio on toteutettu, kunhan se tuottaa itseisarvon määritelmän mukaisen tuloksen parametristaan: tai ß OHJ-1151 Ohjelmointi 2e Mitä(tietokone)ohjelmointi nyt tämän uuden tiedon valossa on? Uusien abstraktioiden opettamista kääntäjälle/koneelle, jotta ohjelmoijan olisi helpompi kuvata halutun ongelman ratkaisu muuten niin suppealla ohjelmointikielellä. Tosiasiassa abstraktioiden parissa on siis painittu jo koko kurssin Ohjelmointi 1e ajan, vaikka asiaa ei näin syvällisesti ja filosofis metafyysisesti pohdittukaan. Kun ohjelmoinnin yhteydessä puhutaan abstraktiosta, niin tarkoitetaan toteutuksen ja käytön erottamista toisistaan(kapselointi): tietotyyppejä voi käyttää ja ne toimivat odotetusti funktioita voi kutsua ja ne suorittavat tehtävänsa oikein vaikka toteutuksen yksityiskohdista ei tiedettäisi mitään. tai jollain vielä aivan toisella tavalla.

19 Ø ÒÙ Ó ØÖÑ ÒÙ ÔÙ Ë ÑÑ Ó µ ÖÙÙÚ ÖÖÓ ÅÖ µ ÓÓ ÖÖÓØ µ ÚÓ ÔÖ Ú Ø ÓÙ ÒÂ ÒÒ ØÝ ÙÒ Ò Ì Ø ØÒ ÑÑ Ó ÑÒ µ ß Ù ÅÙÙØØÙÒ ÑÖ ØØ Ý Ë ÑÑ Ó ÙºÖÙÙÚ µ µ ß Û ËÙ Ø Ó ÓÑ Ø Ò ÓÙØ Ùº ÖÖÓØ µ OHJ-1151 Ohjelmointi 2e Abstraktit tietotyypit Abstraktit tietotyypit ovat ohjelmoijan määrittelemiä tietotyyppejä, joissa tietoisesti pyritään soveltamaan"toteutuksen ja käytön erottelu"- periaatetta(kapselointi). Tarkoitus on suunnitella ja rakentaa tietotyyppejä, 1. joiden toteutuksesta käyttäjällä ei ole tietoa, ja jos onkin, niin hän ei voi vahingossa(tai tarkoituksella) käyttää valitun toteutuksen ominaisuuksia hyväkseen(tiedon kätkentä, data/information hiding). 2. joita ohjelmoija voi kuitenkin hyödyntää, sillä sen alkuperäisen toteuttaja on kirjoittanut myös joukon funktioita, joilla kaikki tarpeelliset operaatiot saadaan suoritettua. Tällaista joukkoa abstraktiin tietotyyppiin liittyviä funktioita kutsutaan sen rajapinnaksi tai julkiseksi rajapinnaksi. OHJ-1151 Ohjelmointi 2e Esimerkki jo entuudestaan tutusta abstraktista tietotyypistä on dynaaminenmerkkijonotietotyyppi ØÖ Ò : 1. Sen sisäisestä toteutuksesta ei ole tietoa: jollain"maagisella" tavalla se kuitenkin tallentaa vaihtelevan mittaisia merkkijonoja C++-ohjelmasta käytettävässä muodossa. 2. Mukanarajapintafunktiot,joidenavulla ØÖ Ò -tyyppiäkäsitellään: Ø µ, ÑÔØÝ µ, Ù ØÖ µjamontamuuta. Rajapinnan funktiot kuvaavat abstraktin tietotyypin olennaiset ominaisuudet sillä abstraktiotasolla, jolla tyyppiä on tarkoitus käyttää. Usein abstraktin tietotyypin rajapinnan funktioita kutsutaan myös metodeiksi tai jäsenfunktioiksi. OHJ-1151 Ohjelmointi 2e Pikkuruinen esimerkki Ensimmäiseksi esimerkkiksi C++:lla toteutetusta abstraktista tietotyypistä otamme vieterilelusammakon! Sammakon sisäinen toteutus on vieteri. Kun vieteri on jännitettynä sammakko osaa hyppiä. Jos vieteri ei ole jännitetty, hyppiminen ei onnistu. OHJ-1151 Ohjelmointi 2e Sammakon toteutus abstraktina tietotyyppinä C++:lla ja pieni testipääohjelma, jossa sen toimintoja testataan: Ù Ò Ò Ñ Ô Ø Ë ÑÑ Ó ß ØÖØ Ò ØØÓØÝÝÔ Ò ÑÖ ØØ Ý Käyttäjä voi suorittaa sammakolle kaksi operaatiota: ruuvata jousta kireämmälle irrottaa sammakon(= päästää sen hyppimään) ÓÙØ ÊÙÙÚ ØÒ Ò Vieterillä on myös maksimijännitys, jonka yli sitä ei saa jännittää. Väkivaltainen käyttäjä saattaa rikkoa sammakon jännittämällä jousta liikaa. ÁÌ ËÍ ËË

20 Ë ÑÑ ÓÖÙÙÚ ÖÖÓ ÅÖ µ ß ÓÓ ÓÙ Ò ÒÒ ØÝ Å Â ÆÆÁÌ Ë µ ß ÂÒÒ ØÝ Ø ÚÓÒ Ö Ø ÖÖÓ ÅÖ» ¾ ÓÙ Ò ÒÒ ØÝ Ö Ò ÓÙØ ÓÙ Ò ÒÒ ØÝ Å Â ÆÆÁÌ Ë µ ß ËÚÙØ ØØÒ Ñ ÑÒÒ ØÝ Å Â ÆÆÁÌ Ë ÓÙ Ò ÒÒ ØÝ ØÖÙ ÂÓÙ Ø ÚÓ Ú Ö Ø Ö Ò ÂÓÙ Ó Ó ØÝ ÒÒ ØÝ ¹ Ê ÙÙ ÓÙØ Å Â ÆÆÁÌ Ë ½ Ë ÑÑÓÒ Ò Ò Ø ÓÒ Ö ÓÙ Ò ÒÒ ØÝ Ë ÑÑ Ó ÖÖÓØ µ ß ÚÓ ÓÙ Ò ÒÒ ØÝ Å Â ÆÆÁÌ Ë µ ß ÊÒ Ò Ò ÑÑ Ó ÝÔ ÓÙ Ò ÒÒ ØÝ ¼ µ ß Û ÓÙ Ò ÒÒ ØÝ µ ß ÓÙØ Ó Ò Ò ÓÙ Ò ÒÒ ØÝ ½ µ ß ÓÙØ ÓÓÓ Ò Ò ÑÙÖØÓº ÌØÓØÝÝÔ Ò ÑÖ ØØ Ý ÒÙ Ó ØÖÑ ÒÙ Ø ÒÙ Ò Ñ Ô Ø Ù Ò ÑÒ µ ß Ñ ÅÙÖØÓÙ Ù ÑºÙ Ò µ µ ß ÄÙ Ù ÔÓÒÒ ØÙ Ò ÖÖ ÓÙØ µ ѺØÙÓ Ø Ñ ÑÙÓ Ó ÓÙØ µ ѺØÙÓ Ø ÅÙÖØÓÙ ÙÑÙÓ Ó µ Ѻ Ú ÒÒ ÓÙØ µ ѺØÙÓ Ø ÅÙÖØÓÙ ÙÑÙÓ Ó Ó Ó ØØ Ñº Ç Ó ØØ µ Ò Ñ ØØ Ñº Æ Ñ ØØ µ ÅÙÖØÓÙ Ù Ó Ó ØØ» Ò Ñ ØØ Ò ÓÙØ ÁÌ ËÍ ËË OHJ-1151 Ohjelmointi 2e OHJ-1151 Ohjelmointi 2e ÓÒ Ø ÙÒ Ò Å Â ÆÆÁÌ Ë ½¼ Esimerkistä opittua: Ë ÑÑ ÓË ÑÑ Ó µ ÓÙ Ò ÒÒ ØÝ ¼ µ ß ÓØ Ò Ò ÚÓ ÖÙÙÚ Ø Abstraktin tietotyypin voi C++:ssa toteuttaa käyttäen avainsanaa. Senavullamääritellään,millainen Ë ÑÑ Óon. Sammakkoa käsittelevä pääohjelma on yksinkertainen ja selkeä. Abstrakti tietotyyppi kätkee sisälleen monimutkaiset ruuvaamiseen ja sammakon liikkumiseen liittyvät yksityiskohdat. Sammakolla on selkeä sisäinen tila: jousi voi olla levossa, jännitetty vähän tai vähän enemmän, tai rikki. Sammakon toiminta riippuu sen sisäisestä tilasta. ß ÓÙØ ÓÓÓÓ Ò ¹¹ ÓÙ Ò ÒÒ ØÝ OHJ-1151 Ohjelmointi 2e Vähän suurempi esimerkki OHJ-1151 Ohjelmointi 2e Pienipääohjelma,jokakäyttää ÅÙÖØÓÙ Ù-tietotyyppiä: Suunnitellaanabstraktitietotyyppi ÅÙÖØÓÙ Ù,muttaeiotetavieläkantaa sen toteutukseen: katsotaan, millainen sen rajapinta on ja miten sitä käytettäisiin ohjelmassa. ÅÙÖØÓÙ Ùaontarkoituskäyttääseuraavasti: ÅÖ Ø Ò ÙÙ ÑÙÙØØÙ ÇÒ Ó Ù Ø ØØÙ Ì Ø ØÒ ohjelmassavoiolla ÅÙÖØÓÙ Ù-tyyppisiämuuttujia ѺØÙÓ Ø ÅÙÖØÓÙ ÙÑÓ Ó ÓÙØ µ ѺØÙÓ Ø Ñ ÑÙÓ Ó ÓÙØ µ murtoluvunarvo(-tyyppisetosoittajajanimittäjä)voidaanlukea käyttäjältä näppäimistöltä murtoluvun arvo on mahdollista tulostaa tietovirtaan murtolukumuodossa tai desimaalilukumuodossa ÁÌ ÁÄÍÊ murtoluvusta on mahdollista saada selville sen osoittaja ja nimittäjä ѺØÙÓ Ø Ñ ÑÙÓ Ó ÓÙص murtolukuja voidaan laventaa sopivalla kertoimella

21 º»ÑÙÖØÓÙÚÙØ ÔÖÓ» ½ ¼ ¼º¼¼¼¼¼¼¼ Ó Ó ØØ Ò Ñ ØØ ¾ ËÝ Ø» ¾ ¼º» ½¾ ¼º» ½¾ ÅÙÖØÓÙ Ù ÔÖÓ º» ÓÓÖÒØ ØÓ ± ½¾ ¹¹¹¹¹¹¹¹¹ ½ ¾ ØØÚÒ Ô ØÒ ÓÓÖÒØ Ø ¾ ÒÒ ½¾ ¹¹¹¹¹¹¹¹¹ ½ ¾ ºº ØØÚÒ Ô ØÒ ÓÓÖÒØ Ø ÒÒ OHJ-1151 Ohjelmointi 2e Ohjelman suoritus näyttäisi tältä: OHJ-1151 Ohjelmointi 2e On hyödyllistä havaita myös, että osa rajapinnan funktioista voidaan jakaa loogisiin ryhmiin: rakentajat eli konstruktorit Alustavat abstraktin tietotyypin muuttujan eli asettavat sille järkevän alkuarvon(esimerkin rakentaja on"piilossa". Katso toteutusta). Esimerkissäfunktioidenkutsunotaatioonesim. ØÖ Ò -tyypistäjatietovirroista tuttu muuttuja.funktio(). Abstrakteja tietotyyppejä käytetään näin. Olennaiset huomiot esimerkistä: Tietotyyppiä ÅÙÖØÓÙ Ùpystyikäyttämäänjakoodioliymmärrettävää, vaikka tyypin toteutuksesta ei ollut mitään tietoa. Rajapinnan funktiot määräävät, mitä abstraktilla tietotyypillä voi tehdä: kaikki muuttujalle Ñ tehdyt operaatiot tapahtuivat sopivaa rajapinnan funktiota kutsumalla. valitsimeteliselektoritpalauttavattoteutukseenkätkettyätietoa: Ç Ó ØØ µ ja Æ Ñ ØØ µ. muuttajat eli mutaattorit Muuttavat alkion tilaa(eli toteutukseen kätkettyätietoa): Ù Æ ÔÔÑ ØÓØ µja Ú ÒÒ ÖÖÓ Ò µ. purkajat eli destruktorit Vapauttavat muuttujan varaamat resurssit sen jälkeen, kun muuttujaa ei enää tarvita. Esimerkissä ei purkajaa(mutta myöhemmin tärkeä käsite). Muitakin ryhmiä on, mutta ne eivät tässä vaiheessa ole tärkeitä. OHJ-1151 Ohjelmointi 2e Harjoitus Mitämuitafunktioita ÅÙÖØÓÙ Ù-tietotyypinrajapintaanvoisitoteuttaa? Mihin ryhmään ko. funktiot kuuluisivat? OHJ-1151 Ohjelmointi 2e Harjoitus Etsitään abstrakteja tietotyyppejä seuraavista ohjelmista: Ohjelma, joka osaa piirtää näytölle ASCII-koordinaatistoja ja merkitä niihin pisteitä... Ohjelma, joka osaa käsitellä polynomimuotoisia funktioita Ohjelma, joka tallettaa joulupukin lahjatietokannan

22 ÑÙÖØÓº ÒÙ Ø ÒÙ Ó ØÖÑ ÒÙ Ò Ñ Ô Ø Ù Ò Ê ÓÒ ØÖÙ ØÓÖ Ó Ó ØØ ¼ µ Ò Ñ ØØ ½ µ ß Ù ØÙ ÙÚÙ ¼»½ ÅÙÖØÓÙ ÙÅÙÖØÓÙ Ù µ ÅÙÖØÓÙ Ù Æ Ñ ØØ µ ÓÒ Ø ß Ò Ñ ØØ ËÝ Ø Ó Ó ØØ Ò Ñ ØØ ÓÙØ Ó Ó ØØ Ò Ñ ØØ µ ß ß ØÖÙ Ó ØÖÑ ÒÙ Ò Ñ Ô Ø Ù Ò ÅÙÖØÓÙ Ù ß Ê Ô ÒÒ Ò ØØ Ý ÔÙ Ó Ó ØØ Ò Ñ ØØ ÅÙÖØÓÙ Ù Ú ÒÒ ÖÖÓ Ò µ ß ÚÓ Ó Ó ØØ ÖÖÓ Ò Ó Ó ØØ ÅÙÙØ Ö Ô ÒÒ Ò Ø Ö Ó Ñ Ø Ý ÝÝ Ø Ô Ú ÙØ ÅÙÖØÓÙ ÙØÙÓ Ø ÅÙÖØÓÙ ÙÑÙÓ Ó Ó ØÖѲ Ó µ ÓÒ Ø ß ÚÓ ÅÙÖØÓÙ ÙØÙÓ Ø Ñ ÑÙÓ Ó Ó ØÖѲ Ó µ ÓÒ Ø ß ÚÓ Ø Ø Ø ÓÙ Ó Ó ØØ µ» Ò Ñ ØØ Ò Ó OHJ-1151 Ohjelmointi 2e Minkä osan ohjelmia esittäisit abstraktina tietotyypinä? Mitä toimenpiteitä ko. tietotyyppiin liittyy? OHJ-1151 Ohjelmointi 2e ÅÙÖØÓÙ Ù-tyypintoteutus Toteutetaanabstraktitietotyyppi ÅÙÖØÓÙ Ùluokkana(class). Luokkiin sisältyy C++:ssa kiusallisen paljon yksityiskohtia, joten näinkin yksinkertainen esimerkki muodostuu monimutkaiseksi. Luokanesittelytiedostossa ÑÙÖØÓº: Ê ÅÙÖØÓÙ Ù µ ÎØ Ñ Ø Ç Ó ØØ µ ÓÒ Ø Æ Ñ ØØ µ ÓÒ Ø ÅÙØØØÓÖ Ø ÓÓ Ù ØÖѲ µ ÚÓ Ú ÒÒ ÖÖÓ Ò µ ÅÙÙØ Ö Ô ÒÒ Ò Ø Ö Ó Ñ Ø ÚÓ ØÙÓ Ø ÅÙÖØÓÙ ÙÑÙÓ Ó Ó ØÖѲ Ó µ ÓÒ Ø Ô Ú ÙØ ÚÓ ØÙÓ Ø Ñ ÑÙÓ Ó Ó ØÖѲ Ó µ ÓÒ Ø ÔÖ Ú Ø ÃØØÝØ ØÓØ ÙØÙ Ý ØÝ Ó Ø OHJ-1151 Ohjelmointi 2e OHJ-1151 Ohjelmointi 2e Luokan jäsenfunktioiden määrittely tiedostossa ÑÙÖØÓº: Ò Ñ ØØ Ò Ñ ØØ ÖÖÓ Ò ÅÙÖØÓÙ Ù Ç Ó ØØ µ ÓÒ Ø ß ÎØ Ñ Ø ØÓÖ Ø Ó Ó ØØ Ó Ó Ó ØØ» Ò Ñ ØØ Ò ÓÓ ÅÙÖØÓÙ ÙÙ ØÖѲ µ ß ÅÙÙØØ Ø ÑÙØØØÓÖ Ø

23 ÙÓÒÆ Ñ ß ÔÙ ÙÒ Ø Ó Ò ØØ ÝØ Ö Ô ÒÒ Ò ÔÖ Ú Ø ØØÓ Ó Ò ÙÒ Ø Ó Ò ØØ ÝØ ØØØÝÒ ÔÖ Ú Ø Ý ØÒ ÒÌ ÔÖ Ú Ø Ó Ø¾ OHJ-1151 Ohjelmointi 2e Luokat C++-kielen tarjoama työkalu abstraktien tietotyyppien toteuttamiseen on luokka(class). Luokka tarjoaa mahdollisuudet toteutuksen kätkemiseen käyttäjältä rajapintafunktioiden toteuttamiseen edellämainittujen kapselointiin(encapsulation) yhdeksi kokonaisuudeksi Luokatesitelläänvaratunsanan avulla: OHJ-1151 Ohjelmointi 2e Luokan esittelyn seurauksena käyttöön saadaan uusi abstrakti tietotyyppi ÙÓÒÆ Ñ. Ko. tietotyypistä voidaan luoda muuttujia, joita kutsutaan myös olioiksi. Näillä muuttujilla voidaan operoida vain tietotyypin rajapinnan funktioiden avulla. Tyypin toteutus määräytyy muuttujista kätketyt tietoalkiot, joita ei ohjelmassa voi käyttää suoraan, mutta rajapinnan funktiot pääsevät niihin käsiksi. Rakentajaa lukuunottamattakaikkialuokanjäsenfunktioitakutsutaan käyttäenmerkintätapaa: ÑÙÙØØÙ º ÙÒ Ø Ó Ô Ö Ñ ØÖ Ø µ Luokkaa voi jossain mielessä ajatella tietueena( ØÖÙØ), jonka kenttiin ei pääsekään käsiksi"."-operaattorilla, vaan on käytettävä luokan mukana tulevia rajapinnan funktioita. Todellisuudessa luokat ovat paljon enemmän, mutta aloittelijan kannalta tuo on hyvä analogia. jasivulla88mainittuaautomaattistapurkajaa OHJ-1151 Ohjelmointi 2e Luokanesittelyn ÔÖ Ú Ø -osa ÔÖ Ú Ø -osassaesitelläänmuuttujat,joihintalletetaantietotyypinalkion kuvaava tieto(jäsenmuuttujat tai attribuutit). Esimerkiksi murtoluku voitiin esittää kahdella kokonaisluvulla: sen osoittajan ja nimittäjän avulla. Luokankäyttäjänkannalta ÔÖ Ú Ø -osansisällölläeikuitenkaanole merkitystä niin kauan kuin rajapinnan funktiot toimivat odotusten mukaisesti. ÅÙÖØÓÙ Ù-tyyppiolisivoituyhtähyvintoteuttaaesimnäin: Ó Ó ØØ ÒÌ Ò Ñ ØØ ÒÌ tai hullunkurisesti näin: Ç Ó ØØ Ò Ò Ñ ØØ Ò Ý ØÒ Ò Ø Ç Ó ØØ Ò Ø ¹ Ç Ó ØØ Ò ÖØÓÑ Æ Ñ ØØ ÑÓ Ò Ç Ó ØØ Ò Ñ ØØ Ø ÙÙ Ó Kun jäsenfunktiot muutetaan uuden toteutuksen kanssa yhdenmukaisiksi, ei käyttäjä huomaa mitään. OHJ-1151 Ohjelmointi 2e Jäsenmuuttujien tärkein ominaisuus on se, että ne ovat käytettävissä jäsenfunktioissa. Voidaan kirjoittaa funktioita, jotka pystyvät operoimaan kätketyllä informaatiolla. Jäsenmuuttujien määrä ei ole mitenkään rajoitettu. Jäsenmuuttujat voivat olla tyypiltään mitä tahansa kääntäjän tuntemaa tyyppiä, vaikka toisia olioita. Ei ole yksikäsitteisesti oikeaa tapaa valita jonkin abstraktin tietotyypin jäsenmuuttujat(vrt. ÅÙÖØÓÙ Ù-tyypillekeksitytkolmeerilaista). Toteutuksen valintaan vaikuttavat ainakin tehokkuussyyt makuasiat/esteettiset syyt selkeys/ylläpidettävyys ohjelmoijan kyvyt ÔÖ Ú Ø -osassavoiesitellämyösjäsenfunktioita. Yksityisenrajapinnan funktiot, joita voivat kutsua vain muut jäsenfunktiot.

24 ÅÙÖØÓÙ ÙÙ ØÖѲ µ ß ÓÓ ÅÙÖØÓÙ Ù Ç Ó ØØ µ ÓÒ Ø ß OHJ-1151 Ohjelmointi 2e Vakiot(Å ÃÇÃÇ)jaitsetehtyjentietotyyppiennimet( ØÖÙØ ÇÔ tai ÅÙÖØÓÙ Ù)onuseintapanaerottaamuistanimistäerilaisella kirjoitusasulla. Myös jäsenmuuttujille voidaan valita oma nimeämiskäytäntönsä. Tässä prujussa on käytetty alaviivamerkkiä jäsenmuuttujien nimien lopussa. OHJ-1151 Ohjelmointi 2e Luokanesittelyn ÔÙ-osa Luokan ÔÙ-osassasaaollavainfunktioidenesittelyitä. Jäsenfunktioiden esitelyt poikkeavat toisistaan riippuen siitä, mihin ryhmään ne kuuluvat. Rakentajat: Oltava saman niminen kuin luokka, jonka rakentaja se on. Rakentajalla ei ole paluuarvoa, eikä siten paluuarvon tyyppiä. Parametreja voi olla aivan normaalisti. Kutsutaan automaattisesti aina, kun ohjelmassa luodaan abstraktin tietotyypin muuttuja. Määriteltävä jokaiselle luokalle. Valitsimet: Esitellään kuten funktiot yleensä, mutta esittelyn perässä varattu sana ÓÒ Ø. Funktio ei muuta jäsenmuuttujien arvoja. Valitsimilla voi olla parametreja(yleensä ei ole) ja paluuarvo. OHJ-1151 Ohjelmointi 2e Mutaattorit: Esitellään kuten normaalit funktiot. Voivat modifioida jäsenmuuttujien arvoja. Mutaattoreilla voi olla parametreja ja paluuarvo. Purkajat: Rakentajien kaltainen mekanismi, jonka avulla olion tuhoaminen tapahtuu. Kutsutaan automaattisesti, kun abstraktin tietotyypin muuttujan elinkaari päättyy. Käsitellään myöhemmin tällä kurssilla. OHJ-1151 Ohjelmointi 2e Jäsenfunktioiden määrittely Jäsenfunktiot määritellään muutamaa poikkeusta lukuunottamatta kuten funktiot yleensäkin ottaen. Funktioiden nimen edessä pitää kuitenkin kertoa, minkä abstraktin tietotyypin jäsenfunktiosta on kyse: Valitsimissa pitää olla mukana ÓÒ Ø parametrilistan perässä: Funktion runko saa olla normaaliin tapaan mitä vain suoritettavaa C++koodia. Jäsenmuuttujat ovat käytettävissä jäsenfunktioiden rungossa ilman määrittelyä.

25 º» ÓÓÖÒØ ØÓ ± ½¾ ½ ¾ ØØÚÒ Ô ØÒ ÓÓÖÒØ Ø ¾ ÒÒ ½¾ ½ ¾ ºº ØØÚÒ Ô ØÒ ÓÓÖÒØ Ø ÒÒ OHJ-1151 Ohjelmointi 2e Jos rakentajan halutaan alustavan jäsenmuuttujia, niin se saadaan aikaan alustuslistan avulla: ÅÙÖØÓÙ ÙÅÙÖØÓÙ Ù µ Ó Ó ØØ ¼ µ Ò Ñ ØØ ½ µ ß Jäsenmuuttujat, joille halutaan automaattisesti antaa alkuarvo, luetellaan parametrilistan perässä pilkuilla eroteltuina ja tarvittavat alkuarvot kerrottaan suluissa muuttujan nimen jälkeen. Alustuslista on tehokkain tapa alustaa jäsenmuuttujat C++:ssa. Rakentajalla voi myös olla parametreja; niistä esimerkkejä myöhemmin. Rakentajan rungossa voi olla käskyjä, mutta tätä ominaisuutta ei kannata hyödyntää, ennen kuin ymmärtää olion elinkaaren erittäin hyvin. OHJ-1151 Ohjelmointi 2e Harjoitus Toteuta ÅÙÖØÓÙ Ù-tietotyypilleuudetjäsenfunktiot ÙÔ Ø ja Ú ÒÒ. Mitä kaikkea pitää muuttaa missäkin tiedostossa? OpetetaanOlio-ohjelmoinninperuskurssilla. OHJ-1151 Ohjelmointi 2e Toteutuksen"kätkeminen" luokan sisällä Toteutetaanabstraktinatietotyyppinä ÃÓÓÖÒØ ØÓ,johonvoidaan esimerkiksi lisätä ja poistaa pisteitä. OHJ-1151 Ohjelmointi 2e Koordinaatiston sisäiselle toteutukselle on useita eri vaihtoehtoja: staattinen taulukko, joka kuvaa piirrettävää kenttää Ú ØÓÖ ØÖ Ò ÒØØ Ú ØÓÖ Ú ØÓÖ Ö ÒØØ ØÖÙØ È Ø ß Ú ØÓÖ È Ø Ñ ÖØÝØÈ ØØ Valitaan tällä kertaa toteutukseksi staattinen taulukko. Keskitytään esimerkissä erityisesti siihen, että luokan sisäinen toteutus olisi mahdollista vaihtaa mahdollisimman helposti, jos staattinen taulukko todettaisiinkin myöhemmin huonoksi vaihtoehdoksi. Supistetaan jäsenfunktioiden riippuvuutta toteutuksesta. Jäsenfunktiot kutsuvat toisia jäsenfunktioita( apujäsenfunktioita ). Toteutetaan myös viivan lisääminen. Muitakin mahdollisia toimintoja olisi vaikka kuinka paljon, mutta nämä riittävät tähän esimerkkiin.

Å Ø Ñ ØØ ¹ÙÓÒÒÓÒØ Ø Ò Ò Ì Ö ØØ Ö ÙØ ÓÖ Á Å Ö Ò Ò ÌÝ Ò Ò Ñ Ö Ø Ø Ø Ø Ì Ø Ì ØÓ Ò ØØ ÝØ Ø Ò ØÓ Ò ËÖ ÔØ ¹Ô Ó Ñ ÇÔÔ Ò ÄÖÓÑÒ ËÙ Ø Ì ØÓ Ò ØØ ÝØ ÌÝ Ò Ö Ø Ø ÖØ

Å Ø Ñ ØØ ¹ÙÓÒÒÓÒØ Ø Ò Ò Ì Ö ØØ Ö ÙØ ÓÖ Á Å Ö Ò Ò ÌÝ Ò Ò Ñ Ö Ø Ø Ø Ø Ì Ø Ì ØÓ Ò ØØ ÝØ Ø Ò ØÓ Ò ËÖ ÔØ ¹Ô Ó Ñ ÇÔÔ Ò ÄÖÓÑÒ ËÙ Ø Ì ØÓ Ò ØØ ÝØ ÌÝ Ò Ö Ø Ø ÖØ Ò ËÖ ÔØ ¹Ô Ó Ñ Á Å Ö Ò Ò À Ò ½½º º¾¼¼ Ç Ñ ØÓØÙÓØ ÒØÓ Ø ØÓ ÓÒ Ô Ø ¹ Ñ Ò Ö À ÄËÁÆ ÁÆ ÄÁÇÈÁËÌÇ Ì ØÓ Ò ØØ ÝØ Ø Ò ØÓ Å Ø Ñ ØØ ¹ÙÓÒÒÓÒØ Ø Ò Ò Ì Ö ØØ Ö ÙØ ÓÖ Á Å Ö Ò Ò ÌÝ Ò Ò Ñ Ö Ø Ø Ø Ø Ì Ø Ì ØÓ Ò ØØ ÝØ Ø Ò

Lisätiedot

Kuvan piirto. Pelaaja. Maailman päivitys. Syötteen käsittely

Kuvan piirto. Pelaaja. Maailman päivitys. Syötteen käsittely ØÙغ Ø Ò ÐÐ Ò Ò ÝÐ ÓÔ ØÓ Ì ÑÔ Ö Ò È Ð Ó ÐÑÓ ÒØ È Ð Ó ÐÑ Ò Ö ÒÒ ÒØØ ÈÙ ÒØØ ºÔÙ Ç ÐÑ ØÓØ Ò Ò Ø ÐРؽ ؾ Ø È Ð Ó ÐÑ Ò Ô ÖÙ Ö ÒÒ Ì ØÓ ÓÒ Ô Ð Ò ÝØ Ñ Ò ÓÒ Ñ ÐÐ Ó Ø Ò ÙÚ ØØ ÐÐ Ø Ñ ÐÑ Ø ÚÓ ÓÐÐ Ú Ò Ý Ò ÖØ Ò Ò Ð

Lisätiedot

ÈÖÓ Ð Ø Ø ÌÙÖ Ò Ò ÓÒ Ø ÅÖ Ø ÐÑ ÈÖÓ Ð Ø Ò Ò ÌÙÖ Ò Ò ÓÒ Å ÓÒ ÖÒÐ Ò Ò Ô Ø ÖÑ Ò Ø Ò Ò ÌÙÖ Ò Ò ÓÒ Ó Ô Ø ÖÑ Ò Ø Ø ÐØ ÙØ ÙØ Ò ÓÐ ÓÒ ØØÓ ¹ Ð º ÂÓ Ò Å Ò Ö Ò Ý

ÈÖÓ Ð Ø Ø ÌÙÖ Ò Ò ÓÒ Ø ÅÖ Ø ÐÑ ÈÖÓ Ð Ø Ò Ò ÌÙÖ Ò Ò ÓÒ Å ÓÒ ÖÒÐ Ò Ò Ô Ø ÖÑ Ò Ø Ò Ò ÌÙÖ Ò Ò ÓÒ Ó Ô Ø ÖÑ Ò Ø Ø ÐØ ÙØ ÙØ Ò ÓÐ ÓÒ ØØÓ ¹ Ð º ÂÓ Ò Å Ò Ö Ò Ý ÈÖÓ Ð Ø Ø Ð ÓÖ ØÑ Ø Î Ñ Ø ÐÐÒ ÔÖÓ Ð Ø Ð ÓÖ ØÑ º ÌÐÐ Ð ÓÖ ØÑ ÖÚ Ø Ò Ø Ø ØÒ ÓÐ Ó ØÙÐÓ Ò ÑÙ Ò Ö Ù ÙØ Òº ÖÓÒ Ô Ø ÖÑ Ò Ñ Ò ÓÒ ØØ ÒÝØ Ø Ö Ø ÐÐ ÖÓ Ú Ò Ð ÒØ ØÓ Ø Ø Ò ÙÙ ÐÐ ÖÚ Ù ÐÐ Ø ÖÚ ØØ º Ä ÓÒ Ö ØØ Ø ØÓ ÒÒ ÝÝ

Lisätiedot

Ì Ð Ú Ø ÚÙÙ ÐÙÓ Ø Á ÅÖ Ø ÐÑ ÇÐ ÓÓÒ : Æ Ê ÙÒ Ø Óº Ì Ð Ú Ø ÚÙÙ ÐÙÓ Ø ËÈ ( (Ò)) ÆËÈ ( (Ò)) ÑÖ Ø ÐÐÒ ÙÖ Ú Ø ËÈ ( (Ò)) ÓÒ Ò Ò ÐØ Ò Ä ÓÙ Ó ÓØ ÚÓ Ò ØÙÒÒ Ø Ø

Ì Ð Ú Ø ÚÙÙ ÐÙÓ Ø Á ÅÖ Ø ÐÑ ÇÐ ÓÓÒ : Æ Ê ÙÒ Ø Óº Ì Ð Ú Ø ÚÙÙ ÐÙÓ Ø ËÈ ( (Ò)) ÆËÈ ( (Ò)) ÑÖ Ø ÐÐÒ ÙÖ Ú Ø ËÈ ( (Ò)) ÓÒ Ò Ò ÐØ Ò Ä ÓÙ Ó ÓØ ÚÓ Ò ØÙÒÒ Ø Ø Ì Ð Ú Ø ÚÙÙ Á ÅÖ Ø ÐÑ ÇÐ ÓÓÒ Å Ø ÖÑ Ò Ø Ò Ò ÌÙÖ Ò Ò ÓÒ Ó ÔÝ ØÝÝ ÐÐ Ý ØØ Ðк Å Ò Ø Ð Ú Ø ÚÙÙ ÓÒ ÙÒ Ø Ó : Æ Æ Ñ (Ò) ÓÒ Å Ò Ð Ñ Ò ÑÙ Ø Ô Ó Ò Ñ Ñ ÐÙ ÙÑÖ ÙÒ Ø Ö Ø ÐÐ Ò Ò Ò Ô ØÙ Ý ØØ Øº ÂÓ Å Ò Ø Ð Ú Ø ÑÙ ÓÒ

Lisätiedot

ÍÐ ÓØ ÐÓ Ò Ô ÖØÓ ÃÙÒ Ô ÖÖ ØÒ Ð Ó ÙÐ ÓÒ ÝÑ ÓÒ Ò ØØ Ú Ñ ÐÐ Ñ ØÓ Ø ØÝÝÔ ÐÐ Ø Ú Ò Ð Ò ÙÙÖ ÓÚ ÐØÙ Ò Ö Ð Ò Ô ÖØÑ Ò Ñº Ó Ñ ÐÐ ÒÒ Ø Ò ½¼ Ü ½¼ Ñ ÐÙ ½¼ Ñ Ø Ö Ù

ÍÐ ÓØ ÐÓ Ò Ô ÖØÓ ÃÙÒ Ô ÖÖ ØÒ Ð Ó ÙÐ ÓÒ ÝÑ ÓÒ Ò ØØ Ú Ñ ÐÐ Ñ ØÓ Ø ØÝÝÔ ÐÐ Ø Ú Ò Ð Ò ÙÙÖ ÓÚ ÐØÙ Ò Ö Ð Ò Ô ÖØÑ Ò Ñº Ó Ñ ÐÐ ÒÒ Ø Ò ½¼ Ü ½¼ Ñ ÐÙ ½¼ Ñ Ø Ö Ù ØÙغ Ø Ò ÐÐ Ò Ò ÝÐ ÓÔ ØÓ Ì ÑÔ Ö Ò È Ð Ó ÐÑÓ ÒØ ÍÐ ÓØ ÐÓ Ò Ô ÖØÓ ÒØØ ÈÙ ÒØØ ºÔÙ Ç ÐÑ ØÓØ Ò ÍÐ ÓØ ÐÓ Ò Ô ÖØÓ ÃÙÒ Ô ÖÖ ØÒ Ð Ó ÙÐ ÓÒ ÝÑ ÓÒ Ò ØØ Ú Ñ ÐÐ Ñ ØÓ Ø ØÝÝÔ ÐÐ Ø Ú Ò Ð Ò ÙÙÖ ÓÚ ÐØÙ Ò Ö Ð Ò Ô ÖØÑ Ò Ñº

Lisätiedot

À Ö Ö Ð Ù Ø ÅÖ Ø ÐÑ ÙÒ Ø Ó : Æ Æ Ñ (Ò) = O(ÐÓ Ò) ÓÒ Ø Ð ÓÒ ØÖÙÓ ØÙÚ Ó ÐÐ Ò Ò ÙÒ Ø Ó Ó ÙÚ Ñ Ö ÓÒÓÒ ½ Ò (Ò) Ò ÒÖ ØÝ ÐÐ ÓÒ Ð ØØ Ú Ø Ð O( (Ò))º Ä Ù Å Ø Ø

À Ö Ö Ð Ù Ø ÅÖ Ø ÐÑ ÙÒ Ø Ó : Æ Æ Ñ (Ò) = O(ÐÓ Ò) ÓÒ Ø Ð ÓÒ ØÖÙÓ ØÙÚ Ó ÐÐ Ò Ò ÙÒ Ø Ó Ó ÙÚ Ñ Ö ÓÒÓÒ ½ Ò (Ò) Ò ÒÖ ØÝ ÐÐ ÓÒ Ð ØØ Ú Ø Ð O( (Ò))º Ä Ù Å Ø Ø Ì ÔÙÑ ØØÓÑÙÙ Ì Ó Ø ÐÐÒ ÓÒ ÐÑ ÓØ ÓÚ Ø Ô Ö ØØ Ö Ø Ú ÑÙØØ Ó Ò Ö Ø Ù Ú Ø Ò Ò Ô Ð ÓÒ Ø Ø Ð ØØ Ö Ø Ù ÓÐ ÝØÒÒ ÐÚÓÐÐ Ò Òº Í ÑÑ Ø ÓÐ ØØ Ú Ø ØØ ÆȹØÝ ÐÐ Ø ÔÖÓ Ð Ñ Ø ÓÚ Ø Ø ÔÙÑ ØØÓÑ ÒØÖ Ø Ð µ ÑÙØØ ØØ ÓÐ ØÓ Ø ØØÙº

Lisätiedot

Ð ØÖÓÒ Ø Ñ ÙÚÐ Ò Ø Ì ÑÙ Ê ÒØ ¹ Ó À Ð Ò ¾ º ÐÓ ÙÙØ ½ Ë Ò ÙÔ Ò ÝÒÒ Ò Ñ Ò Ö À ÄËÁÆ ÁÆ ÄÁÇÈÁËÌÇ Ì ØÓ Ò ØØ ÐÝØ Ø Ò Ð ØÓ Ë ÐØ ½ ÂÓ ÒØÓ ½ ¾ Å Ù Ö Ø ÐÑØ ¾ ¾º½ ÆÝ Ý Ø Ñ Ù Ö Ø ÐÑØ º º º º º º º º º º º º º º º º

Lisätiedot

Ð ØÖÓÒ Ò Ú Ø Ò Ô ÓÒ Ö Ø Ð ØÖÓÒ Ò Ò Ú Ð ÙÒ ÝÐ ÓÔ ØÓ ÖÑ Ò ØÙØ ÑÙ ¹ Ð ØÓ ½ ¼¹ÐÙÚÙÐÐ Ù Ø Ó ÐÙ Ð ØÖÓÒ Ô Ð ºËº ÓÙ Ð Ø ½ ¾ Ñ Ö Ú Ø Ö Ò Ñ Ò ÓÒ Ò ÚÙÓÖÓÚ ÙØÙ Ø

Ð ØÖÓÒ Ò Ú Ø Ò Ô ÓÒ Ö Ø Ð ØÖÓÒ Ò Ò Ú Ð ÙÒ ÝÐ ÓÔ ØÓ ÖÑ Ò ØÙØ ÑÙ ¹ Ð ØÓ ½ ¼¹ÐÙÚÙÐÐ Ù Ø Ó ÐÙ Ð ØÖÓÒ Ô Ð ºËº ÓÙ Ð Ø ½ ¾ Ñ Ö Ú Ø Ö Ò Ñ Ò ÓÒ Ò ÚÙÓÖÓÚ ÙØÙ Ø ØÙغ Ø Ò ÐÐ Ò Ò ÝÐ ÓÔ ØÓ Ì ÑÔ Ö Ò È Ð Ó ÐÑÓ ÒØ È Ð Ó ÐÑÓ ÒÒ Ò ØÓÖ ÒØØ ÈÙ ÒØØ ºÔÙ Ç ÐÑ ØÓØ Ò Ð ØÖÓÒ Ò Ú Ø Ò Ô ÓÒ Ö Ø Ð ØÖÓÒ Ò Ò Ú Ð ÙÒ ÝÐ ÓÔ ØÓ ÖÑ Ò ØÙØ ÑÙ ¹ Ð ØÓ ½ ¼¹ÐÙÚÙÐÐ Ù Ø Ó ÐÙ Ð ØÖÓÒ Ô Ð ºËº ÓÙ Ð

Lisätiedot

Symmetriatasot. y x. Lämmittimet

Symmetriatasot. y x. Lämmittimet Ì Ò ÐÐ Ò Ò ÓÖ ÓÙÐÙ ¹ÖÝ ÑĐ» ËÓÚ ÐÐ ØÙÒ Ø ÖÑÓ ÝÒ Ñ Ò Ð ÓÖ ØÓÖ Ó ÅÍÁËÌÁÇ ÆÓ»Ì ÊÅǹ ¹¾¼¼¼ ÔÚÑ ½¼º Ñ Ð ÙÙØ ¾¼¼¼ ÇÌËÁÃÃÇ Ø Ú ÒعØÙÐÓ ÐÑ Ð ØØ Ò ¹Ñ ÐÐ ÒÒÙ Ò ÖØ Ø ØÙØ ØÙÐÓ ÐÑ Ð Ø Ñ ÐÐ Ø Ä ÌÁ ̵ ÂÙ Ú Ó Ð ¹ÂÙÙ Ð

Lisätiedot

el. konsentraatio p puolella : n p = N c e (E cp E F ) el. konsentraatio n puolella : n n = N c e (E cn E F ) n n n p = e (Ecp Ecn) V 0 = kt q ln (

el. konsentraatio p puolella : n p = N c e (E cp E F ) el. konsentraatio n puolella : n n = N c e (E cn E F ) n n n p = e (Ecp Ecn) V 0 = kt q ln ( ÈÙÓÐ Ó ÓÑÔÓÒ ÒØØ Ò Ô ÖÙ Ø Ø À Ì Øº ½º È ÖÖ ÔÒ¹ÔÙÓÐ Ó Ð ØÓ Ò Ò Ö ÚÝ Ñ ÐÐ ÙÒ ÙÐ Ó Ò Ò ÒØØ ÓÒ ÒÓÐÐ º ÂÓ ÓÒØ Ø ÔÓØ ÒØ Ð Ò V 0 Ý ØÐ µ ÃÙÚ Ò ÚÙÐÐ µ Ù ÓÚ ÖØ Ý ØÐ Ø Ô¹ Ò¹ØÝÝÔ Ø Ò Ñ Ø Ö Ð Ò Ò Ö Ø ÓØ Ô¹ÔÙÓÐ ÐÐ ÙÙÖ

Lisätiedot

Ë ÐØ ½ ÂÓ ÒØÓ ½ ¾ Ç Å ÓÐ ÓØ ØÓ ÒØ Ø Ò Ö ¾ ¾º½ ÇÅ ÓÐ ÓÑ ÐÐ Ç Ä ÓÐ ÓÒÑÖ ØÝ Ð º º º º º º º º º º º º º º º ¾ ¾º¾ ÇÉÄ ÓÐ Ó Ý ÐÝ Ð º º º º º º º º º º º º

Ë ÐØ ½ ÂÓ ÒØÓ ½ ¾ Ç Å ÓÐ ÓØ ØÓ ÒØ Ø Ò Ö ¾ ¾º½ ÇÅ ÓÐ ÓÑ ÐÐ Ç Ä ÓÐ ÓÒÑÖ ØÝ Ð º º º º º º º º º º º º º º º ¾ ¾º¾ ÇÉÄ ÓÐ Ó Ý ÐÝ Ð º º º º º º º º º º º º ÝÚ ÝÑ Ô Ú ÖÚÓ Ò ÖÚÓ Ø Ð ÇÐ ÓÔÓ Ø Ø ØÓÑ ÐÐ Ø Ø ØÓ ÒÒ Ò ÐÐ ÒØ Ö Ø ÐÑ ÖØÓ ÖÐÙÒ À Ð Ò ¾ º½¼º¾¼¼ À ÄËÁÆ ÁÆ ÄÁÇÈÁËÌÇ Ì ØÓ Ò ØØ ÐÝØ Ø Ò Ð ØÓ Ë ÐØ ½ ÂÓ ÒØÓ ½ ¾ Ç Å ÓÐ ÓØ ØÓ ÒØ Ø Ò Ö ¾ ¾º½ ÇÅ ÓÐ ÓÑ ÐÐ Ç Ä ÓÐ ÓÒÑÖ

Lisätiedot

p q = (x 1 x 2 ) 2 + (y 1 y 2 ) 2 + (z 1 z 2 ) 2. x 1 y 1 z 1 x 2 y 2 z 2

p q = (x 1 x 2 ) 2 + (y 1 y 2 ) 2 + (z 1 z 2 ) 2. x 1 y 1 z 1 x 2 y 2 z 2 º ÅÓÒ ÙÐÓØØ Ø Ö ÒØ Ð Ð ÒØ º½ Â Ø ÙÚÙÙ Ó ØØ Ö Ú Ø Ø Ù Ò ÑÙÙØØÙ Ò ÙÒ Ø Ó Ò Ö ÒØ Ð Ð ÒØ ÐÑÔ Ø Ð ÓÒ Ò Ô Ò ÙÒ Ø Ó T(x, y, z.t) ÄÑÔ Ø Ð Ö ÒØØ ÐÑÓ ØØ Ñ Ò ÙÙÒØ Ò ÐÑÔ Ø Ð Ú ÚÓ Ñ ÑÑ Ò Ù Ò Ð ÐÑÔ Ø Ð Ö ÒØØ ½½ ÃÓÓÖ

Lisätiedot

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python Ohjelmoinnin perusteet Y Python T-106.1208 2.3.2009 T-106.1208 Ohjelmoinnin perusteet Y 2.3.2009 1 / 28 Puhelinluettelo, koodi def lue_puhelinnumerot(): print "Anna lisattavat nimet ja numerot." print

Lisätiedot

Referenced. Object. StateSet. Node. Geode

Referenced. Object. StateSet. Node. Geode ÇÔ ÒË Ò Ö Ô ¹Ó Ø Ì ÑÓºÌÓ Ú Ò ÒØѺ Ùغ ÌÑ Ó ÙÑ ÒØØ ÓÒ ØÝ Ò Ø Ô Ú Ø ØÒ Ø ÖÔ Ò ÑÙ Òº ½ Ø ÇÔ ÒË Ò Ö Ô ÇË µ ÓÒ ÇÔ Ò Ä Ò Ô Ö ÒÒ ØØÙ ¹ÙÓ Ö¹ ØÓ Ó ÓÒ Ú Ô Ø Ø Ú Ó ØÓ Ñ ÑÓÒ ÝÑÔÖ Ø º ÇË Ó¹ ÙÑ ÒØÓ ØÙ ÓÜÝ Ò¹Ó Ñ ØÓÒ

Lisätiedot

ÁÒ Ù Ø Ú Ø ØÝÝÔ Ø º Ñ Ö ÒÖ ÔÙÙÒ ÑÖ Ø ÐÑ Ú ØØ Ø Ò ÒÖ ÔÙÙ ÓÒ Ó Ó ØÝ Ø ÓÐÑÙ Ó ÓÒ Ð Ó ÓÒ Ú Ò Ó Ð ÔÙÙ ÓÚ Ø ÑÝ ÒÖ ÔÙ Ø º Ë ÚÓ Ò Ö Ó ØØ ÙÓÖ Ò Ø Ò ÖÝÌÖ ÑÔØÝ Æ

ÁÒ Ù Ø Ú Ø ØÝÝÔ Ø º Ñ Ö ÒÖ ÔÙÙÒ ÑÖ Ø ÐÑ Ú ØØ Ø Ò ÒÖ ÔÙÙ ÓÒ Ó Ó ØÝ Ø ÓÐÑÙ Ó ÓÒ Ð Ó ÓÒ Ú Ò Ó Ð ÔÙÙ ÓÚ Ø ÑÝ ÒÖ ÔÙ Ø º Ë ÚÓ Ò Ö Ó ØØ ÙÓÖ Ò Ø Ò ÖÝÌÖ ÑÔØÝ Æ ÁÒ Ù Ø Ú Ø ØÝÝÔ Ø º º ÁÒ Ù Ø Ú Ø ØÝÝÔ Ø Ø ¹ÑÖ ØØ ÐÝ º¾µ ÚÓ Ú Ø Ø ÑÝ Ø Ò ÑÖ Ø ÐØÚ Æ Ñ ÒØÝ ÑÝ ³ ³¹Ñ Ö Ò Ó ÐÐ ÔÙÓÐ ÐÐ º Ë Ò ÓÐ ÐÐ ØØÝ ØÝÔ ¹ÐÝ ÒØ º½µº ¾ ÁÒ Ù Ø Ú Ø ØÝÝÔ Ø º Ñ Ö ÒÖ ÔÙÙÒ ÑÖ Ø ÐÑ Ú ØØ Ø Ò ÒÖ

Lisätiedot

È Ú Ö Ù ÆÈ ÁÁ Ë ÑÓ Ò Ó Ò Ý ÝÑÝ ÚÙØ ØØ Ò ØÝ Ø ÙÒ ËØ Ô Ò ÓÓ Ä ÓÒ Ä Ú Ò ØØ Ð ÚØ ÆȹØÝ ÐÐ ÝÝ Ò ØØ Òº µ º Ù Ø ÙÙØ ¾¼¼ ¾»

È Ú Ö Ù ÆÈ ÁÁ Ë ÑÓ Ò Ó Ò Ý ÝÑÝ ÚÙØ ØØ Ò ØÝ Ø ÙÒ ËØ Ô Ò ÓÓ Ä ÓÒ Ä Ú Ò ØØ Ð ÚØ ÆȹØÝ ÐÐ ÝÝ Ò ØØ Òº µ º Ù Ø ÙÙØ ¾¼¼ ¾» È Ú Ö Ù ÆÈ Á à РÐÙÓ Ø È ÆÈ ÒÝØØÚØ ØÝ Ò Ö Ð ÐØ Ë ÐÚ Ø È ÆȺ µ È ÓÒ Ð ÐÙÓ Ó Ð ÓÒ ÙÙÐÙÑ Ò Ò Ð Ò ÚÓ Ò Ö Ø Ø ÔÓÐÝÒÓÑ Ø ÖÑ Ò Ø ÐÐ ÌÙÖ Ò Ò ÓÒ ÐÐ º µ ÆÈ ÓÒ Ð ÐÙÓ Ó Ð ÓÒ ÙÙÐÙÑ Ò Ò Ð Ò ÚÓ Ò Ú Ö Ó ÔÓÐÝÒÓÑ Ð Ð ÓÒ

Lisätiedot

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

Operaattoreiden ylikuormitus. Operaattoreiden kuormitus. Operaattoreiden kuormitus. Operaattoreista. Kuormituksesta C++ - perusteet Java-osaajille luento 5/7: operaattoreiden ylikuormitus, oliotaulukko, parametrien oletusarvot, komentoriviparametrit, constant, inline, Operaattoreiden ylikuormitus Operaattoreiden kuormitus

Lisätiedot

0 ex x = e 1. x + 3a 2x a = 2a xº. 1 3 (uvy) 3 (uxy) 3 (wxy) uvwxy (uvw) 1 3 (vwx)

0 ex x = e 1. x + 3a 2x a = 2a xº. 1 3 (uvy) 3 (uxy) 3 (wxy) uvwxy (uvw) 1 3 (vwx) Å ÌȽ ¼ ËÝÑ ÓÐ Ò Ò Ð ÒØ ¾ ÓÔ ½ Ð Ø ÃÙÖ Ò Ø ÚÓ Ø ÐØ ËÝÑ ÓÐ Ò Ð ÒÒ Ò ÙÖ ÐÐ ÓÔ Ø Ò Ø ØÓ ÓÒ Ò ÝØØÑ Ø ÔÙÚÐ Ò Ò Ñ Ø Ñ ØØ ÓÒ ÐÑ Ò¹ Ö Ø Ù º ÃÙÖ Ò Ø ÚÓ ØØ Ò ÓÒ ÒØ Ô ÖÙ Ú ÐÑ Ù Ø ÝÑ ÓÐ Ò Ð ÒØ Ò Ö Ó ØÙÒ Ò Å Ø Ñ ¹

Lisätiedot

815338A Ohjelmointikielten periaatteet Harjoitus 2 vastaukset

815338A Ohjelmointikielten periaatteet Harjoitus 2 vastaukset 815338A Ohjelmointikielten periaatteet 2015-2016. Harjoitus 2 vastaukset Harjoituksen aiheena on BNF-merkinnän käyttö ja yhteys rekursiivisesti etenevään jäsentäjään. Tehtävä 1. Mitkä ilmaukset seuraava

Lisätiedot

{(x, y) x {1,2,3,... }, y {2,4,6,...,10}, x < y}.

{(x, y) x {1,2,3,... }, y {2,4,6,...,10}, x < y}. Ä Ø ÓÓ Ø Ø º º Ä Ø ÓÓ Ø Ø Å Ø Ñ Ø ÓØ ÑÖ ØØ Ð ÚØ Ù Ò ÓÙ Ó ÑÔÐ ØØ ÐÐ ÒÓØ Ø ÓÐÐ Ò ÙØ Ò {(x, y) x {1,2,3,... }, y {2,4,6,...,10}, x < y}. À ÐÐ Ø Ö Ó Ú Ø Ú Ò ÒÓØ Ø ÓÒ Ð ØÓ ÐÐ Ò Ú ØÓ ØÓ Ò ÝÒØ Ò Ø Ú ÐÐ ÐÐ Ð Ø

Lisätiedot

Tutoriaaliläsnäoloista

Tutoriaaliläsnäoloista Tutoriaaliläsnäoloista Tutoriaaliläsnäolokierroksella voi nyt täyttää anomuksen läsnäolon merkitsemisestä Esim. tagi ei toiminut, korvavaltimon leikkaus, yms. Hyväksyn näitä omaa harkintaa käyttäen Tarkoitus

Lisätiedot

Ë ÐØ ½ ÂÓ ÒØÓ ½ ¾ Ç ÐÑ ØÓ Ò ÑÓ ÙÐ Ö Ó ÒØ ½ ÄÔ Ð Ú Ø ÓÑ Ò ÙÙ Ø Ô Ø Ó ÐÑÓ ÒØ Ô Ø º½ Ä ØÓ Ó Ø Ð ØÓ Ó Ø ÑÖ ØØ ÐÝØ º º º º º º º º º º º º º º º º º º º¾

Ë ÐØ ½ ÂÓ ÒØÓ ½ ¾ Ç ÐÑ ØÓ Ò ÑÓ ÙÐ Ö Ó ÒØ ½ ÄÔ Ð Ú Ø ÓÑ Ò ÙÙ Ø Ô Ø Ó ÐÑÓ ÒØ Ô Ø º½ Ä ØÓ Ó Ø Ð ØÓ Ó Ø ÑÖ ØØ ÐÝØ º º º º º º º º º º º º º º º º º º º¾ Ô Ø Ó ÐÑÓ ÒØ ÐÔ Ð Ú Ò ÓÑ Ò ÙÙ Ò ÑÓ ÙÐ ¹ Ö Ó ÒØ Ì ÑÓ ÌÙÓÑ Ò Ò À Ð Ò ½º º¾¼¼ Ë Ñ Ò Ö Ø ÐÑ À ÄËÁÆ ÁÆ ÄÁÇÈÁËÌÇ Ì ØÓ Ò ØØ ÐÝØ Ø Ò Ð ØÓ Ë ÐØ ½ ÂÓ ÒØÓ ½ ¾ Ç ÐÑ ØÓ Ò ÑÓ ÙÐ Ö Ó ÒØ ½ ÄÔ Ð Ú Ø ÓÑ Ò ÙÙ Ø Ô Ø Ó ÐÑÓ

Lisätiedot

T 2. f T (x)e i2π k T x dx. c k e i2π k T x = x dx. c k e i2π k T x = k Z. f T (x) =

T 2. f T (x)e i2π k T x dx. c k e i2π k T x = x dx. c k e i2π k T x = k Z. f T (x) = º ÓÙÖÖ¹ÑÙÙÒÒÓ ÓÙÖÖ Ò ÒØÖÐ Ð Ù ¹ ÓÐÐ Ò ÙÒ Ø ÓÒ f(x) PC(R) º½ ÓÙÖÖ¹ Ò ÐÝÝ º ÒÐ Òµ ÅÖ Ø ÐÐÒ T ¹ ÓÐÐ Ò Ò ÙÒ Ø Ó f T (x) = f(x), T 2 < x < T 2, ÃÓÑÔÐ Ò Ò ÓÙÖÖ¹ÖÖÓ Ò c k = 1 T T 2 T 2 f T (x)e i2π k T x dx.

Lisätiedot

À ÄËÁÆ ÁÆ ÄÁÇÈÁËÌÇ À ÄËÁÆ ÇÊË ÍÆÁÎ ÊËÁÌ Ì ÍÆÁÎ ÊËÁÌ Ç À ÄËÁÆÃÁ Ì ÙÒØ»Ç ØÓ ÙÐØ Ø»Ë Ø ÓÒ ÙÐØÝ Ä ØÓ ÁÒ Ø ØÙØ ÓÒ Ô ÖØÑ ÒØ Å Ø Ñ ØØ ¹ÐÙÓÒÒÓÒØ Ø ÐÐ Ò Ò Ì Ö

À ÄËÁÆ ÁÆ ÄÁÇÈÁËÌÇ À ÄËÁÆ ÇÊË ÍÆÁÎ ÊËÁÌ Ì ÍÆÁÎ ÊËÁÌ Ç À ÄËÁÆÃÁ Ì ÙÒØ»Ç ØÓ ÙÐØ Ø»Ë Ø ÓÒ ÙÐØÝ Ä ØÓ ÁÒ Ø ØÙØ ÓÒ Ô ÖØÑ ÒØ Å Ø Ñ ØØ ¹ÐÙÓÒÒÓÒØ Ø ÐÐ Ò Ò Ì Ö ÝÚ ÝÑ Ô Ú ÖÚÓ Ò ÖÚÓ Ø Ð Ä Ù ÓÑÔÓÒ ÒØ Ø Ã Ö Ì ÑÓÒ Ò À Ð Ò º º¾¼¼ Ç ÐÑ ØÓØÙÓØ ÒØÓ Ø ØÓ ÓÒ Ô Ð Ø ¹ Ñ Ò Ö À ÄËÁÆ ÁÆ ÄÁÇÈÁËÌÇ Ì ØÓ Ò ØØ ÐÝØ Ø Ò Ð ØÓ À ÄËÁÆ ÁÆ ÄÁÇÈÁËÌÇ À ÄËÁÆ ÇÊË ÍÆÁÎ ÊËÁÌ Ì ÍÆÁÎ ÊËÁÌ Ç À ÄËÁÆÃÁ

Lisätiedot

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python Ohjelmoinnin perusteet Y Python T-106.1208 28.2.2011 T-106.1208 Ohjelmoinnin perusteet Y 28.2.2011 1 / 46 Ohjelmointiprojektin vaiheet 1. Määrittely 2. Ohjelman suunnittelu (ohjelman rakenne ja ohjelman

Lisätiedot

ÓÑ ØÖ Ò Ø Ò Ø ØÓÖ ÒØ Ø Ã ÙÖ Ú Ø ÐØÚØ Ø ØÓÖ ÒØ Ø Ô ÖÙ ØÙÚ Ø Ñ ÒØÝÝÔ¹ Ô Ò Ò ÖÓØ ÐÐ Ò Ú ÖÙÙ Ø Ó Ó Ò ÐÐ ÓÒ Ô Ò ÑÔ Ó Ò Ò ÐÐ Ú Ð Ô Ò ÑÔ Ó Ò º ÒÑ Ö Ø ØÒ Ö Ö

ÓÑ ØÖ Ò Ø Ò Ø ØÓÖ ÒØ Ø Ã ÙÖ Ú Ø ÐØÚØ Ø ØÓÖ ÒØ Ø Ô ÖÙ ØÙÚ Ø Ñ ÒØÝÝÔ¹ Ô Ò Ò ÖÓØ ÐÐ Ò Ú ÖÙÙ Ø Ó Ó Ò ÐÐ ÓÒ Ô Ò ÑÔ Ó Ò Ò ÐÐ Ú Ð Ô Ò ÑÔ Ó Ò º ÒÑ Ö Ø ØÒ Ö Ö ØÙغ Ø Ò ÐÐ Ò Ò ÝÐ ÓÔ ØÓ Ì ÑÔ Ö Ò È Ð Ó ÐÑÓ ÒØ È Ð Ó ÐÑÓ ÒÒ Ý ÝÐÐ Ø ØÓÖ ÒØ Ø ÒØØ ÈÙ ÒØØ ºÔÙ Ç ÐÑ ØÓØ Ò ÓÑ ØÖ Ò Ø Ò Ø ØÓÖ ÒØ Ø Ã ÙÖ Ú Ø ÐØÚØ Ø ØÓÖ ÒØ Ø Ô ÖÙ ØÙÚ Ø Ñ ÒØÝÝÔ¹ Ô Ò Ò ÖÓØ ÐÐ Ò Ú ÖÙÙ Ø Ó Ó Ò ÐÐ

Lisätiedot

M Pv + q = 0, M = EIκ = EIv, (EIv ) + Pv = q. v(x) = Asin kx + B cos kx + Cx + D + v p. P kr = π2 EI L n

M Pv + q = 0, M = EIκ = EIv, (EIv ) + Pv = q. v(x) = Asin kx + B cos kx + Cx + D + v p. P kr = π2 EI L n ÄÙ Ù ½ ËØ Ð Ù Ú Ó Ó ÐÑ ½º½ ÈÙÖ Ø ØØÙ Ø ÚÙØ ØØÙ ÙÚ Ì Ô ÒÓ ÓØ Q v + q =, M = Q, ½º½µ ÑÑÓ ÐÐ ÙÚ ÐÐ M v + q =, M = EIκ = EIv, (EIv ) + v = q. ½º¾µ ½º µ ½º µ EI = Ú Ó ÆÙÖ Ù ÚÓ Ñ v (4) + k v = q EI, k = EI,

Lisätiedot

Tietueet. Tietueiden määrittely

Tietueet. Tietueiden määrittely Tietueet Tietueiden määrittely Tietue on tietorakenne, joka kokoaa yhteen eri tyyppistä tietoa yhdeksi asiakokonaisuudeksi. Tähän kokonaisuuteen voidaan viitata yhteisellä nimellä. Auttaa ohjelmoijaa järjestelemään

Lisätiedot

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

C-kielessä taulukko on joukko peräkkäisiä muistipaikkoja, jotka kaikki pystyvät tallettamaan samaa tyyppiä olevaa tietoa. Taulukot C-kielessä taulukko on joukko peräkkäisiä muistipaikkoja, jotka kaikki pystyvät tallettamaan samaa tyyppiä olevaa tietoa. Taulukon muuttujilla (muistipaikoilla) on yhteinen nimi. Jokaiseen yksittäiseen

Lisätiedot

F n (a) = 1 n { i : 1 i n, x i a }, P n (a, b) = F n (b) F n (a). P n (a, b) = 1 n { i : 1 i n, a < x i b }.

F n (a) = 1 n { i : 1 i n, x i a }, P n (a, b) = F n (b) F n (a). P n (a, b) = 1 n { i : 1 i n, a < x i b }. Ë ÐØ ½ ÂÓ ÒØÓ ½ ½º½ ÌÓ ÒÒ ÝÝ Ø Ð ØÓØ º º º º º º º º º º º º º º º º º º ½ ½º¾ À Ú ØÙØ Ö Ú Ò Ø ÑÔ Ö Ø ÙÑ Ø º º º º º º º º º º º ½ ½º ÌÓ ÒÒ ÝÝ Ñ ÐÐ Ø º º º º º º º º º º º º º º º º º º º º º º º ½º º½

Lisätiedot

A B P(A B) = P(A B) P(K) = 4 ( 52 5) =

A B P(A B) = P(A B) P(K) = 4 ( 52 5) = ËÁË ÄÌ ¾º º½ ÀÝÔ Ö ÓÑ ØÖ Ò Ò ÙÑ º º º º º º º º º º º º º º º ¾º º¾ Ì Ö ØÙ ÓØ ÒØ Ø ÓÐÐ ÙÙ º º º º º º º º º º º º º º ¾º ÇØ ÒØ Ô Ð ÙØØ Ò º º º º º º º º º º º º º º º º º º º º º º º º ¾º ÒÓÑ ÙÑ º º º

Lisätiedot

λ (i,j) (i 1,j) = µ R j, i = 1,... N B, j = 0,... N R λ (i,j) (i,j 1) = µ B i, i = 0,... N B, j = 1,... N R λ (i,j) (k,l) = 0, muulloin.

λ (i,j) (i 1,j) = µ R j, i = 1,... N B, j = 0,... N R λ (i,j) (i,j 1) = µ B i, i = 0,... N B, j = 1,... N R λ (i,j) (k,l) = 0, muulloin. Šع¾º½¼ ËÓÚ ÐÐ ØÙÒ Ñ Ø Ñ Ø Ò Ö Ó ØÝ Ø ¾¼¼ ¹¼¾¹½¾ Ì Ø ÐÙÒ Ñ ÐÐ ÒÒÙ Ø Å Ö ÓÚ Ò Ø ÙÐÐ Ì Ò ÐÐ Ò Ò ÓÖ ÓÙÐÙ Ì Ò ÐÐ Ò Ý Ò Ñ Ø Ñ Ø Ò Ó ØÓ ËÝ Ø Ñ Ò ÐÝÝ Ò Ð ÓÖ ØÓÖ Ó Ä ÙÖ ÂÙ Ò Ã Ò ¼¼ È Ë ÐØ ½ ÂÓ ÒØÓ ½ ¾ Ì Ø ÐÙÑ

Lisätiedot

d 00 = 0, d i0 = i, 1 i m, d 0j

d 00 = 0, d i0 = i, 1 i m, d 0j ¾º¾º ÁÌÇÁÆÌÁ Ì ÁË Æ Ä Ëà ÅÁÆ Æ ¾ º ÇÔ Ö Ø Ó ÓÒÓ ÌÌÈÈÈÌÄÌÅÈÈ Ò Ù Ø¹Öݹ¹ Ò¹¹¹Ø Ö Ø º ÇÔ Ö Ø Ó Ò ÐÙ ØØ ÐÓ Ò Ù ØÖÝ d ǫ ÒØ ÖÝ ǫ e ÒÙ ØÖÝ u ǫ ÒØ Ö Ý y s Ò ØÖÝ s ǫ ÒØ Ö ǫ t ÒØÖÝ ǫ e ÒØ Ö Ø ¾º¾ ØÓ ÒØ Ø ÝÝ Ò Ð

Lisätiedot

:: γ1. g 1. :: γ2. g 2

:: γ1. g 1. :: γ2. g 2 ÌÝÝÔÔ Ú ØØ Ø ¹ Ý ÝÑÝ Ø º º¾ Ò ÑÙÙØØÙ Ò Ý ÝÑÝ Ð Ø x g Ò e? :: α Ö Ø Ø Ò ÓÐ ÐÐ Ø ÑÓ Ò Ô Ö Ñ ØÖ ØØ ÑÒ ÙÒ Ø ÓÒ ÑÙØØ À ÐÐ ÝÐ Ø Ò ÐÐ ÑÙÙØØÙ Ó ÐÐ ÐÑ ÒØÙ ØÝÝÔÔ ÐÙÓ Ð Ó º Ë Ø ÑÙØ ÑÑ Ò ÑÓÒ Ý ÝÑÝ Ð Ø p g Ò e? ::

Lisätiedot

Tietorakenteet ja algoritmit - syksy 2015 1

Tietorakenteet ja algoritmit - syksy 2015 1 Tietorakenteet ja algoritmit - syksy 2015 1 Tietorakenteet ja algoritmit - syksy 2015 2 Tietorakenteet ja algoritmit Johdanto Ari Korhonen Tietorakenteet ja algoritmit - syksy 2015 1. JOHDANTO 1.1 Määritelmiä

Lisätiedot

F n (a) = 1 n {i : 1 i n, x i a}, P n (a,b) = F n (b) F n (a). P n (a,b) = 1 n {i : 1 i n, a < x i b}.

F n (a) = 1 n {i : 1 i n, x i a}, P n (a,b) = F n (b) F n (a). P n (a,b) = 1 n {i : 1 i n, a < x i b}. Ë ÐØ ½ ÂÓ ÒØÓ ½ ½º½ ÌÓ ÒÒ ÝÝ Ø Ð ØÓØ º º º º º º º º º º º º º º º º º º ½ ½º¾ À Ú ØÙØ Ö Ú Ò Ø ÑÔ Ö Ø ÙÑ Ø º º º º º º º º º º º ½ ½º ÌÓ ÒÒ ÝÝ Ñ ÐÐ Ø º º º º º º º º º º º º º º º º º º º º º º º ½º º½

Lisätiedot

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

AS-0.1103 C-ohjelmoinnin peruskurssi 2013: C-kieli käytännössä ja erot Pythoniin AS-0.1103 C-ohjelmoinnin peruskurssi 2013: C-kieli käytännössä ja erot Pythoniin Raimo Nikkilä Aalto-yliopiston sähkötekniikan korkeakoulu - Automaation tietotekniikan tutkimusryhmä 17. tammikuuta 2013

Lisätiedot

Taulukot. Jukka Harju, Jukka Juslin 2006 1

Taulukot. Jukka Harju, Jukka Juslin 2006 1 Taulukot Jukka Harju, Jukka Juslin 2006 1 Taulukot Taulukot ovat olioita, jotka auttavat organisoimaan suuria määriä tietoa. Käsittelylistalla on: Taulukon tekeminen ja käyttö Rajojen tarkastus ja kapasiteetti

Lisätiedot

ÃÙ ÖÓ ÚÙ ÓÔ Ø ØºÒ Ø ½ Ì ÓØ Ò Ù Ú Ö ÚÓÒ Ð Þ Ò Ð Ò ÚÙÒ¹ ÒÙ ¾ ÇÐ ÑÑÓ Ö ÒÒÝ ØÙ Ù ÖÙ ÓÔ ØÙÒ ÙÑ Ø Ö Ù ÐÙ Ý Ø Ò Ú Ö ÚÓÒ Ð Þ Ò Ð Ò Ö Ð Ò Ò Ò Ò ØÙÚ º Ê Ó Ø ØØÙ

ÃÙ ÖÓ ÚÙ ÓÔ Ø ØºÒ Ø ½ Ì ÓØ Ò Ù Ú Ö ÚÓÒ Ð Þ Ò Ð Ò ÚÙÒ¹ ÒÙ ¾ ÇÐ ÑÑÓ Ö ÒÒÝ ØÙ Ù ÖÙ ÓÔ ØÙÒ ÙÑ Ø Ö Ù ÐÙ Ý Ø Ò Ú Ö ÚÓÒ Ð Þ Ò Ð Ò Ö Ð Ò Ò Ò Ò ØÙÚ º Ê Ó Ø ØØÙ ½ Ì ÓØ Ò Ù Ú Ö ÚÓÒ Ð Þ Ò Ð Ò ÚÙÒ¹ ÒÙ ¾ ÇÐ ÑÑÓ Ö ÒÒÝ ØÙ Ù ÖÙ ÓÔ ØÙÒ ÙÑ Ø Ö Ù ÐÙ Ý Ø Ò Ú Ö ÚÓÒ Ð Þ Ò Ð Ò Ö Ð Ò Ò Ò Ò ØÙÚ º Ê Ó Ø ØØÙÐÓ Ò Ö ÙÖ Ó Ò ÖÙ ÚÓ ÔÖ ÒØ Ô ÒÒÙ ÓÒ ÓÐÐÙ ØÝ Ô ÐÓ ÖÙ ÑÙ Ý Ò Ö Þ Ø Ù ÚÓ Ø

Lisätiedot

Ä ÒÒ Ò Ú Ø ÚÙ٠̺ à ÖÚ º º¾¼¼ ̺ à ÖÚ µ Ä ÒÒ Ò Ú Ø ÚÙÙ º º¾¼¼ ½»

Ä ÒÒ Ò Ú Ø ÚÙ٠̺ à ÖÚ º º¾¼¼ ̺ à ÖÚ µ Ä ÒÒ Ò Ú Ø ÚÙÙ º º¾¼¼ ½» Ä ÒÒ Ò Ú Ø ÚÙ٠̺ à ÖÚ º º¾¼¼ ̺ à ÖÚ µ Ä ÒÒ Ò Ú Ø ÚÙÙ º º¾¼¼ ½» Î Ø ÚÙÙ Ò Ñ ØØ Ñ Ò Ò Ì Ö Ø ÐÐ Ò ÓØ Ò ÐØ º Å Ø Ò Ô Ð ÓÒ ÌÙÖ Ò Ò ÓÒ ÙÐÙØØ ØÙÒÒ Ø Ò Ò Á Ä Ø Ò Ð Ò ØÙÒÒ Ø Ú ÌÙÖ Ò Ò ÓÒ Ô Ù Ó Ð Ö Øصº Ä Ø Ò

Lisätiedot

Concurrency - Rinnakkaisuus. Group: 9 Joni Laine Juho Vähätalo

Concurrency - Rinnakkaisuus. Group: 9 Joni Laine Juho Vähätalo Concurrency - Rinnakkaisuus Group: 9 Joni Laine Juho Vähätalo Sisällysluettelo 1. Johdanto... 3 2. C++ thread... 4 3. Python multiprocessing... 6 4. Java ExecutorService... 8 5. Yhteenveto... 9 6. Lähteet...

Lisätiedot

f(x 1,x 2 ) = f 1 (x 1 )f 2 (x 2 ) x 2 f(x 1,x 2,...,x n ) = f 1 (x 1 )f 2 (x 2 ) f n (x n ) f 1 (x 1 ) = 1 6, ÙÒ x 1 S 1 f 2 (x 2 ) = = 2 x 2

f(x 1,x 2 ) = f 1 (x 1 )f 2 (x 2 ) x 2 f(x 1,x 2,...,x n ) = f 1 (x 1 )f 2 (x 2 ) f n (x n ) f 1 (x 1 ) = 1 6, ÙÒ x 1 S 1 f 2 (x 2 ) = = 2 x 2 Ú ËÁË ÄÌ ÅÓÒ ÙÐÓØ Ø ÙÑ Ø ½ º½ à ÙÐÓØØ Ø ÙÑ Ø º º º º º º º º º º º º º º º º º º º º º ½ º½º½ Ê ÙÒ ÙÑ Ø ÓÐÐ Ø ÙÑ Ø º º º º º º º º º ½ º½º¾ ÓÐÐ Ò Ó ÓØÙ ÖÚÓÒ ÓÑ Ò ÙÙ º º º º º º º º º ½ º½º À Ö Ö Ø Ñ ÐÐ

Lisätiedot

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python Ohjelmoinnin perusteet Y Python T-106.1208 1.3.2010 T-106.1208 Ohjelmoinnin perusteet Y 1.3.2010 1 / 36 Monikko Monikko (engl. tuple) muistuttaa listaa, mutta monikon sisältöä ei voi muuttaa sen jälkeen,

Lisätiedot

ÂÓ ÒØÓ ½ Ì ØÓ Ò ØØ ÐÝØ ÓÖ Ø ÒÒÓ ØÙÒ ÐÐ ÙÖ ØØ Ð Ö Ð Ø Ð ÒØ Ñ ÐÐ º ØÝ Ó Ø ÚÙÙØ Ø Òºµ Ç ÐÑÓ ÒÒ Ø ÒÒÓ ØÙÒ ÐÐ ØØ Ð Ö Ð Ø Ó ÐÑÓ ÒØ ¹ Ó ÐÑ Ò ÙÙÒÒ ØØ ÐÙØ Ô º

ÂÓ ÒØÓ ½ Ì ØÓ Ò ØØ ÐÝØ ÓÖ Ø ÒÒÓ ØÙÒ ÐÐ ÙÖ ØØ Ð Ö Ð Ø Ð ÒØ Ñ ÐÐ º ØÝ Ó Ø ÚÙÙØ Ø Òºµ Ç ÐÑÓ ÒÒ Ø ÒÒÓ ØÙÒ ÐÐ ØØ Ð Ö Ð Ø Ó ÐÑÓ ÒØ ¹ Ó ÐÑ Ò ÙÙÒÒ ØØ ÐÙØ Ô º ÂÓ ÒØÓ ½ ½ ÂÓ ÒØÓ ÃÙÖ ÐÐ ØÙØÙ ØÙØ Ò Ô ÖÙ Ø Ò ÙÒ Ø ÓÒ Ð Ø Ó ÐÑÓ ÒÒ Ø Ö ØÝ Ø Ñ Ø Ò ÖÓ ØÙØÙ Ø Ø Ð Ô ÖÙ Ø Ø Ó ÐÑÓ ÒÒ Ø Ó ÐÑÓ ÒØ Ð Ø À ÐÐ ÓÐÐ ÓÒ Ô Ó Ó ÐÑÓ ÙÒ Ø ÓÒ Ð Ø º ½ ÂÓ ÒØÓ ½ Ì ØÓ Ò ØØ ÐÝØ ÓÖ Ø ÒÒÓ ØÙÒ

Lisätiedot

P F [L θ U] P F [L θ U] 1 α, 0 < α < 1,

P F [L θ U] P F [L θ U] 1 α, 0 < α < 1, ËÁË ÄÌ º º½ º º¾ º º º º Ú Å Ö ÓÚ Ò Ì Ý Ú Ò ÔÝ ØÐ Ø ÙÙÖØ Ò ÐÙ Ù¹ Ò Ð º º º º º º º º º º º º º º º º º º º º º º º º º º º ¾ Â Ò Ò Ò ÔÝ ØÐ º º º º º º º º º º º º º º º º º º º º ¾ ËØÓ Ø Ò Ò ÙÔÔ Ò Ñ Ò

Lisätiedot

Tietorakenteet ja algoritmit Johdanto Lauri Malmi / Ari Korhonen

Tietorakenteet ja algoritmit Johdanto Lauri Malmi / Ari Korhonen Tietorakenteet ja algoritmit Johdanto Lauri Malmi / Ari 1 1. JOHDANTO 1.1 Määritelmiä 1.2 Tietorakenteen ja algoritmin valinta 1.3 Algoritmit ja tiedon määrä 1.4 Tietorakenteet ja toiminnot 1.5 Esimerkki:

Lisätiedot

À ÄËÁÆ ÁÆ ÄÁÇÈÁËÌÇ À ÄËÁÆ ÇÊË ÍÆÁÎ ÊËÁÌ Ì ÍÆÁÎ ÊËÁÌ Ç À ÄËÁÆÃÁ Ì ÙÒØ»Ç ØÓ ÙÐØ Ø»Ë Ø ÓÒ ÙÐØÝ Ä ØÓ ÁÒ Ø ØÙØ ÓÒ Ô ÖØÑ ÒØ Å Ø Ñ ØØ ¹ÐÙÓÒÒÓÒØ Ø ÐÐ Ò Ò Ì Ö

À ÄËÁÆ ÁÆ ÄÁÇÈÁËÌÇ À ÄËÁÆ ÇÊË ÍÆÁÎ ÊËÁÌ Ì ÍÆÁÎ ÊËÁÌ Ç À ÄËÁÆÃÁ Ì ÙÒØ»Ç ØÓ ÙÐØ Ø»Ë Ø ÓÒ ÙÐØÝ Ä ØÓ ÁÒ Ø ØÙØ ÓÒ Ô ÖØÑ ÒØ Å Ø Ñ ØØ ¹ÐÙÓÒÒÓÒØ Ø ÐÐ Ò Ò Ì Ö ÁÖÖÐ Ø Ò Ò ¹ Ö ÑÓÓØØÓÖ Â ÒÒ Ä Ù Ö Ò Ò À Ð Ò ¾ º º¾¼¼ Ç ÐÑ ØÓØÙÓØ ÒØÓ Ø ØÓ ÓÒ Ô Ð Ø Ñ Ò Ö À ÄËÁÆ ÁÆ ÄÁÇÈÁËÌÇ Ì ØÓ Ò ØØ ÐÝØ Ø Ò Ð ØÓ À ÄËÁÆ ÁÆ ÄÁÇÈÁËÌÇ À ÄËÁÆ ÇÊË ÍÆÁÎ ÊËÁÌ Ì ÍÆÁÎ ÊËÁÌ Ç À ÄËÁÆÃÁ Ì ÙÒØ»Ç

Lisätiedot

Ë Ø ÐÓ Ò Ô ÖØÓ Á ÔÖÓ Ó ÒØ ÃÙÒ Ð ÙØ Ò ÓÒ Ò Ö ÒÒÙ Ò ÐÐ ÓÒ ÝÐ Ò ÖÖ ÐÐ Ò Ú Ò Ô Ò Ó Ö ÒÒÙ Ò Ø ÐÓ Ø Ò ÝÚ Ñ ÐÐ ÓÒ Ù Ø ÐÐ Ò ÙÙÖ ÑÖ Ò Ø Ø ÓÐÙ Ö µ Ã ÙÐÓØØ Ò Ò Ñ

Ë Ø ÐÓ Ò Ô ÖØÓ Á ÔÖÓ Ó ÒØ ÃÙÒ Ð ÙØ Ò ÓÒ Ò Ö ÒÒÙ Ò ÐÐ ÓÒ ÝÐ Ò ÖÖ ÐÐ Ò Ú Ò Ô Ò Ó Ö ÒÒÙ Ò Ø ÐÓ Ø Ò ÝÚ Ñ ÐÐ ÓÒ Ù Ø ÐÐ Ò ÙÙÖ ÑÖ Ò Ø Ø ÓÐÙ Ö µ à ÙÐÓØØ Ò Ò Ñ ØÙغ Ø Ò ÐÐ Ò Ò ÝÐ ÓÔ ØÓ Ì ÑÔ Ö Ò È Ð Ó ÐÑÓ ÒØ Ë Ø ÐÓ Ò Ô ÖØÓ Ò ÝÚÝÝ Ð ÒØ ÒØØ ÈÙ ÒØØ ºÔÙ Ç ÐÑ ØÓØ Ò Ë Ø ÐÓ Ò Ô ÖØÓ Á ÔÖÓ Ó ÒØ ÃÙÒ Ð ÙØ Ò ÓÒ Ò Ö ÒÒÙ Ò ÐÐ ÓÒ ÝÐ Ò ÖÖ ÐÐ Ò Ú Ò Ô Ò Ó Ö ÒÒÙ Ò Ø ÐÓ Ø Ò ÝÚ Ñ

Lisätiedot

ÂÙÐ Ò Ú Ñ Ò Ò Ö ØÖÙ ØÙÙÖ Ø ÇÒ ØÖ Ý Ø ØÓÑ Ò ÙÐ Ò Ò Ú Ò Ò ØÓ ÐÐ Ò Ò ÐØ ÐÙÓØ ØØ Ú Ø ØÓ Ò º ÃÓ Ò Ð Ö ÓÒ ½ Ò ÑÑ Ò ÓØØ ÒÙØ Ú ÖÑ ÒØ Ø Ó ÓÒ ÙÐ Ò Ò Ú Ò Ò ÐØ Ð

ÂÙÐ Ò Ú Ñ Ò Ò Ö ØÖÙ ØÙÙÖ Ø ÇÒ ØÖ Ý Ø ØÓÑ Ò ÙÐ Ò Ò Ú Ò Ò ØÓ ÐÐ Ò Ò ÐØ ÐÙÓØ ØØ Ú Ø ØÓ Ò º ÃÓ Ò Ð Ö ÓÒ ½ Ò ÑÑ Ò ÓØØ ÒÙØ Ú ÖÑ ÒØ Ø Ó ÓÒ ÙÐ Ò Ò Ú Ò Ò ÐØ Ð ÌÁ ÌÇÌÍÊÎ ÇË ÁÁÁ ÂÙÐ Ò Ú Ñ Ò Ò Ö ØÖÙ ØÙÙÖ Ì ÑÓ Ã ÖÚ ¾º½½º¾¼¼ Ì ÑÓ Ã ÖÚ µ ÌÁ ÌÇÌÍÊÎ ÇË ÁÁÁ ÂÙÐ Ò Ú Ñ Ò Ò Ö ØÖÙ ØÙÙÖ ¾º½½º¾¼¼ ½» ÂÙÐ Ò Ú Ñ Ò Ò Ö ØÖÙ ØÙÙÖ Ø ÇÒ ØÖ Ý Ø ØÓÑ Ò ÙÐ Ò Ò Ú Ò Ò ØÓ ÐÐ Ò Ò ÐØ ÐÙÓØ

Lisätiedot

11/20: Konepelti auki

11/20: Konepelti auki Ohjelmointi 1 / syksy 2007 11/20: Konepelti auki Paavo Nieminen nieminen@jyu.fi Tietotekniikan laitos Informaatioteknologian tiedekunta Jyväskylän yliopisto Ohjelmointi 1 / syksy 2007 p.1/11 Tämän luennon

Lisätiedot

815338A Ohjelmointikielten periaatteet Harjoitus 3 vastaukset

815338A Ohjelmointikielten periaatteet Harjoitus 3 vastaukset 815338A Ohjelmointikielten periaatteet 2015-2016. Harjoitus 3 vastaukset Harjoituksen aiheena ovat imperatiivisten kielten muuttujiin liittyvät kysymykset. Tehtävä 1. Määritä muuttujien max_num, lista,

Lisätiedot

815338A Ohjelmointikielten periaatteet Harjoitus 6 Vastaukset

815338A Ohjelmointikielten periaatteet Harjoitus 6 Vastaukset 815338A Ohjelmointikielten periaatteet 2015-2016. Harjoitus 6 Vastaukset Harjoituksen aiheena on funktionaalinen ohjelmointi Scheme- ja Haskell-kielillä. Voit suorittaa ohjelmat osoitteessa https://ideone.com/

Lisätiedot

Algoritmit 1. Luento 3 Ti Timo Männikkö

Algoritmit 1. Luento 3 Ti Timo Männikkö Algoritmit 1 Luento 3 Ti 17.1.2017 Timo Männikkö Luento 3 Algoritmin analysointi Rekursio Lomituslajittelu Aikavaativuus Tietorakenteet Pino Algoritmit 1 Kevät 2017 Luento 3 Ti 17.1.2017 2/27 Algoritmien

Lisätiedot

139/ /11034 = 0.58

139/ /11034 = 0.58 ÄÙ Ù ÂÓ ÒØÓ Ø Ð ØÓÐÐ Ò ÔØØ ÐÝÝÒ º½ Ì Ð ØÓÐÐ Ò ÓÒ ÐÑ Ò ÐÙÓÒÒ Ì Ð ØÓÐÐ Ò Ñ ÐÐ ÒØ Ñ Ò Ò ÔØØ ÐÝ ØØ Ð Ú ÒØÓ Ò Ú Ø ÐÙ ÔÚ ÖÑÙÙØØ º ÓÐ Ø ØÒ ÐÚ ØØ ØÙÓÐÐ Ø Ø ÚÓ Ò Ø¹ Ø Ñ ØÒ Ø ÑÐÐ Ø Ø Ø Ø ÐРغ Ì Ð ØÓØ Ø Ò ÓÒ ÓÑ

Lisätiedot

ËÚÝØÝ Ò µ ÓÒ Ñ Ò ÔÑÖ Ò Ò Ø ÖÑ ÓÒ ÝØØ Ø ØÓ ÓÒ Ö ÓÒ ÐÓ ØÓÒÒÙØ Ñ Ð Ó Ù Ò Ò Ð ÙÔ Ö Ø Ñ Ö ØÝ Ø Ã ØØ ÐÐ Ø Ö Ó Ø Ø Ò ÒÝ ÝÒ Ø Ò Ó Ø Ó ÐÐ Ð Ø Ò ÚÖ Ú Ð ØÙ Ø ÔÔ

ËÚÝØÝ Ò µ ÓÒ Ñ Ò ÔÑÖ Ò Ò Ø ÖÑ ÓÒ ÝØØ Ø ØÓ ÓÒ Ö ÓÒ ÐÓ ØÓÒÒÙØ Ñ Ð Ó Ù Ò Ò Ð ÙÔ Ö Ø Ñ Ö ØÝ Ø Ã ØØ ÐÐ Ø Ö Ó Ø Ø Ò ÒÝ ÝÒ Ø Ò Ó Ø Ó ÐÐ Ð Ø Ò ÚÖ Ú Ð ØÙ Ø ÔÔ ØÙغ Ø Ò ÐÐ Ò Ò ÝÐ ÓÔ ØÓ Ì ÑÔ Ö Ò È Ð Ó ÐÑÓ ÒØ Ë Ò ² Ö Ø ÒØØ ÈÙ ÒØØ ºÔÙ Ç ÐÑ ØÓØ Ò ËÚÝØÝ Ò µ ÓÒ Ñ Ò ÔÑÖ Ò Ò Ø ÖÑ ÓÒ ÝØØ Ø ØÓ ÓÒ Ö ÓÒ ÐÓ ØÓÒÒÙØ Ñ Ð Ó Ù Ò Ò Ð ÙÔ Ö Ø Ñ Ö ØÝ Ø Ã ØØ ÐÐ Ø Ö Ó Ø Ø Ò ÒÝ ÝÒ Ø

Lisätiedot

2x1 + x 2 = 1 x 1 + x 2 = 3. x1 = 2 x 2 = 5. 2 ( 2)+5 = = 3. 5x1 x 2 = 1 10x 1 2x 2 = 2. ax1 +bx 2 = e cx 1 +dx 2 = f

2x1 + x 2 = 1 x 1 + x 2 = 3. x1 = 2 x 2 = 5. 2 ( 2)+5 = = 3. 5x1 x 2 = 1 10x 1 2x 2 = 2. ax1 +bx 2 = e cx 1 +dx 2 = f Ä Ò Ö Ð Ö Á ÇÙÐÙÒ ÝÐ ÓÔ ØÓ Å Ø Ñ ØØ Ø Ò Ø Ø Ò Ð ØÓ ¾¼½½ ÂÖÚ ÒÔ Ã Ö Ó ØØ ÒÙØ ÌÙÙÐ Ê Ô ØØ ¾ ½ Ä Ò Ö Ò Ò Ý ØÐ ÖÝ Ñ ½½ Ñ Ö µ Ê Ø Ý ØÐ 5x = 7 Ã ÖÖÓØ Ò Ý ØÐ ÔÙÓÐ ØØ Ò ÐÙÚÙÐÐ 5 1 ÓÐÐÓ Ò Ò 5 1 5x = 5 1 7 Ð x =

Lisätiedot

1, x 0; 0, x < 0. ε(x) = p i ε(x i).

1, x 0; 0, x < 0. ε(x) = p i ε(x i). ËÁË ÄÌ Ö ØØ Ý ÙÐÓØØ ÙÑ ½½½ º½ Ö ØØ ØÙÒÒ ÑÙÙØØÙ º º º º º º º º º º º º º º º º º º ½½½ º¾ ÖÒÓÙÐÐ Ò Ó Ø ÒÓÑ ÙÑ º º º º º º º º º º º º º º º ½½ º¾º½  ÙÑ Ò ÝÑÑ ØÖ º º º º º º º º º º º º º º º º º º º ½½

Lisätiedot

Ä ÒÒ Ò Ú Ø ÚÙ٠̺ à ÖÚ ¾º º¾¼¼ ̺ à ÖÚ µ Ä ÒÒ Ò Ú Ø ÚÙÙ ¾º º¾¼¼ ½»

Ä ÒÒ Ò Ú Ø ÚÙ٠̺ à ÖÚ ¾º º¾¼¼ ̺ à ÖÚ µ Ä ÒÒ Ò Ú Ø ÚÙÙ ¾º º¾¼¼ ½» Ä ÒÒ Ò Ú Ø ÚÙ٠̺ à ÖÚ ¾º º¾¼¼ ̺ à ÖÚ µ Ä ÒÒ Ò Ú Ø ÚÙÙ ¾º º¾¼¼ ½» ÃÙÖ Ò ÐØ Ø ÐØÙ ÐØ ½ ¾ Î Ø ÚÙÙ Ò Ñ ØØ Ñ Ò Ò ÄÙÓ È ÄÙÓ ÆÈ ÆȹØÝ ÐÐ ÝÝ ÆȹØÝ ÐÐ ÔÖÓ Ð ÑÓ Ì Ð Ú Ø ÚÙÙ ÄÙÓ ÈËÈ Ë Ú Ø Ò Ð Ù Ñ Ö ÈËÈ ¹ØÝ ÐÐ Ø

Lisätiedot

815338A Ohjelmointikielten periaatteet 2014-2015. Harjoitus 7 Vastaukset

815338A Ohjelmointikielten periaatteet 2014-2015. Harjoitus 7 Vastaukset 815338A Ohjelmointikielten periaatteet 2014-2015. Harjoitus 7 Vastaukset Harjoituksen aiheena on funktionaalinen ohjelmointi Scheme- ja Haskell-kielillä. Voit suorittaa ohjelmat osoitteessa https://ideone.com/

Lisätiedot

Otosavaruus ja todennäköisyys Otosavaruus Ë on joukko, jonka alkiot ovat kokeen tulokset Tapahtuma on otosavaruuden osajoukko

Otosavaruus ja todennäköisyys Otosavaruus Ë on joukko, jonka alkiot ovat kokeen tulokset Tapahtuma on otosavaruuden osajoukko ÌÓÒÒĐĐÓ ÝÝ ÔÖÙ ØØ Naiiveja määritelmiä Suhteellinen frekvenssi kun ilmiö toistuu Jos tehdas on valmistanut 1000000 kpl erästä tuotetta, joista 5013 ovat viallisia, niin todennäköisyys, että tuote on viallinen

Lisätiedot

Ohjelmoinnin peruskurssi Y1

Ohjelmoinnin peruskurssi Y1 Ohjelmoinnin peruskurssi Y1 CSE-A1111 21.9.2015 CSE-A1111 Ohjelmoinnin peruskurssi Y1 21.9.2015 1 / 25 Mahdollisuus antaa luentopalautetta Goblinissa vasemmassa reunassa olevassa valikossa on valinta Luentopalaute.

Lisätiedot

ÁÁ Ì Ö Ø Ó ÌÙÖÙÒ Ò Ì Ö Ø ÝÚ ÝØØÝ ÄÙÓÒÒÓÒØ Ø Ò ÝÑÔÖ Ø Ø Ò Ò Ø ÙÒÒ Ò Ø ÙÒØ Ò ÙÚÓ ØÓÒ Ó ÓÙ ½ º¼ º¾¼¼

ÁÁ Ì Ö Ø Ó ÌÙÖÙÒ Ò Ì Ö Ø ÝÚ ÝØØÝ ÄÙÓÒÒÓÒØ Ø Ò ÝÑÔÖ Ø Ø Ò Ò Ø ÙÒÒ Ò Ø ÙÒØ Ò ÙÚÓ ØÓÒ Ó ÓÙ ½ º¼ º¾¼¼ Å Ð Ë Ú Ð ÂÓ ÒØÓ Ð Ø ÓÖ Òº ØÖ ÙØ Ú Ø Ð Ø ÔÐÓÑ ØÝ ÁÁ Ì Ö Ø Ó ÌÙÖÙÒ Ò Ì Ö Ø ÝÚ ÝØØÝ ÄÙÓÒÒÓÒØ Ø Ò ÝÑÔÖ Ø Ø Ò Ò Ø ÙÒÒ Ò Ø ÙÒØ Ò ÙÚÓ ØÓÒ Ó ÓÙ ½ º¼ º¾¼¼ ÁÁÁ ÌÁÁÎÁËÌ ÄÅ Ì ÅÈ Ê Æ Ì ÃÆÁÄÄÁÆ Æ ÄÁÇÈÁËÌÇ Ì Ò ¹ ÐÙÓÒÒÓÒØ

Lisätiedot

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

4. Luokan testaus ja käyttö olion kautta 4.1 4. Luokan testaus ja käyttö olion kautta 4.1 Olion luominen luokasta Java-kielessä olio määritellään joko luokan edustajaksi tai taulukoksi. Olio on joukko keskusmuistissa olevia tietoja. Oliota käsitellään

Lisätiedot

Ð Ø Ù ÁÈË Ò ÁÈË ÓÒ ÁÈ¹Ú Ö ÓÔÖÓØÓ ÓÐÐ Ò Ð ÒÒÙ Ñ ÐÐ Ø ØÒ ÁÈ¹Ô ØØ Ò ÙÖ Ñ Ò Ò ÑÙÙÒØ Ñ Ò Òº ÁÈË ÓÒ ÝÒØÝÒÝØ ÙÙ Ò ÁÈÚ ¹ÔÖÓØÓ ÓÐÐ Ò Ý Ø Ý ÁÈÚ ÓÒ Ò ÁÈË Ò ÐÙÓÒØ

Ð Ø Ù ÁÈË Ò ÁÈË ÓÒ ÁÈ¹Ú Ö ÓÔÖÓØÓ ÓÐÐ Ò Ð ÒÒÙ Ñ ÐÐ Ø ØÒ ÁÈ¹Ô ØØ Ò ÙÖ Ñ Ò Ò ÑÙÙÒØ Ñ Ò Òº ÁÈË ÓÒ ÝÒØÝÒÝØ ÙÙ Ò ÁÈÚ ¹ÔÖÓØÓ ÓÐÐ Ò Ý Ø Ý ÁÈÚ ÓÒ Ò ÁÈË Ò ÐÙÓÒØ ÌÁ ÌÇÌÍÊÎ ÇË ÁÎ ÁÈË Ì ÑÓ Ã ÖÚ º½¾º¾¼¼ Ì ÑÓ Ã ÖÚ µ ÌÁ ÌÇÌÍÊÎ ÇË ÁÎ ÁÈË º½¾º¾¼¼ ½» Ð Ø Ù ÁÈË Ò ÁÈË ÓÒ ÁÈ¹Ú Ö ÓÔÖÓØÓ ÓÐÐ Ò Ð ÒÒÙ Ñ ÐÐ Ø ØÒ ÁÈ¹Ô ØØ Ò ÙÖ Ñ Ò Ò ÑÙÙÒØ Ñ Ò Òº ÁÈË ÓÒ ÝÒØÝÒÝØ ÙÙ Ò ÁÈÚ ¹ÔÖÓØÓ ÓÐÐ

Lisätiedot

Ç Ø ØÙØ ÐÑ Ò Ð Ø Ó ÐÐ Ã Ö ¹ÂÓÙ Ó Ê Ì ÑÔ Ö Ò ÝÐ ÓÔ ØÓ ÁÒ ÓÖÑ Ø ÓØ Ø Ò Ý»Ø Ó Ø ÚØ ÈÖÓ Ö Ù ¹ØÙØ ÐÑ Ç Å ÖØØ Ì Ò Ö ¾ º½º¾¼½½ Ì ÑÔ Ö Ò ÝÐ ÓÔ ØÓ ÁÒ ÓÖÑ Ø ÓØ Ø Ò Ý»Ø Ó Ø ÚØ Ã Ö ¹ÂÓÙ Ó Ê Ç Ø ØÙØ ÐÑ Ò Ð Ø Ó ÐÐ

Lisätiedot

Ë ÐØ ½ Ð Ø Ê Ø ¾ ¾ Ê Ò ÝÒØ ØÝ ÒØ ÐÝÒ ÐÓ ØØ Ñ Ò Ò ¾º½ Ç Ò ÝØØ Ê¹ ØÙÒÒÓÒ Ò º º º º º º º º º º º º º º º º ¾º¾ Ä Ô Ø Ø Ò ØÓØ º º º º º º º º º º º º º º

Ë ÐØ ½ Ð Ø Ê Ø ¾ ¾ Ê Ò ÝÒØ ØÝ ÒØ ÐÝÒ ÐÓ ØØ Ñ Ò Ò ¾º½ Ç Ò ÝØØ Ê¹ ØÙÒÒÓÒ Ò º º º º º º º º º º º º º º º º ¾º¾ Ä Ô Ø Ø Ò ØÓØ º º º º º º º º º º º º º º ÂÓ ÒØÓ Ñ ØÖ Ò Ð Ò Ö Ø Ò Ñ ÐÐ Ò ØØ ÐÝÝÒ Ê¹Ó ÐÑ ØÓÐÐ ÒÒ Ç Ö Ò Ò Å Ø Ñ Ø Ò Ø Ð ØÓØ Ø Ò ÐÓ Ó Ò Ð ØÓ Ì ÑÔ Ö Ò ÝÐ ÓÔ ØÓ ÐÓ ÙÙ ¾¼¼ Ë ÐØ ½ Ð Ø Ê Ø ¾ ¾ Ê Ò ÝÒØ ØÝ ÒØ ÐÝÒ ÐÓ ØØ Ñ Ò Ò ¾º½ Ç Ò ÝØØ Ê¹ ØÙÒÒÓÒ Ò º º

Lisätiedot

ÝÚ ÝÑ Ô Ú ÖÚÓ Ò ÖÚÓ Ø Ð Ä Ô ÐÚ ÐÙÚÝÐ Ò Ñ Ö ØÝ Ô ÐÚ ÐÙ ÙÙÒØ ÙØÙÒ Ö Ø ÐÑ ÒØØ Ë Ù Ó À Ð Ò º¾º¾¼¼ Ë Ñ Ò Ö ØÝ À ÄËÁÆ ÁÆ ÄÁÇÈÁËÌÇ Ì ØÓ Ò ØØ ÐÝØ Ø Ò Ð ØÓ

ÝÚ ÝÑ Ô Ú ÖÚÓ Ò ÖÚÓ Ø Ð Ä Ô ÐÚ ÐÙÚÝÐ Ò Ñ Ö ØÝ Ô ÐÚ ÐÙ ÙÙÒØ ÙØÙÒ Ö Ø ÐÑ ÒØØ Ë Ù Ó À Ð Ò º¾º¾¼¼ Ë Ñ Ò Ö ØÝ À ÄËÁÆ ÁÆ ÄÁÇÈÁËÌÇ Ì ØÓ Ò ØØ ÐÝØ Ø Ò Ð ØÓ ÝÚ ÝÑ Ô Ú ÖÚÓ Ò ÖÚÓ Ø Ð Ä Ô ÐÚ ÐÙÚÝÐ Ò Ñ Ö ØÝ Ô ÐÚ ÐÙ ÙÙÒØ ÙØÙÒ Ö Ø ÐÑ ÒØØ Ë Ù Ó À Ð Ò º¾º¾¼¼ Ë Ñ Ò Ö ØÝ À ÄËÁÆ ÁÆ ÄÁÇÈÁËÌÇ Ì ØÓ Ò ØØ ÐÝØ Ø Ò Ð ØÓ À ÄËÁÆ ÁÆ ÄÁÇÈÁËÌÇ À ÄËÁÆ ÇÊË ÍÆÁÎ ÊËÁÌ Ì ÍÆÁÎ ÊËÁÌ Ç

Lisätiedot

Ohjelmointitaito (ict1td002, 12 op) Kevät 2008. 1. Java-ohjelmoinnin alkeita. Tietokoneohjelma. Raine Kauppinen raine.kauppinen@haaga-helia.

Ohjelmointitaito (ict1td002, 12 op) Kevät 2008. 1. Java-ohjelmoinnin alkeita. Tietokoneohjelma. Raine Kauppinen raine.kauppinen@haaga-helia. Ohjelmointitaito (ict1td002, 12 op) Kevät 2008 Raine Kauppinen raine.kauppinen@haaga-helia.fi 1. Java-ohjelmoinnin alkeita Tietokoneohjelma Java-kieli ja Eclipse-ympäristö Java-ohjelma ja ohjelmaluokka

Lisätiedot

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python Ohjelmoinnin perusteet Y Python T-106.1208 20.1.2010 T-106.1208 Ohjelmoinnin perusteet Y 20.1.2010 1 / 40 Arvon pyytäminen käyttäjältä Käyttäjän antaman arvon voi lukea raw_input-käskyllä. Käskyn sulkujen

Lisätiedot

C-ohjelmoinnin peruskurssi. Pasi Sarolahti

C-ohjelmoinnin peruskurssi. Pasi Sarolahti C! C-ohjelmoinnin peruskurssi Pasi Sarolahti Mitä haluan oppia C-kurssilla? ja miksi? Tutustu lähimpään naapuriin Keskustelkaa miksi halusitte / jouduitte tulemaan kurssille 3 minuuttia è kootaan vastauksia

Lisätiedot

Ð Ù Ò Ø ÌÑ ÔÐÓÑ ØÝ ÓÒ Ø Ó Ì ÑÔ Ö Ò Ø Ò ÐÐ Ò ÝÐ ÓÔ ØÓÒ Å Ø Ñ Ø Ò Ð ØÓ Ò ÀÝÔ ÖÑ Ð ÓÖ ØÓÖ ÓÒ Ñ Ø Ñ Ø Ò ÓÔ ØÙ Ò ØØÑ ØÙع ÑÙ ÐÐ º ÌÝ Ý ØÝÚØ Ø Ò ÒÒÓ Ø Ú Ø Ø

Ð Ù Ò Ø ÌÑ ÔÐÓÑ ØÝ ÓÒ Ø Ó Ì ÑÔ Ö Ò Ø Ò ÐÐ Ò ÝÐ ÓÔ ØÓÒ Å Ø Ñ Ø Ò Ð ØÓ Ò ÀÝÔ ÖÑ Ð ÓÖ ØÓÖ ÓÒ Ñ Ø Ñ Ø Ò ÓÔ ØÙ Ò ØØÑ ØÙع ÑÙ ÐÐ º ÌÝ Ý ØÝÚØ Ø Ò ÒÒÓ Ø Ú Ø Ø Ä Æ Ä ÍÃÃÇÆ Æ Å Ø Ñ Ø Ò Ô ÖÙ Ø ØÓØ Ø Ò Ú Ö Ø Ö Ø ÐÙ ÓÔ ÒØÓ¹ Ñ Ò ØÝ Ò Ú ÙØØ Ú Ò Ø Ò Ò ÐÝ Ó ÒØ ÁÈÄÇÅÁÌ ÝÚ ÝØØÝ Ì Ò ¹ÐÙÓÒÒÓÒØ Ø ÐÐ Ò Ó ØÓÒ ÙÚÓ ØÓÒ Ó ÓÙ º½½º¾¼¼ º Ì Ö Ø Ø ÔÖÓ ÓÖ Ë ÔÔÓ ÈÓ ÓÐ Ò Ò ØÙØ Å ÀÙ ÓÐ

Lisätiedot

Osoitin ja viittaus C++:ssa

Osoitin ja viittaus C++:ssa Osoitin ja viittaus C++:ssa Osoitin yksinkertaiseen tietotyyppiin Osoitin on muuttuja, joka sisältää jonkin toisen samantyyppisen muuttujan osoitteen. Ohessa on esimerkkiohjelma, jossa määritellään kokonaislukumuuttuja

Lisätiedot

Ì Å ÈÙÐ Ò Ò Ø Ý Ø ÓØ Ñ ºÔÙÐ Ò Ò ÝÙº ÌÝ Ò Ò Ñ ÙØÓÑ Ø Ó ØÙ Ý Ø Ø Ù ÆÍÒ Ø¹Ø Ø Ù ÝÑÔÖ Ø Ì ØÐ Ò Ò Ð ÙØÓÑ Ø ÍÒ Ø Ì Ø Ò Ò ÆÍÒ Ø Ì Ø Ò ÒÚ ÖÓÒÑ ÒØ ÌÝ Ì ØÓØ Ò Ò

Ì Å ÈÙÐ Ò Ò Ø Ý Ø ÓØ Ñ ºÔÙÐ Ò Ò ÝÙº ÌÝ Ò Ò Ñ ÙØÓÑ Ø Ó ØÙ Ý Ø Ø Ù ÆÍÒ Ø¹Ø Ø Ù ÝÑÔÖ Ø Ì ØÐ Ò Ò Ð ÙØÓÑ Ø ÍÒ Ø Ì Ø Ò Ò ÆÍÒ Ø Ì Ø Ò ÒÚ ÖÓÒÑ ÒØ ÌÝ Ì ØÓØ Ò Ò Å ÈÙÐ Ò Ò ÙØÓÑ Ø Ó ØÙ Ý Ø Ø Ù ÆÍÒ Ø¹Ø Ø Ù ÝÑÔÖ Ø Ì ØÓØ Ò Ò Ò Ø ÒØÙØ ÐÑ ¾ º ÐÑ ÙÙØ ¾¼¼ ÂÝÚ ÝÐÒ ÝÐ ÓÔ ØÓ Ì ØÓØ Ò Ò Ð ØÓ ÂÝÚ ÝÐ Ì Å ÈÙÐ Ò Ò Ø Ý Ø ÓØ Ñ ºÔÙÐ Ò Ò ÝÙº ÌÝ Ò Ò Ñ ÙØÓÑ Ø Ó ØÙ Ý Ø Ø Ù ÆÍÒ Ø¹Ø Ø Ù

Lisätiedot

x 1 x 2 x n u 1 + v 1 u 2 + v 2 u n + v n λu 1 λu 2 λu n

x 1 x 2 x n u 1 + v 1 u 2 + v 2 u n + v n λu 1 λu 2 λu n ÇÈÌÁÅÇÁÆÆÁÆ È ÊÍËÌ Ì Ã Ó ÊÙÓØ Ð Ò Ò ¾ º ÝÝ ÙÙØ ¾¼¼ ¾ ÂÓ ÒØÓ ÃÙÖ Ò Ø ÚÓ ØØ Ò ÓÒ ØÙØÙ ØÙØØ Ø Ú ÐÐ ÑÔ Ò ÓÔØ ÑÓ ÒØ ¹ Ð ÓÖ ØÑ Ò Ò Ò ÝØØ Ò ÓÚ ÐÐÙØÙ º ÃÙÖ Ñ Ø Ö Ð ÒØÙÙ Ò Ð Ò Ö Ó Òº ÐÙ ÐÝ Ý Ø ÖÖ Ø Ò Ñ ØÖ Ð Ö Ø

Lisätiedot

Ì Ú Ø Ñ Ò Ó ÔÓÒ ÒØØ Ò Ô Ö Ò Ø ¹ Ú ÖÙÙ Ñ Ò ÓÚ Ù Ó Ó ÙÓ ÙÙ ¹ Ò ØÓÓÒº Ì ØÓØ Ø Ò ÔÖÓ Ö Ù ¹ØÙØ Ñ ÂÝÚ ÝÒ Ý ÓÔ ØÓ ½º Ó ÙÙØ ¾¼¼ º Ë ÚÙ ½ Ø º Ì ¹ Ú ÖÙÙ Ñ Ò Ý Ó

Ì Ú Ø Ñ Ò Ó ÔÓÒ ÒØØ Ò Ô Ö Ò Ø ¹ Ú ÖÙÙ Ñ Ò ÓÚ Ù Ó Ó ÙÓ ÙÙ ¹ Ò ØÓÓÒº Ì ØÓØ Ø Ò ÔÖÓ Ö Ù ¹ØÙØ Ñ ÂÝÚ ÝÒ Ý ÓÔ ØÓ ½º Ó ÙÙØ ¾¼¼ º Ë ÚÙ ½ Ø º Ì ¹ Ú ÖÙÙ Ñ Ò Ý Ó ÔÓÒ ÒØØ Ò Ô Ö Ò Ø ¹ Ú ÖÙÙ Ñ Ò ÓÚ Ù Ó Ó ÙÓ ÙÙ Ò ØÓÓÒ Ò Ó Ì ØÓØ Ø Ò ÔÖÓ Ö Ù ¹ØÙØ Ñ ÂÝÚ ÝÒ Ý ÓÔ ØÓ Å Ø Ñ Ø Ò Ø ØÓØ Ø Ò ØÓ ½º Ó ÙÙØ ¾¼¼ Ì Ú Ø Ñ Ò Ó ÔÓÒ ÒØØ Ò Ô Ö Ò Ø ¹ Ú ÖÙÙ Ñ Ò ÓÚ Ù Ó Ó ÙÓ ÙÙ ¹ Ò ØÓÓÒº Ì

Lisätiedot

Tietorakenteet (syksy 2013)

Tietorakenteet (syksy 2013) Tietorakenteet (syksy 2013) Harjoitus 1 (6.9.2013) Huom. Sinun on osallistuttava perjantain laskuharjoitustilaisuuteen ja tehtävä vähintään kaksi tehtävää, jotta voit jatkaa kurssilla. Näiden laskuharjoitusten

Lisätiedot

Ë Ò Ö Û Ã Ò ½½ ¼¾ ÇÒ Ö Ä ÓØ ¼ ¼ ¼ ÔÖ Ð ¾¼¼¼

Ë Ò Ö Û Ã Ò ½½ ¼¾ ÇÒ Ö Ä ÓØ ¼ ¼ ¼ ÔÖ Ð ¾¼¼¼ Ë Ò Ö Û Ã Ò ½½ ¼¾ ÇÒ Ö Ä ÓØ ¼ ¼ ¼ ÔÖ Ð ¾¼¼¼ ÓÒØ ÒØ ½ Í Ö ÓÙÑ ÒØ Ø ÓÒ ½º½ ÁÒØÖÓ ÙØ ÓÒ º º º º º º º º º º º º º º º º º º º º º º º º º º º º ½º¾ ÓÑÑ Ò Ä Ò ÇÔØ ÓÒ º º º º º º º º º º º º º º º º º º º º

Lisätiedot

8/20: Luokat, oliot ja APIt

8/20: Luokat, oliot ja APIt Ohjelmointi 1 / syksy 2007 8/20: Luokat, oliot ja APIt Paavo Nieminen nieminen@jyu.fi Tietotekniikan laitos Informaatioteknologian tiedekunta Jyväskylän yliopisto Ohjelmointi 1 / syksy 2007 p.1/8 Kohti

Lisätiedot

¾º C A {N A } K N A º A B N B

¾º C A {N A } K N A º A B N B Ú ÒØ Ò ÐÐ ÒØ ØÓ ÒÒÙ Ø Ì ÐÙÚÙ Ø Ö Ø ÐÐ Ò ÔÖÓØÓ ÓÐÐ Ó Ò ÚÙÐÐ Ó ÔÙÓÐ Ø ÚÓ Ú Ø Ó¹ Ô Ð Ø Ú Ñ Ø ØÓ ÒØ ØÓ Ò º ÌÐÐ Ò Ò ØÓ Ñ ÒÔ Ð ØØÝÝ Ù ÑÔ Ò Ø ØÓØÙÖÚ ÔÖÓØÓ ÓÐÐ Ò Ò ÑÑ ¹ Ò Ú Ò ÒÒ Ò Ù Ò Ú Ö Ò Ò Ò ØÓ Ñ ÒØ Ñ Ö Ø Ó

Lisätiedot

½ Ë ÐØ ½ ÂÓ ÒØÓ ½ ¾ ¹ÔÙÙ ¾ ¾º½ Ì Ø ÝØ ØØÝ ¹ÔÙÙ º º º º º º º º º º º º º º º º º º º º º º º º ÌÖ ¹ØÖ º½ ÑÔÖ Ø º º º º º º º º º º º º º º º º º º º º

½ Ë ÐØ ½ ÂÓ ÒØÓ ½ ¾ ¹ÔÙÙ ¾ ¾º½ Ì Ø ÝØ ØØÝ ¹ÔÙÙ º º º º º º º º º º º º º º º º º º º º º º º º ÌÖ ¹ØÖ º½ ÑÔÖ Ø º º º º º º º º º º º º º º º º º º º º ¹ØÖ Ø Ø Ø ÓÒ Ø ÐÐ ÒØ Ñ Ð ÚÝÐÐ Â Ó Å ÐÚ Ö À Ð Ò ¾¾º½¼º¾¼¼ Ë Ñ Ò Ö ØÝ À ÄËÁÆ ÁÆ ÄÁÇÈÁËÌÇ Ì ØÓ Ò ØØ ÐÝØ Ø Ò Ð ØÓ ½ Ë ÐØ ½ ÂÓ ÒØÓ ½ ¾ ¹ÔÙÙ ¾ ¾º½ Ì Ø ÝØ ØØÝ ¹ÔÙÙ º º º º º º º º º º º º º º º º º º º º º º

Lisätiedot

Harjoitustyö: virtuaalikone

Harjoitustyö: virtuaalikone Harjoitustyö: virtuaalikone Toteuta alla kuvattu virtuaalikone yksinkertaiselle olio-orientoituneelle skriptauskielelle. Paketissa on testaamista varten mukana kaksi lyhyttä ohjelmaa. Ohjeita Noudata ohjelman

Lisätiedot

Matematiikan tukikurssi

Matematiikan tukikurssi Matematiikan tukikurssi Kurssikerta 4 Jatkuvuus Jatkuvan funktion määritelmä Tarkastellaan funktiota f x) jossakin tietyssä pisteessä x 0. Tämä funktio on tässä pisteessä joko jatkuva tai epäjatkuva. Jatkuvuuden

Lisätiedot

on ØØÔ»» ÙÖ¹Û ºÓÖ Trends in Information Processing, Dombai, Russian Federation, May 16 20, 2017, published at

on ØØÔ»» ÙÖ¹Û ºÓÖ Trends in Information Processing, Dombai, Russian Federation, May 16 20, 2017, published at Ì È͹ÇÖ ÒØ ÌÖ Ê ÔÖ ÒØ Ø ÓÒ ÓÒ Ø Å Ø Ó Ó Ò Ò Ø Ê Ñ Ò Ö ÎÐ Ñ Ö ÎÓÖÓÒ Ò ÚкÚÓÖÓÒ ÒÖ ÜÔ Ö ºÓÑ Ò Ö Ý Å Ð ÓÚ Ñ Ð ÓÚÒ ØÙºÖÙ Ð Ý Ë ÓÐ Ú ºÛ ÓÐ Ú Ñ ÐºÓÑ ÐÑ Ö Þ ÖÓÚ ÐÑ Ö º Þ ÖÓÚ Ñ ÐºÖÙ ÆÓÖØ ¹ Ù Ù Ö Ð ÍÒ Ú Ö ØÝ ÁÒ

Lisätiedot

Esimerkkiprojekti. Mallivastauksen löydät Wroxin www-sivuilta. Kenttä Tyyppi Max.pituus Rajoitukset/Kommentit

Esimerkkiprojekti. Mallivastauksen löydät Wroxin www-sivuilta. Kenttä Tyyppi Max.pituus Rajoitukset/Kommentit Liite E - Esimerkkiprojekti E Esimerkkiprojekti Olet lukenut koko kirjan. Olet sulattanut kaiken tekstin, Nyt on aika soveltaa oppimiasi uusia asioita pienen, mutta täydellisesti muotoiltuun, projektiin.

Lisätiedot

Ì Đ Á ÑÓ ÀÓÖÔÔÙ Ø Ý Ø ÓØ ÓÖÔÔÙº ÝÙº ÌÝĐÓÒ Ò Ñ Ç ÐÑ ØÓÒ ØØĐ Ñ Ò Ò ÔÙÙØØ ÐÐ Ò Ú Ö ÐÐ Ò Ú ÒØÓ Ò ØÓÒ Đ ØØ ÐÝÝÒ Ì ØÐ Ò Ò Ð ËÓ ØÛ Ö Ú ÐÓÔÑ ÒØ ÓÖ Ñ Ò Ò ÖÖÓÒ

Ì Đ Á ÑÓ ÀÓÖÔÔÙ Ø Ý Ø ÓØ ÓÖÔÔÙº ÝÙº ÌÝĐÓÒ Ò Ñ Ç ÐÑ ØÓÒ ØØĐ Ñ Ò Ò ÔÙÙØØ ÐÐ Ò Ú Ö ÐÐ Ò Ú ÒØÓ Ò ØÓÒ Đ ØØ ÐÝÝÒ Ì ØÐ Ò Ò Ð ËÓ ØÛ Ö Ú ÐÓÔÑ ÒØ ÓÖ Ñ Ò Ò ÖÖÓÒ Ç ÐÑ ØÓÒ ØØĐ Ñ Ò Ò ÔÙÙØØ ÐÐ Ò Ú Ö ÐÐ Ò Ú ÒØÓ Ò ØÓÒ Đ ØØ ÐÝÝÒ Á ÑÓ ÀÓÖÔÔÙ Ì ØÓØ Ò Ò ÔÖÓ Ö Ù ¹ØÙØ ÐÑ Ç ÐÑ ØÓØ Ò Ò Ð Ò ½½º ÐÑ ÙÙØ ¾¼¼¾ ÂÝÚĐ ÝÐĐ Ò ÝÐ ÓÔ ØÓ Ì ØÓØ Ò Ò Ð ØÓ Ì Đ Á ÑÓ ÀÓÖÔÔÙ Ø Ý Ø ÓØ ÓÖÔÔÙº ÝÙº

Lisätiedot

ELM GROUP 04. Teemu Laakso Henrik Talarmo

ELM GROUP 04. Teemu Laakso Henrik Talarmo ELM GROUP 04 Teemu Laakso Henrik Talarmo 23. marraskuuta 2017 Sisältö 1 Johdanto 1 2 Ominaisuuksia 2 2.1 Muuttujat ja tietorakenteet...................... 2 2.2 Funktiot................................

Lisätiedot

ÌÑ ØÙØ ÐÑ ØØ Ð Ð Ô Ò ÐÙ Ù ØØ Ò ØØÝÑ Ø ØØÑ Øº ÐÙ ¹ ØØ Ð ÑÑ Ñ Ø Ñ ØØ Ø Ñ ÐÐ Ó Ò ÚÙÐÐ Ñ Ø Ñ Ø Ò ÓÔÔ Ñ ÐÐ ÚÐØØÑØØ ÑØ ÐÙÓÒÒÓÐÐ Ø ÐÙÚÙØ ÚÓ Ò ÓÒ ØÖÙÓ ÓÐÑ Ô Ý

ÌÑ ØÙØ ÐÑ ØØ Ð Ð Ô Ò ÐÙ Ù ØØ Ò ØØÝÑ Ø ØØÑ Øº ÐÙ ¹ ØØ Ð ÑÑ Ñ Ø Ñ ØØ Ø Ñ ÐÐ Ó Ò ÚÙÐÐ Ñ Ø Ñ Ø Ò ÓÔÔ Ñ ÐÐ ÚÐØØÑØØ ÑØ ÐÙÓÒÒÓÐÐ Ø ÐÙÚÙØ ÚÓ Ò ÓÒ ØÖÙÓ ÓÐÑ Ô Ý Ä Ô Ò ÐÙ Ù ØØ Ò ØØÑ Ò Ò Ð Ñ Ô Ð Ò ÚÙÐÐ Î ÐÐ Ã ÒÒÙÒ Ò Å Ø Ñ Ø Ò ÔÖÓ Ö Ù ¹ØÙØ ÐÑ ÂÝÚ ÝÐÒ ÝÐ ÓÔ ØÓ Å Ø Ñ Ø Ò Ø Ð ØÓØ Ø Ò Ð ØÓ ËÝ Ý ¾¼¼ ÌÑ ØÙØ ÐÑ ØØ Ð Ð Ô Ò ÐÙ Ù ØØ Ò ØØÝÑ Ø ØØÑ Øº ÐÙ ¹ ØØ Ð ÑÑ Ñ Ø Ñ ØØ Ø

Lisätiedot

Kirjoita oma versio funktioista strcpy ja strcat, jotka saavat parametrinaan kaksi merkkiosoitinta.

Kirjoita oma versio funktioista strcpy ja strcat, jotka saavat parametrinaan kaksi merkkiosoitinta. Tehtävä 63. Kirjoita oma versio funktiosta strcmp(),joka saa parametrinaan kaksi merkkiosoitinta. Tee ohjelma, jossa luetaan kaksi merkkijonoa, joita sitten verrataan ko. funktiolla. Tehtävä 64. Kirjoita

Lisätiedot

Ì ØÓØÙÖÚ Ò ÓØØ ÐÙØ Á Ì ØÓØÙÖÚ ÓÒ Ð º Ë ÙÖ Ú Ð Ø ÓÒ ÐÙ Ø ÐØÙ Ø ØÓØÙÖÚ Ò Ö Ó ¹ ÐÙ Ø º Â ÓØØ ÐÙ ÓÒ Ñ Ð Ó ÝÐ Ò Ò Ø ØÒ ÝÐ Ø ØÓØÙÖÚ Ò ÓÔÔ Ö Ó º À ÐÐ ÒÒÓÐÐ Ò

Ì ØÓØÙÖÚ Ò ÓØØ ÐÙØ Á Ì ØÓØÙÖÚ ÓÒ Ð º Ë ÙÖ Ú Ð Ø ÓÒ ÐÙ Ø ÐØÙ Ø ØÓØÙÖÚ Ò Ö Ó ¹ ÐÙ Ø º  ÓØØ ÐÙ ÓÒ Ñ Ð Ó ÝÐ Ò Ò Ø ØÒ ÝÐ Ø ØÓØÙÖÚ Ò ÓÔÔ Ö Ó º À ÐÐ ÒÒÓÐÐ Ò ÌÁ ÌÇÌÍÊÎ Ó Á ̺ à ÖÚ ËÝÝ ÙÙ ¾¼¼ ̺ à ÖÚ µ ÌÁ ÌÇÌÍÊÎ Ó Á ËÝÝ ÙÙ ¾¼¼ ½» ½ Ì ØÓØÙÖÚ Ò ÓØØ ÐÙØ Á Ì ØÓØÙÖÚ ÓÒ Ð º Ë ÙÖ Ú Ð Ø ÓÒ ÐÙ Ø ÐØÙ Ø ØÓØÙÖÚ Ò Ö Ó ¹ ÐÙ Ø º  ÓØØ ÐÙ ÓÒ Ñ Ð Ó ÝÐ Ò Ò Ø ØÒ ÝÐ Ø ØÓØÙÖÚ Ò

Lisätiedot

È ÌÀÇƹÇÀ ÄÅÇÁÆÆÁÆ ËÇÎ ÄÄÍÃËÁ Å ÌÊÁÁËÁÄ Ëà ÆÌ Æ ÌÁÄ ËÌÇÌÁ Ì Ë Æ Â ÆÍÅ ÊÁË Æ Å Ì Å ÌÁÁÃÃ Æ ÄÍÃÁÇÄ ÁËÁÄÄ Ì Ò Ï ÐÐ Ö ¹Ä Ò ÈÖÓ Ö Ù ¹ØÙØ ÐÑ Å ÖÖ ÙÙ ¾¼¼ Å Ì Å ÌÁÁÃ Æ Ä ÁÌÇË ÌÍÊÍÆ ÄÁÇÈÁËÌÇ ÌÍÊÍÆ ÄÁÇÈÁËÌÇ Å

Lisätiedot

ÁÁ ÌÁÁÎÁËÌ ÄÅ Ì ÅÈ Ê Æ Ì ÃÆÁÄÄÁÆ Æ ÄÁÇÈÁËÌÇ Ì Ò ¹ÐÙÓÒÒÓÒØ Ø ÐÐ Ò Ò ÓÙÐÙØÙ Ó ÐÑ ÄÌÁÇ ËÍÎÁ È Ö ÒÑ ÐÐ ¾¼¼ ¾¼¼ Ø Ô ØÙÒ Ò Ð ÒÒ ÓÒÒ ØØÓÑÙÙ ¹ Ò Ò ÐÝ Ó ÒØ Ý Ú

ÁÁ ÌÁÁÎÁËÌ ÄÅ Ì ÅÈ Ê Æ Ì ÃÆÁÄÄÁÆ Æ ÄÁÇÈÁËÌÇ Ì Ò ¹ÐÙÓÒÒÓÒØ Ø ÐÐ Ò Ò ÓÙÐÙØÙ Ó ÐÑ ÄÌÁÇ ËÍÎÁ È Ö ÒÑ ÐÐ ¾¼¼ ¾¼¼ Ø Ô ØÙÒ Ò Ð ÒÒ ÓÒÒ ØØÓÑÙÙ ¹ Ò Ò ÐÝ Ó ÒØ Ý Ú ËÍÎÁ ÄÌÁÇ ÈÁÊà ÆÅ ÄÄ ¾¼¼ ¾¼¼ Ì È ÀÌÍÆ Á Æ ÄÁÁà ÆÆ ¹ ÇÆÆ ÌÌÇÅÍÍÃËÁ Æ Æ Ä ËÇÁÆÌÁ ËÎ ÊÃÃÇÂ Æ ÎÍÄÄ ÔÐÓÑ ØÝ Ì Ö Ø Ð ÓÔ ØÓÒÐ ØÓÖ Ó ÌÙÖÙÒ Ò Ì Ö Ø ÝÚ ÝØØÝ ÄÙÓÒÒÓÒØ Ø Ò ÝÑÔÖ Ø Ø Ò Ò Ø ÙÒÒ Ò Ø ÙÒØ Ò ÙÚÓ ØÓÒ Ó ÓÙ

Lisätiedot

Tietorakenteet ja algoritmit syksy Laskuharjoitus 1

Tietorakenteet ja algoritmit syksy Laskuharjoitus 1 Tietorakenteet ja algoritmit syksy 2012 Laskuharjoitus 1 1. Tietojenkäsittelijä voi ajatella logaritmia usein seuraavasti: a-kantainen logaritmi log a n kertoo, kuinka monta kertaa luku n pitää jakaa a:lla,

Lisätiedot

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python Ohjelmoinnin perusteet Y Python T-106.1208 21.1.2009 T-106.1208 Ohjelmoinnin perusteet Y 21.1.2009 1 / 32 Tyypeistä Monissa muissa ohjelmointikielissä (esim. Java ja C) muuttujat on määriteltävä ennen

Lisätiedot

139/ /11034 = 0.58

139/ /11034 = 0.58 Ú ËÁË ÄÌ ÅÓÒ ÙÐÓØ Ø ÙÑ Ø ½ º½ à ÙÐÓØØ Ø ÙÑ Ø º º º º º º º º º º º º º º º º º º º º º ½ º½º½ Ê ÙÒ ÙÑ Ø ÓÐÐ Ø ÙÑ Ø º º º º º º º º º ½ º½º¾ ÓÐÐ Ò Ó ÓØÙ ÖÚÓÒ ÓÑ Ò ÙÙ º º º º º º º º º ½ º½º À Ö Ö Ø Ñ ÐÐ

Lisätiedot

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

IDL - proseduurit. ATK tähtitieteessä. IDL - proseduurit IDL - proseduurit 25. huhtikuuta 2017 Viimeksi käsiteltiin IDL:n interaktiivista käyttöä, mutta tämä on hyvin kömpelöä monimutkaisempia asioita tehtäessä. IDL:llä on mahdollista tehdä ns. proseduuri-tiedostoja,

Lisätiedot

ITKP102 Ohjelmointi 1 (6 op)

ITKP102 Ohjelmointi 1 (6 op) ITKP102 Ohjelmointi 1 (6 op) Tentaattori: Antti-Jussi Lakanen 20. huhtikuuta 2018 Vastaa kaikkiin tehtäviin. Tee kukin tehtävä omalle konseptiarkille. Noudata ohjelmointitehtävissä kurssin koodauskäytänteitä.

Lisätiedot

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

Sisällys. 1. Omat operaatiot. Yleistä operaatioista. Yleistä operaatioista Sisällys 1. Omat operaatiot Yleistä operaatioista. Mihin operaatioita tarvitaan? Oman operaation määrittely. Yleisesti, nimeäminen ja hyvä ohjelmointitapa, määreet, parametrit ja näkyvyys. HelloWorld-ohjelma

Lisätiedot

815338A Ohjelmointikielten periaatteet 2015-2016. Harjoitus 5 Vastaukset

815338A Ohjelmointikielten periaatteet 2015-2016. Harjoitus 5 Vastaukset 815338A Ohjelmointikielten periaatteet 2015-2016. Harjoitus 5 Vastaukset Harjoituksen aiheena ovat aliohjelmat ja abstraktit tietotyypit sekä olio-ohjelmointi. Tehtävät tehdään C-, C++- ja Java-kielillä.

Lisätiedot

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

Pythonin alkeet Syksy 2010 Pythonin perusteet: Ohjelmointi, skriptaus ja Python Pythonin alkeet Syksy 2010 Pythonin perusteet: Ohjelmointi, skriptaus ja Python 8. marraskuuta 2010 Ohjelmointi Perusteet Peruskäsitteitä Olio-ohjelmointi Pythonin alkeet Esittely Esimerkkejä Muuttujat

Lisätiedot