Algoritmi ja abstraktio

Koko: px
Aloita esitys sivulta:

Download "Algoritmi ja abstraktio"

Transkriptio

1 Algoritmit ja tietorakenteet / HL 1 Algoritmi ja abstraktio Algoritmin määrittely yleisesti Algoritmi on täsmällisesti määritelty äärellinen sarja toimenpiteitä, jotka toteuttamalla saadaan aikaan jonkin määrätyn tehtävän suoritus tai määrätyn probleeman ratkaisu. Algoritmi tietotekniikassa Tietotekniikassa tutkitaan sellaisia algoritmeja, joissa toimenpiteiden suorittajana on tietokone. Useimmiten kuitenkin algoritmien kirjoittajana on ihminen. Ohjelmointikieli on algoritmien kuvauskieli. Tietotekniikkatiedettä (Computer science) voidaan kutsua laajasti algoritmitieteeksi (algorithm science). Tietokone on kone, joka on suunniteltu suorittamaan algoritmeja (HW). Ohjelma on algoritmin kuvaus (SW). Miten suunnitellaan ohjelma, joka ratkaisee annetun ongelman? Usein perinteisessä proseduraalisessa ajattelutavassa ajatellaan ohjelman laatimisen olevan karkeasti kaksivaiheisen seuraavasti: 1. Suunnitellaan algoritmi, joka ratkaisee annetun ongelman. Tässä tulee käyttää ilmaisukieltä, joka sopii ihmiselle, jotta ihminen kykenee kehittämään ongelman ratkaisun kannalta oikean algoritmin (ei siis tietokoneen kannalta katsoen oikean). Ratkaisualgoritmi on riippumaton ohjelmointikielestä. 2. Toteutetaan algoritmi ohjelmointikielellä. Algoritmi muunnetaan tietokoneen ohjelmointikielelle. Kysymys: Millä tavalla voitaisiin lähentää vaihetta 1 ja 2, ts. millä tavalla ohjelmaa kirjoitettaessa voitaisiin pysyä mahdollisimman lähellä ihmisen kieltä ja ihmisen helposti ymmärtämää ilmaisutapaa siten, että kohdassa 1 syntynyt algoritmi, olisi jo hyvin lähellä ohjelmointikielen ilmaisua. Vastaus: Käyttämällä abstraktiota. Abstraktio yleensä Ihminen käyttää kaikessa ajattelussa abstraktiota. Abstraktio on väline hallita monimutkaisia asioita. Ihminen ei pidä mielessään monimutkaisten asioiden kaikkia yksityiskohtia yhtäaikaa, vaan hän käyttää abstraktioita. Monimutkaisilla asioilla voi olla useita abstraktiotasoja. Ylimmällä abstraktiotasolla koko monimutkaisuus korvataan yhdellä käsitteellä (esim. auto). Autoa ajettaessa käytetään erilaista abstraktiomallia kuin autosta vikaa etsittäessä. Abstraktiomalli on hierarkkinen. Ohjelmoinnissa voidaan ja kannattaa käyttää abstraktiota. Se tarkoittaa, että monimutkaiset toiminnat jaetaan osatehtäviin ja ne edelleen osatehtäviin jne. Samalla tavalla yhteen kuuluvat tiedot muodostavat ylimmän abstraktiotason ja tiedot voidaan jakaa alaryhmiin, jotka taas voidaan jakaa alaryhmiin jne.

2 Algoritmit ja tietorakenteet / HL 2 Toimintojen abstraktio Esimerkkinä toimintojen abstraktiosta käsitellään neliöjuuren laskeminen Newtonin menetelmän avulla. Tehtävässä on useita vaiheita, mutta ylimmällä abstraktiotasolla kyseessä on neliöjuuren laskenta. Neliöjuuren laskenta Newtonin menetelmällä voidaan kuvata matematiikan kielellä seuraavasti: x i+1 = (a/x i + x i ) / 2, missä a on juurrettava ja x i on i:s approksimaatio juurelle. Approksimaatio x i+1 voidaan hyväksyä juureksi, jos x i 2 - a < Laskenta Newtonin menetelmällä voidaan jakaa osatehtäviin, joita ovat juurrettavan_luku alkuapproksimaation_luku approksimaation_parannus approksimaation_testaus juuren_tulostus Tarkoitus on nyt toteuttaa algoritmi yllä olevalla abstraktiotasolla. Algoritmin rakennuspalikat ovat tunnetusti: peräkkäisrakenne, ehtorakenne ja toistorakenne. Näillä rakenteilla ilmaistaan siis säännöt, joiden mukaan yllämainittuja osatehtäviä suoritetaan. Osatehtävät toteutetaan ohjelmointikielen funktioilla (aliohjelmilla). Tällä tasolla on vielä ratkaistava, mitä tietoja kukin yllämainituista osatehtävistä tarvitsee ja mitä tietoja se tuottaa. Nämä tiedot ilmaistaan funktioiden parametreillä. Tässä vaiheessa laadimme siis algoritmia siten, että syntyy samalla lopullista ohjelmaa. Algoritmin kuvaus (C-kielinen/ suomenkielinen pääohjelma) on alla: void main (void) { float juurrettava, approksimaatio; int riittavan_hyva; lue(&juurrettava); lue(&approksimaatio); testaa(approksimaatio, juurrettava, &riittavan_hyva) while (!riittavan_hyva) { paranna(&approksimaatio, juurrettava); testaa(approksimaatio,juurrettava, &riittavan_hyva); tulosta(approksimaatio); Tässä vaiheessa on huomattava, että algoritmin kuvauksessa (ohjelmassa) ei ole vielä otettu mitään kantaa seuraaviin asioihin: miten juurrettava ja approksimaatio luetaan, miten approksimaation hyvyys testataan tai miten approksimaatiota parannetaan. Suunnittelija on siis tässä vaiheessa vapautettu näiden yksityiskohtien pohtimisesta. Nämä asiat ratkaistaan seuraavalla alemmalla abstraktiotasolla. Tällöin on huomattava, että osatehtävien suoritustapa on riippumaton toisten osatehtävien suoritustavasta. Tämä merkitsee sitä, että kun siirrytään alemmalle abstraktiotasolle, voidaan kerrallaan keskittyä yhteen pieneen muusta ympäristöstä riippumattomaan osatehtävään. Funktio (aliohjelma) on toimintojen abstraktioväline ohjelmointikielessä.

3 Algoritmit ja tietorakenteet / HL 3 Tehtävä. Kirjoita edellisessä ohjelmassa olevien funktioiden toteutus ja testaa ohjelma kokonaisuudessaan. Tässä esimerkkitehtävässä käsiteltävät tiedot ovat hyvin yksinkertaisia. Niiden hallintaan ei kummempia abstraktiomalleja tarvita. Näin ei kuitenkaan useimmiten ole asia vaan, käsiteltävien tietojenkin hallintaan tarvitaan abstraktiomallia. Tähän palataan hiukan myöhemmin. Yhteenvetona vielä tällaisen ohjelman kehittämisen vaiheet ovat: 1. Jaetaan tehtävä osiin (ensimmäinen taso) 2. Tehdään osista funktiot 3. Selvitetään näiden osien suoritussäännöt -peräkkäisrakenne (funktiokutsut peräkkäin) -ehtorakenne (if-rakenne) -toistorakenne (while) 4. Lisätään ohjelmaan tiedot (muuttujat) 5. Selvitetään funktioiden input/output-tiedot (parametrit) 6. Ohjelman ylin taso on valmis. Siirrytään taso alaspäin eli toteutetaan funktiot yksi kerrallaan. Tällaista lähestymistapaa sanotaan proseduraaliseksi, koska siinä päähuomio keskittyy toimintoihin. Käsiteltävän tiedon esitystapaan kiinnitetään vain toissijaista huomiota. Seuraavaksi tutustutaan tietojen abstraktioon. Lopulta kun sitten yhdistetään nämä molemmat ja probleemaa tarkastellaan tietojen kokonaisuuksina ja toimintojakin tarkastellaan näiden tietokokonaisuuksien operaationa päästään ns. olioperustaiseen tarkastelutapaan. Mutta nyt menemme seuraavaksi tietojen abstraktioon yksinkertaisen esimerkin avulla. Tietojen abstraktio Toiminnat kohdistuvat yleensä aina tietoihin. Suuren tietomäärän hallinta on samalla tavalla monimutkaista kuin laajan toimintojen kokonaisuuden. Jos käytämme abstraktiota vain toiminnoissa eikä tiedoissa, syntyy ohjelman selkeydessä selvä ristiriita, jota seuraava esimerkkiohjelma valaisee. Ohjelma on ns. suunnistajan ohjelma. Ohjelma lukee aluksi lähtöpisteen koordinaatit ja päätepisteen koordinaatit. Sitten ohjelma tulostaa mihin suuntaan on kuljettava ja kuinka pitkä matka, jotta lähtöpisteestä päästäisiin päätepisteeseen. Suunnistajan ohjelman toteutus ilman tietoabstraktiota: void main(void) { float x1, y1, x2, y2, suunta, et; lue_lahtotiedot(&x1, &y1, &x2, &y2); laske_matka(x1, y1, x2, y2, &et); laske_suunta(x1, y1, x2, y2, &suunta); tulosta_tiedot(suunta, et); Tässä ohjelma vastaa toimintojen osalta kutakuinkin ihmisen käyttämää alkuperäistä abstraktiomallia probleemasta ja toimintojen abstraktiovälineenä on taas käytetty funktiota. Siksi ohjelman kulun seuraaminen on helppoa. Tiedot sen sijaan ovat "sotkua". Kukaan ei ajattele tässä tilanteessa pisteitä neljänä lukuna vaan kahtena pisteenä. Ohjelma ei siis ole yksinkertaisen abstraktiomallin mukainen. Asia voidaan korjata käyttämällä toimintojen abstraktion lisäksi tietojen abstraktiota. Tällöin ohjelma näyttää seuraavalta; Suunnistajan ohjelman toteutus siten, että on käytetty tietoabstraktiota: void main(void) { Tpiste p1, p2;

4 Algoritmit ja tietorakenteet / HL 4 float suunta, et; lue_lahtotiedot(&p1, &p2); laske_matka(p1, p2, &et); laske_suunta(p1, p2, &suunta); tulosta_tiedot(suunta, et); Näemme, että ohjelma on nyt kaikin puolin selkeä ja helppolukuinen sekä käsiteltävien tietojen, että toimintojen suhteen. Tietojen abstraktiovälineenä käytetään tietuetta (record, structure). Ihminen käyttää kahden luvun muodostamasta kokonaisuudesta tässä asiayhteydessä abstraktiota piste tai koordinaatti. Yllämainittuun suunnistajan ohjelmaan päästään nostamalla tiedon abstraktiota pisteen tasolle ja määrittelemällä tietotyyppi Tpiste seuraavasti: typedef struct { float x; float y; Tpoint; Huomautus 1. Tunnilla tarkastellaan myös kuinka funktioiden toteutukset tehdään tässä tilanteessa. Huomautus 2. Jos tarkasteluun otetaan mukaan toteutettujen komponenttien yleisyys ja uudelleenkäytettävyys, ei yllä oleva suunnistajan ohjelma ole ollenkaan optimaalinen vielä. Esimerkiksi se, että lähtöpiste ja päätepiste molemmat luetaan yhdessä funktiossa ei ole hyvä ratkaisu. Tämä funktio soveltuu vain tilanteeseen, jossa luetaan kaksi pistettä. Jos pisteitä pitäisi jossakin tilanteessa lukea 1 tai 3. ei toteutettua funktiota voi silloin hyödyntää. Jos lähtötietojen lukemiseen olisikin tehty yleinen funktio, joka lukee yhden pisteen ja jolle voidaan antaa kehoteteksti parametrinä, olisi saatu yleiskäyttöisyydeltään paljon parempi funktio. Suunnistajan ohjelmassa sitä olisi voinut käyttää siten, että luetaan ensin lähtöpiste ja sitten samalla funktiolla päätepiste. Tällöin funktiokutsun lue_lahtotiedot(&p1, &p2); sijasta kirjoitettaisiin lue_piste(&p1, Anna lähtöpiste ); lue_piste(&p2, Anna tavoitepiste ); Funktion lue_piste toteutus olisi silloin seuraavanlainen. void lue_piste(tpoint *p, const char *prompt) { printf( %s, prompt); scanf( f%f, &p->x, &p->y); Abstrakti tietotyyppi Tietotyyppi Tpoint ja sen käsittelyyn tarkoitetut funktiot (lue_piste, laske_matka, laske_suunta, tulosta_piste, ja mahdollisesti muut) yhdessä muodostavat abstraktin tietotyypin piste. Määritelmä. Abstrakti tietotyyppi on tietotyyppi, joka sisältää kaikki jonkin asian kuvaamiseksi tarvittavat tietokentät ja tämän tietotyypin käsittelyyn tarvittavat funktiot ns. operaatiofunktiot. Hyvän ohjelmointitavan mukaan abstraktin tietotyypin tietokenttiin ei viitata ohjelmassa suoraan, vaan ainoastaan tietotyypin operaatiofunktioissa. Tällöin noudatetaan tiedon yksityiskohtien kätkemisen periaatetta (Information Hiding). Tiedon ja toimintojen

5 Algoritmit ja tietorakenteet / HL 5 yksityiskohdat kätketään. Käytetään vain sallittua liityntää tiedon käsittelyyn. Tämä liityntä ilmaistaan funktioiden prototyyppeinä ja (C-kielessä) tietotyypin määrittelynä. Käyttäjälle liityntä on tietotyypin nimi ja operaatiofunktioiden prototyypit. Käyttäjän ei tarvitse tietää tietotyypin sisäistä rakennetta eikä operaatiofunktioiden sisäistä toteutusta. Tässä on kysymyksessä myös ns. Black Box -ajattelu. Käytännössä abstraktit tietorakenteet voivat olla hierarkisia. Esimerkkinä tällaisesta hierarkkisesta rakenteesta nähdään tämän monisteen lopussa kolmio, jonka toteutuksessa voidaan käyttää hyväksi abstraktia tietotyyppiä piste. Käytännön esimerkkinä hyvän ohjelmointitavan vastaisesta abstraktin tietotyypin käytöstä on alla oleva esimerkki. void main(void) { Tpiste p1; lue_piste(&p1, Anna lähtöpiste ); // Tämä olisi oikein printf( Anna lähtöpiste: ); scanf ( %f%f, &p1.x, &p1.y); // TÄMÄ RIKKOO HYVÄÄ //OHJELMOINTITAPAA Ongelmana tässä on se, että viitataan suoraan abstraktin tietotyypin kenttiin x ja y. Jos tässä tapauksessa ADT:n toteutusta muutetaan, joudutaan muuttamaan myös sitä käyttävää sovellusta eli yllä olevaa ohjelmaa. Abstrakti tietotyyppi on ohjelmistokomponentti Samoin kuin elektroniikan (ja muidenkin tekniikan alueiden) laitevalmistuksessa pyritään käyttämään komponentteja eli rakentamaan laitteita komponenteista. Kun puhutaan komponenteista, tulee ensimmäisenä mieleen ainakin seuraavat ominaisuudet, jotka vaaditaan komponentilta: 1) Voidaan käyttää (uudelleen) sellaisenaan rakennuspalikkana erilaisissa laitteissa. 2) Komponentilla on selkeästi määritelty rajapinta (interface), joka esimerkiksi elektroniikkakomponentin kohdalla tarkoittaa mekaanisia ja sähköisiä speksejä. 3) Komponentin käyttöön riittää sen interface-tiedot. Tietoa siitä mitä on komponentin sisällä eli kuinka se on toteutettu, ei tarvita. 4) Komponentti voidaan vaihtaa toiseen parempaan tai eritavalla toteutettuun komponenttiin muuttamatta muuta laitteistoa sen ympärillä kunhan vai uudella komponentilla on samanlainen interface. 5) Komponentti on koteloitu eli käyttäjälleen ns. musta laatikko (Black Box). Komponentin sisäistä toteutusta ei siis edes näy päällepäin. Voidaan osoittaa, että abstraktilla tietotyypillä on kaikki nämä ominaisuudet ohjelmistossa edellyttäen, että sen suunnittelussa ja käytössä on huomioitu tietyt asiat. Tarkastellaan nyt näiden vaatimusten täyttymistä ja ehtoja niiden täyttymiselle. Esimerkkeinä kuinka ADT pistettä voidaan käyttää sellaisenaan erilaisissa sovelluksissa (vaatimus 1) ovat vaikkapa: reitinlaskentaohjelma, peliohjelma (pisteellä esitetään esim. laivan paikkaa), grafiikkaohjelma (piste voi esittää vaikka ympyrän keskipistettä), maanmittausohjelma, jne. ADT:n tekeminen mahdollisimman yleiskäyttöiseksi ei ole itsestään selvä asia. Se edellyttää esimerkiksi, että tyypille on tehty riittävän kattava funktiovalikoima. Myös yksittäisten funktioiden suunnittelulla on ratkaiseva merkitys siihen, kuinka hyvin niitä voidaan käyttää erilaisissa tilanteissa. Tunnilla yksinkertaisena esimerkkinä tästä tarkastellaan suunnistajan ohjelman pisteiden lukemisfunktion toteuttamista erilaisilla tavoilla funktion yleiskäyttöisyyttä silmällä pitäen.

6 Algoritmit ja tietorakenteet / HL 6 ADT pisteen interface-tietoja ovat sen tyyppinimi ja operaatiofunktioiden prototyypit. Sovelluksen kirjoittamisessa ei tarvita muuta tietoa. Tietotyypin nimi siis riittää. Samoin funktioista riittää niiden otsikkotieto (prototyyppi). Tietoa siitä, kuinka funktio on toteutettu, ei tarvita. Tämän takia myös vaatimukset 2 ja 3 ovat voimassa. Myös vaatimus 4 on voimassa edellyttäen, että komponentin käytössä on noudatettu hyvää ohjelmointitapaa eli tietotyypin sisäistä toteutusta ei todellakaan käytetä sovelluksessa, vaan tietotyyppiä käytetään vain sen operaatiofunktioilla. Esillä olleessa suunnistajan ohjelmassa tämä tarkoittaa, että pääohjelmassa ei ole suoria viittauksia tietueen Tpoint kenttiin x tai y. Jos siis pääohjelmassa olisi esimerkiksi luettu lähtöpiste muodossa scanf( %f%f, &p1.x, &p1.y); siihen ei enää voida vaihtaa uudella tavalla toteutettua pistettä (esimerkiksi napakoordinaateissa sisäisesti esitettävää toteutusta) ilman, että tehtäisiin muutos myös itse sovellukseen eli tässä tapauksessa main-funktioon. Jos sen sijaan hyvää ohjelmointitapaa on noudatettu, niin muutettaessa pisteen sisäinen tai vaikka myös ulkoinen esitys napakoordinaatteihin, muutos tehdään vain itse komponenttiin, mutta ei sitä käyttävään ympäristöön. ADT:n toteutus saadaan myös koteloitua mustaan laatikkoon käyttämällä erillistä kääntämistä ja linkkaamalla toteutus sitten objektitiedostona sovellukseen. Todellisen kätkemisen periaate Edellä kuvattu tiedon kätkeminen voidaan tehdä oikeasti siten, että tietotyypin määrittelyt ja operaatiofunktioiden prototyypit laitetaan omaan tiedostoon, ns. header-tiedostoon. Lisäksi operaatiofunktioiden toteutus laitetaan omaan tiedostoon, joka käännetään erikseen objektimuotoon. Tämän jälkeen sovellusohjelma-tiedostossa ei tarvitse pitää mukana funktioiden määrittelyjä ja prototyypit otetaan mukaan #include-direktiivillä. Funktioiden toteutus saadaan lopulliseen sovellukseen linkkaamalla siihen aikaisemmin käännetty objekti-tiedosto. Liitteenä oleva kuva valaisee tätä menettelyä. Huomautus. Aikaisemmin esiintuotu ajatus, että käytettäessä abstraktia tietotyyppiä sovellusten rakentamiseen, ei tarvita tietoa sen sisäisestä toteutuksesta, tulee ulottaa myös headerien käyttöön. Sovelluksen rakentajan tulee voida incluudata aina sellaiset headerit sovellukseen (ja missä järjestyksessä tahansa), jotka sisältävät käytettävien ADT:eiden interface-tiedot. Jotta tämä saadaan sovellusohjelmoijalle helpoksi, tarvitaan headerien rakennuksessa ns. ehdollisen kääntämisen mahdollistavia esikääntäjän direktiivejä. Näiden käytöstä puhutaan enemmän tunnilla. Oliolähestymistapa Tässä opintojaksossa käytetään C-kieltä ja yllämainittua hyvää ohjelmointitapaa. Olioperustaisessa lähestymistavassa usein ei ole mahdollisuutta rikkoa tätä hyvää ohjelmointitapaa. Kääntäjä antaa virheilmoituksen hyvän tavan rikkomisesta (esimerkiksi viittauksesta suoraan abstraktin tietorakenteen tietokenttiin). Olio-ohjelmointitavassa operaatiofunktiot sisällytetään tietotyypin määrittelyyn, joka onkin luonnollista, koska ne niin oleellisesti liittyvät abstraktin tietorakenteen määrittelyyn. Oliokielissä siis oikeastaan tietotyypillä (jota nyt kutsutaan luokaksi) määritellään abstrakti tietorakenne. Liitteenä on informatiivisena kolmio-esimerkki oliototeutuksena C++-kielellä. Tietueen määrittely ja ominaisuudet

7 Algoritmit ja tietorakenteet / HL 7 Huomautus. Tietueen ominaisuuksista ja ominaisuuksien vertailusta taulukon ominaisuuksiin on myös oma laajempi erillinen moniste. Yllä olevassa esimerkissä tietotyyppi Tpoint määriteltiin muodossa typedef struct { float x; float y; Tpoint; Tämä määrittely käyttää hyväksi ansi-standardin määrittelemää typedef-avainsanaa, jolla saadaan aikaan käyttäjän määrittelemiä tietotyyppejä. Tietuetyyppiä voidaan käyttää myös vanhanaikaisella tavalla eli kielen suunnittelijoiden Kernighan ja Ritchie käyttämällä tavalla. Kolmantena tapana on vielä C++-kielen tapa silloin kun käytetään C++-kääntäjää. C- kieltä käytettäessä on suositeltavaa käyttää typedef-määritettä hyödyntävää tapaa. Tunnilla tarkastellaan muut tavat lähinnä siksi, että niiden merkitys tulisi tunnetuksi. Kannattaa muistaa, että tietueen sijoitus on taattu ansi-standardin mukaan. Tämä tarkoittaa, että jos meillä on ohjelmassa kaksi tietuetta, esimerkiksi kaksi pistettä, määriteltynä ja alustettuna seuraavasti: Tpiste p1, p2 = {1.0, 2.0 ; //pisteelle p2 alustetaan arvot (1.0, 2.0) p1 = p2; //tietueen kaikki kentät kopioidaan. Toisella rivillä oleva sijoitus tarkoittaa, että tietueen x kenttä ja y-kenttä molemmat saavat arvon tietueessa p1. Tietuetta ei siis tarvitse sijoittaa kenttä kentältä erikseen. Huomautus 1. Vertailun vuoksi tunnilla tarkastellaan myös taulukon sijoitusta. Huomautus 2. Tunnilla tarkastellaan myös tietueen sijoitusta, kun tietueen kenttänä on taulukko. Huomautus 3. Tunnilla tarkastellaan myös tietueen sijoitusta, kun tietueen kenttänä on osoitin, joka edustaa taulukkoa ( matalakopiointi ja syväkopiointi ). Tietojen abstraktiosta lisää: useampitasoinen abstraktiomalli Esimerkkinä tapauksesta, jossa tiedon hierarkiamalli on useampitasoinen, käsitellään ohjelmaa, joka käsittelee kolmioita. Kolmiot määritellään tässä kärkipisteidensä avulla. Ohjelma lukee ensin kolmion määrittelytiedot ja selvittää sitten, onko kolmio tasasivuinen. Mikäli kolmio on tasasivuinen, ohjelma laskee ja tulostaa sen pinta-alan. Lähdemme heti siitä, että toimintojen abstraktio on kunnossa. Tämän takia pääohjelmassa kutsuttavat funktiot kohdistuvat kolmioon eikä esimerkiksi pisteisiin. Pääohjelma näyttää silloin seuraavalta //Kolmiotehtävä ilman data-abstraktiota void main (void) { float x1, y1, x2, y2, x3, y3; float area; read_triangle(&x1, &y1, &x2, &y2, &x3, &y3); if (sides_equal(x1,y1,x2,y2,x3,y3)) { area = triangle_area(x1,y1,x2,y2,x3,y3); printf("area is %5.2f", area); else printf("\n Sides are not equal");

8 Algoritmit ja tietorakenteet / HL 8 Ohjelmassa on toimintojen abstraktio OK ja tapahtumien kulkua on helppo seurata ohjelmasta. Sen sijaan pisteiden käsittely on sotkua eikä se vastaa ihmisen käyttämää abstraktiota eli pyrkimystä yksinkertaistaa. Ihminen ei ajattele kolmea pistettä kuutena erillisenä lukuna, vaan kolmena pisteenä. Ihminen käyttää kahden luvun yhdistelmästä abstraktiota piste kuten jo edellä näimme. Muutamme nyt ohjelman vastaamaan tätä ajattelumallia. Nyt siis nostetaan tiedon abstraktiota pisteen tasolle. Käytössä on nyt edellä määritelty tietotyyppi Tpoint. //Kolmiotehtävä ensimmäisen tason data-abstraktiolla void main (void) { Tpoint p1,p2,p3; read_triangle(&p1, &p2, &p3); if (sides_equal(p1, p2, p3)) { area = triangle_area(p1, p2, pt3); printf("area is %5.2f", area); else printf("\n Sides are not equal"); Laajat tietokokonaisuudet saadaan hallintaan käyttämällä ryhmittelyä ja luokittelua. Näin pääsemme yksittäiseen tietoon hierarkkista polkua pitkin, kun tiedämme mihin kokonaisuuteen se kuuluu, mihin kokonaisuuden osaan se kuluu jne. Nostamme nyt tiedon abstraktiotasoa edelleen kolmion tasolle. Ohjelmassa käsitellään kolmioita. Määrittelemme tietotyypin Ttriangle ja käytämme ohjelmassa muuttujaa, jolla on tietotyyppi Ttriangle. Tällöin kaikki kolmiota käsittelevät funktiot saavat parametrin, joka on tyyppiä Ttriangle (tai osoitin sellaiseen). Tietotyyppi Ttriangle määritellään seuraavasti: typedef struct { Tpoint apex1; Tpoint apex2; Tpoint apex3; Ttriangle; Ohjelma näyttää nyt seuraavalta: //Kolmiotehtävä toisen tason data-abstraktiolla void main (void) { Ttriangle triangle; read_triangle(&triangle); if (sides_equal(triangle)) { area = triangle_area(triangle); printf("area is %5.2f", area); else printf("\n Sides are not equal"); Tarkastellaan seuraavana myös abstraktin tietotyypin triangle toteutusta. Nyt siis ADT kolmion toteutuksessa käytetään hyväksi ADT pistettä. Se mitä aikaisemmin on sanottu hyvästä ohjelmointitavasta, pätee tietysti edelleen. Kolmion operaatiofunktioiden toteutuksissa kolmionkärkipisteitä pitää siis käsitellä vain pisteen omilla operaatiofunktioilla. Tämä tarkoittaa myös sitä, että abstraktiotasoja ei saa ylittää. Ylemmän tason komponentin

9 Algoritmit ja tietorakenteet / HL 9 operaatiofunktion toteutuksessa sen alakomponenttia saa käsitellä vain alakomponentin omilla operaatiofunktioilla. Tarkastellaan esimerkkinä kolmion funktion read_triangle toteutusta. void read_triangle (Ttriangle *t) { lue_piste(&t->apex1, Anna 1. kärkipiste ); lue_piste(&t->apex2, Anna 2. kärkipiste ); lue_piste(&t->apex3, Anna 3. kärkipiste ); Huomautus. Kolmio-ohjelmien täydelliset toteutukset ovat liitteenä.

10 Algoritmit ja tietorakenteet / HL 10 Liite 1 Algoritmit ja tietorakenteet Hannu Laine Abstraktion edut monimutkaisuuden hallinta helpottuu tekee mahdolliseksi laatia laajoja ohjelmia tekee mahdolliseksi paloitella tehtävä pienempiin osiin tekee mahdolliseksi jakaa ohjelmointityö ja edetä askelittain ohjelmista tulee luettavampia ohjelmien verifiointi tulee mahdolliseksi testaus helpottuu ohjelmien ylläpito ja jatkokehitys helpottuu tehtyjen ohjelmanosien uudelleenkäyttö tehostuu (ohjelmiston rakennuskomponentit) Muita nimityksiä samalle asialle abstraction information hiding black box thinking programming in large

11 Algoritmit ja tietorakenteet / HL 11 Separate compiling and linking together Liite 2 Datatype definition typedef... Tadt; Function prototypes... function1(tadt a,...);... function2(tadt *pa,...); Header file adt.h #include "adt.h" #include "adt.h" void main (void) { Tadt a; function1(a,...); function2(&a,...); #include "adt.h" Function bodies... function1(tadt a,...) { Main application program applicat.c ADT implementation file adt.c compile compile applicat.obj adt.obj link applicat.exe... function2(tadt *pa,...) {

Tietorakenteet ja algoritmit

Tietorakenteet ja algoritmit Tietorakenteet ja algoritmit Kurssin sisältö pääpiirteittäin Tarvittavat pohjatiedot Avainsanat Abstraktio Esimerkkiohjelman tehtäväkuvaus Abstraktion käyttö tehtävässä Abstrakti tietotyyppi Hyötyjä ADT:n

Lisätiedot

Tietorakenteet ja algoritmit

Tietorakenteet ja algoritmit Tietorakenteet ja algoritmit Abstrakti tietotyyppi komponenttina Komponentin kriteerit Täyttääkö ADT komponentin kriteerit Millä ehdoilla kriteerit täyttyvät Yleisyyden tarkastelua funktion read_point

Lisätiedot

Tietorakenteet ja algoritmit

Tietorakenteet ja algoritmit Tietorakenteet ja algoritmit Useampitasoiset ADT:t Käytetään esimerkkiohjelmaa Ratkaisuyritys 1 Ratkaisuyritys 2 Lopullinen ratkaisu Lopullisen ratkaisun toteutusyritys Lopullisen ratkaisun oikea toteutus

Lisätiedot

tietueet eri tyyppisiä tietoja saman muuttujan arvoiksi

tietueet eri tyyppisiä tietoja saman muuttujan arvoiksi tietueet eri tyyppisiä tietoja saman muuttujan arvoiksi ero taulukkoon taulukossa alkiot samantyyppisiä tietueessa alkiot voivat olla erityyppisiä tiedot kuitenkin yhteen kuuluvia ohjelmoinnin perusteet,

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

Tietorakenteet ja algoritmit

Tietorakenteet ja algoritmit Tietorakenteet ja algoritmit Rekursio Rekursion käyttötapauksia Rekursio määritelmissä Rekursio ongelmanratkaisussa ja ohjelmointitekniikkana Esimerkkejä taulukolla Esimerkkejä linkatulla listalla Hanoin

Lisätiedot

Tietorakenteet ja algoritmit

Tietorakenteet ja algoritmit Tietorakenteet ja algoritmit Muuttujat eri muisteissa Ohjelman muistialueen layout Paikallisen ja globaalin muuttujan ominaisuudet Dynaamisen muistinkäytön edut Paikallisten muuttujien dynaamisuus ADT

Lisätiedot

Tietorakenteet ja algoritmit

Tietorakenteet ja algoritmit Tietorakenteet ja algoritmit Pino Pinon määritelmä Pinon sovelluksia Järjestyksen kääntäminen Palindromiprobleema Postfix-lausekkeen laskenta Infix-lausekkeen muunto postfix-lausekkeeksi Sisäkkäiset funktiokutsut

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

Tietorakenteet ja algoritmit

Tietorakenteet ja algoritmit Tietorakenteet ja algoritmit Elegantti toteutus funktiolle insert_to_list_end Alkion lisäys sisällön mukaan järjestettyyn listaan (insert_to_list) Linkatun listan yleisyys alkiotyypin suhteen source-tasolla

Lisätiedot

Algoritmit ja tietorakenteet / HL 1 Copyright Hannu Laine. Lista. Yleistä

Algoritmit ja tietorakenteet / HL 1 Copyright Hannu Laine. Lista. Yleistä Algoritmit ja tietorakenteet / HL 1 Lista Yleistä Lista, pino ja jono ovat abstrakteja tietotyyppejä, joilla on yleistä käyttöä. Niitä voidaan hyödyntää mitä erilaisimmissa probleemoissa ja sovelluksissa.

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

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

13/20: Kierrätys kannattaa koodaamisessakin

13/20: Kierrätys kannattaa koodaamisessakin Ohjelmointi 1 / syksy 2007 13/20: Kierrätys kannattaa koodaamisessakin Paavo Nieminen nieminen@jyu.fi Tietotekniikan laitos Informaatioteknologian tiedekunta Jyväskylän yliopisto Ohjelmointi 1 / syksy

Lisätiedot

Lyhyt kertaus osoittimista

Lyhyt kertaus osoittimista , syksy 2007 Kertausta Luento 10 12.10.2007 Syksy 2007 1 Lyhyt kertaus osoittimista char *p; /* char, int, jne ilmoittavat, minkä tyyppisiä */ Keskusmuisti int *q; /* olioita sisältäviin muistilohkoihin

Lisätiedot

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

Merkkijono määritellään kuten muutkin taulukot, mutta tilaa on varattava yksi ylimääräinen paikka lopetusmerkille: Merkkijonot C-kielessä merkkijono on taulukko, jonka alkiot ovat char -tyyppiä. Taulukon viimeiseksi merkiksi tulee merkki '\0', joka ilmaisee merkkijonon loppumisen. Merkkijono määritellään kuten muutkin

Lisätiedot

Tietorakenteet ja algoritmit

Tietorakenteet ja algoritmit Tietorakenteet ja algoritmit Merkintöjen tulkintoja *++Pstack->top = item *Pstack->top++ = item (*Pstack->top)++ *(Pstack++)->top = item *(++Pstack)->top = item Lisää pinon toteutuksia Dynaaminen taulukko

Lisätiedot

Loppukurssin järjestelyt

Loppukurssin järjestelyt C! Loppukurssin järjestelyt 29.3.2018 Ohjelmassa Yhteenvetoa palautteesta Ohjelmontitehtävän järjestelyt Tietokonetentin järjestelyt Kysyttävää / kerrattavaa 10-kierroksen asioista? Aikatauluista 10. kierroksen

Lisätiedot

Tietuetyypin määrittely toteutetaan C-kielessä struct-rakenteena seuraavalla tavalla:

Tietuetyypin määrittely toteutetaan C-kielessä struct-rakenteena seuraavalla tavalla: KERTAUSTEHTÄVIÄ Tietue Tietuetyypin määrittely toteutetaan C-kielessä struct-rakenteena seuraavalla tavalla: struct henkilotiedot char nimi [20]; int ika; char puh [10]; ; Edellä esitetty kuvaus määrittelee

Lisätiedot

Perusteet. Pasi Sarolahti Aalto University School of Electrical Engineering. C-ohjelmointi Kevät Pasi Sarolahti

Perusteet. Pasi Sarolahti Aalto University School of Electrical Engineering. C-ohjelmointi Kevät Pasi Sarolahti C! Perusteet 19.1.2017 Palautteesta (1. kierros toistaiseksi) Toistaiseksi helppoa Miksi vain puolet pisteistä? Vaikeinta oli ohjelmointiympäristön asennus ja käyttö Vaikeaa eroavuudet Pythonin ja C:n

Lisätiedot

Koottu lause; { ja } -merkkien väliin kirjoitetut lauseet muodostavat lohkon, jonka sisällä lauseet suoritetaan peräkkäin.

Koottu lause; { ja } -merkkien väliin kirjoitetut lauseet muodostavat lohkon, jonka sisällä lauseet suoritetaan peräkkäin. 2. Ohjausrakenteet Ohjausrakenteiden avulla ohjataan ohjelman suoritusta. peräkkäisyys valinta toisto Koottu lause; { ja } -merkkien väliin kirjoitetut lauseet muodostavat lohkon, jonka sisällä lauseet

Lisätiedot

Loppukurssin järjestelyt C:n edistyneet piirteet

Loppukurssin järjestelyt C:n edistyneet piirteet C! Loppukurssin järjestelyt C:n edistyneet piirteet 30.3.2017 Ohjelmassa Ohjelmontitehtävän järjestelyt Tietokonetentin järjestelyt Esikääntäjä Parametrilistat Funktio-osoittimet Kunniamainintoja Kuura

Lisätiedot

Ohjelmointi 2. Jussi Pohjolainen. TAMK» Tieto- ja viestintäteknologia , Jussi Pohjolainen TAMPEREEN AMMATTIKORKEAKOULU

Ohjelmointi 2. Jussi Pohjolainen. TAMK» Tieto- ja viestintäteknologia , Jussi Pohjolainen TAMPEREEN AMMATTIKORKEAKOULU Ohjelmointi 2 Jussi Pohjolainen TAMK» Tieto- ja viestintäteknologia Tietotyypeistä C++ - kielessä useita tietotyyppejä Kirjaimet: char, wchar_t Kokonaisluvut: short, int, long Liukuluvut: float, double

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

Perusteet. Pasi Sarolahti Aalto University School of Electrical Engineering. C-ohjelmointi Kevät Pasi Sarolahti

Perusteet. Pasi Sarolahti Aalto University School of Electrical Engineering. C-ohjelmointi Kevät Pasi Sarolahti C! Perusteet 19.1.2017 Palautteesta (1. kierros toistaiseksi) (Erittäin) helppoa Miksi vain puolet pisteistä? Vaikeinta oli ohjelmointiympäristön asennus ja käyttö Ei selvää että main funktion pitikin

Lisätiedot

811120P Diskreetit rakenteet

811120P Diskreetit rakenteet 811120P Diskreetit rakenteet 2018-2019 1. Algoritmeista 1.1 Algoritmin käsite Algoritmi keskeinen laskennassa Määrittelee prosessin, joka suorittaa annetun tehtävän Esimerkiksi Nimien järjestäminen aakkosjärjestykseen

Lisätiedot

TIETORAKENTEET JA ALGORITMIT

TIETORAKENTEET JA ALGORITMIT TIETORAKENTEET JA ALGORITMIT Timo Harju 1999-2004 1 typedef link List; /* Vaihtoehtoisia nimiä */ typedef link Stack; /* nodepointterille */ typedef link Queue typedef struct node Node; /* itse nodelle

Lisätiedot

812341A Olio-ohjelmointi, I Johdanto

812341A Olio-ohjelmointi, I Johdanto 812341A Olio-ohjelmointi, 2016 I Johdanto Sisältö 1. Abstraktiosta 2. Olio-ohjelmoinnin historiaa 3. Olioparadigmasta 4. Peruskäsitteiden kertausta 812341A Olio-ohjelmointi, Johdanto 2 1 Abstraktiosta

Lisätiedot

Algoritmit 1. Luento 1 Ti Timo Männikkö

Algoritmit 1. Luento 1 Ti Timo Männikkö Algoritmit 1 Luento 1 Ti 10.1.2017 Timo Männikkö Luento 1 Algoritmi Algoritmin toteutus Ongelman ratkaiseminen Algoritmin tehokkuus Algoritmin suoritusaika Algoritmin analysointi Algoritmit 1 Kevät 2017

Lisätiedot

1. Olio-ohjelmointi 1.1

1. Olio-ohjelmointi 1.1 1. Olio-ohjelmointi 1.1 Sisällys Olio-ohjelmointi on eräs ohjelmointiparadigma. Olio-ohjelmoinnin muotoja. Ohjelmiston analyysi ja suunnittelu. Olioparadigman etuja ja kritiikkiä. 1.2 Ohjelmointiparadigmoja

Lisätiedot

Rakenteiset tietotyypit Moniulotteiset taulukot

Rakenteiset tietotyypit Moniulotteiset taulukot C! Rakenteiset tietotyypit Moniulotteiset taulukot 22.2.2018 Agenda Rakenteiset tietotyypit Vilkaisu 6. kierroksen tehtäviin Moniulotteiset taulukot Esimerkki Seuraava luento to 8.3. Ilmoittautuminen ohjelmointikokeeseen

Lisätiedot

Tiedostot. Tiedostot. Tiedostot. Tiedostot. Tiedostot. Tiedostot

Tiedostot. Tiedostot. Tiedostot. Tiedostot. Tiedostot. Tiedostot Tiedosto yhteenkuuluvien tietojen joukko, joka on tavallisesti talletettu pysyväismuistiin muodostuu tietueista, jotka voivat olla keskenään samanlaisia tai vaihdella tyypiltään tiedostot ovat joko tekstitiedostoja

Lisätiedot

Ohjelmiston toteutussuunnitelma

Ohjelmiston toteutussuunnitelma Ohjelmiston toteutussuunnitelma Ryhmän nimi: Tekijä: Toimeksiantaja: Toimeksiantajan edustaja: Muutospäivämäärä: Versio: Katselmoitu (pvm.): 1 1 Johdanto Tämä luku antaa yleiskuvan koko suunnitteludokumentista,

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

Tietotekniikan valintakoe

Tietotekniikan valintakoe Jyväskylän yliopisto Tietotekniikan laitos Tietotekniikan valintakoe 2..22 Vastaa kahteen seuraavista kolmesta tehtävästä. Kukin tehtävä arvostellaan kokonaislukuasteikolla - 25. Jos vastaat useampaan

Lisätiedot

Ohjelmistojen mallintaminen, mallintaminen ja UML

Ohjelmistojen mallintaminen, mallintaminen ja UML 582104 Ohjelmistojen mallintaminen, mallintaminen ja UML 1 Mallintaminen ja UML Ohjelmistojen mallintamisesta ja kuvaamisesta Oliomallinnus ja UML Käyttötapauskaaviot Luokkakaaviot Sekvenssikaaviot 2 Yleisesti

Lisätiedot

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

ATK tähtitieteessä. Osa 3 - IDL proseduurit ja rakenteet. 18. syyskuuta 2014 18. syyskuuta 2014 IDL - proseduurit 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

1. Algoritmi 1.1 Sisällys Algoritmin määritelmä. Aiheen pariin johdatteleva esimerkki. Muuttujat ja operaatiot (sijoitus, aritmetiikka ja vertailu). Algoritmista ohjelmaksi. 1.2 Algoritmin määritelmä Ohjelmointi

Lisätiedot

A274101 TIETORAKENTEET JA ALGORITMIT

A274101 TIETORAKENTEET JA ALGORITMIT A274101 TIETORAKENTEET JA ALGORITMIT PERUSTIETORAKENTEET LISTA, PINO, JONO, PAKKA ABSTRAKTI TIETOTYYPPI Tietotyyppi on abstrakti, kun se on määritelty (esim. matemaattisesti) ottamatta kantaa varsinaiseen

Lisätiedot

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python Ohjelmoinnin perusteet Y Python T-106.1208 16.3.2009 T-106.1208 Ohjelmoinnin perusteet Y 16.3.2009 1 / 40 Kertausta: tiedostosta lukeminen Aluksi käsiteltävä tiedosto pitää avata: tiedostomuuttuja = open("teksti.txt","r")

Lisätiedot

etunimi, sukunimi ja opiskelijanumero ja näillä

etunimi, sukunimi ja opiskelijanumero ja näillä Sisällys 1. Algoritmi Algoritmin määritelmä. Aiheen pariin johdatteleva esimerkki. ja operaatiot (sijoitus, aritmetiikka ja vertailu). Algoritmista ohjelmaksi. 1.1 1.2 Algoritmin määritelmä Ohjelmointi

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

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

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

Rekursiolause. Laskennan teorian opintopiiri. Sebastian Björkqvist. 23. helmikuuta Tiivistelmä

Rekursiolause. Laskennan teorian opintopiiri. Sebastian Björkqvist. 23. helmikuuta Tiivistelmä Rekursiolause Laskennan teorian opintopiiri Sebastian Björkqvist 23. helmikuuta 2014 Tiivistelmä Työssä käydään läpi itsereplikoituvien ohjelmien toimintaa sekä esitetään ja todistetaan rekursiolause,

Lisätiedot

Tietokanta (database)

Tietokanta (database) Tietokanta Tietokanta (database) jotakin käyttötarkoitusta varten laadittu kokoelma toisiinsa liittyviä säilytettäviä tietoja 1 Tiedosto Ohjelmointikielissä apumuistiin tallennettuja tietoja käsitellään

Lisätiedot

811120P Diskreetit rakenteet

811120P Diskreetit rakenteet 811120P Diskreetit rakenteet 2016-2017 1. Algoritmeista 1.1 Algoritmin käsite Algoritmi keskeinen laskennassa Määrittelee prosessin, joka suorittaa annetun tehtävän Esimerkiksi Nimien järjestäminen aakkosjärjestykseen

Lisätiedot

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

Sisällys. JAVA-OHJELMOINTI Osa 7: Abstrakti luokka ja rajapinta. Abstraktin luokan idea. Abstrakti luokka ja metodi. Esimerkki Sisällys JAVA-OHJELMOINTI Osa 7: Abstrakti luokka ja rajapinta Abstrakti luokka ja metodi Rajapintamäärittely (interface) Eero Hyvönen Tietojenkäsittelytieteen laitos Helsingin yliopisto 13.10.2000 E.

Lisätiedot

Tietorakenteet ja algoritmit

Tietorakenteet ja algoritmit Tietorakenteet ja algoritmit Listan määritelmä Listan toteutustapoja Yksinkertainen taulukkototeutus Linkattu taulukko Dynaamisesti linkattu taulukko Listan toteutuksen yleisyysvaatimukset Millä ehdoilla

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

Tietorakenteet ja algoritmit

Tietorakenteet ja algoritmit Tietorakenteet ja algoritmit Taulukon edut Taulukon haitat Taulukon haittojen välttäminen Dynaamisesti linkattu lista Linkatun listan solmun määrittelytavat Lineaarisen listan toteutus dynaamisesti linkattuna

Lisätiedot

Ohjelmoinnin perusteet, 1. välikoe

Ohjelmoinnin perusteet, 1. välikoe Ohjelmoinnin perusteet,. välikoe Nimi: Opiskelijanumero:.. 3. 4. Yhteensä Ohje: Ratkaise kaikki tehtävät. Lähdemateriaalia ja tietokonetta ei saa käyttää. Noudata ohjelmointitehtävissä Java-kielen vakiintuneita

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

Olio-ohjelmoinnissa luokat voidaan järjestää siten, että ne pystyvät jakamaan yhteisiä tietoja ja aliohjelmia.

Olio-ohjelmoinnissa luokat voidaan järjestää siten, että ne pystyvät jakamaan yhteisiä tietoja ja aliohjelmia. 4. Periytyminen 4.1. Johdantoa Käytännössä vähänkään laajemmissa ohjelmissa joudutaan laatimaan useita luokkia, joiden pitäisi pystyä välittämään tietoa toisilleen. Ohjelmien ylläpidon kannalta olisi lisäksi

Lisätiedot

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python Ohjelmoinnin perusteet Y Python T-106.1208 15.3.2010 T-106.1208 Ohjelmoinnin perusteet Y 15.3.2010 1 / 56 Tiedostoista: tietojen tallentaminen ohjelman suorituskertojen välillä Monissa sovelluksissa ohjelman

Lisätiedot

Ohjelmoinnin perusteet, syksy 2006

Ohjelmoinnin perusteet, syksy 2006 Ohjelmoinnin perusteet, syksy 2006 Esimerkkivastaukset 1. harjoituksiin. Alkuperäiset esimerkkivastaukset laati Jari Suominen. Vastauksia muokkasi Jukka Stenlund. 1. Esitä seuraavan algoritmin tila jokaisen

Lisätiedot

Solidity älysopimus ohjelmointi. Sopimus suuntautunut ohjelmointi

Solidity älysopimus ohjelmointi. Sopimus suuntautunut ohjelmointi Solidity älysopimus ohjelmointi Sopimus suuntautunut ohjelmointi Merkle puu Kertausta eiliseltä Solidity on korkean tason älysopimus ohjelmointikieli Muistuttaa olio-ohjelmointia Javalla Sopimuskoodi on

Lisätiedot

20. Javan omat luokat 20.1

20. Javan omat luokat 20.1 20. Javan omat luokat 20.1 Sisällys Application Programming Interface (API). Pakkaukset. Merkkijonoluokka String. Math-luokka. Kääreluokat. 20.2 Java API Java-kielen Application Programming Interface (API)

Lisätiedot

7/20: Paketti kasassa ensimmäistä kertaa

7/20: Paketti kasassa ensimmäistä kertaa Ohjelmointi 1 / syksy 2007 7/20: Paketti kasassa ensimmäistä kertaa Paavo Nieminen nieminen@jyu.fi Tietotekniikan laitos Informaatioteknologian tiedekunta Jyväskylän yliopisto Ohjelmointi 1 / syksy 2007

Lisätiedot

Sisällys. 20. Javan omat luokat. Java API. Pakkaukset. java\lang

Sisällys. 20. Javan omat luokat. Java API. Pakkaukset. java\lang Sisällys 20. Javan omat luokat Application Programming Interface (API). Pakkaukset. Merkkijonoluokka String. Math-luokka. Kääreluokat. 20.1 20.2 Java API Java-kielen Application Programming Interface (API)

Lisätiedot

Kielioppia: toisin kuin Javassa

Kielioppia: toisin kuin Javassa Object Pascal Pascal kielen oliolaajennus (Inprise/Borland:n oma) luokat Voit uudelleenkäyttää luomiasi objekteja esim. komponentteja Periytyminen Kielioppia: toisin kuin Javassa Ei eroa isojen ja pienien

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

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

Muistin käyttö. Muistin käyttö. Muistin käyttö. Muistin käyttö. Muistin käyttö. Muistin käyttö. Muistin käyttö C-ohjelmassa ssa ohjelman käytössä suoritusaikana oleva muisti jakautuu neljään osaan: koodisegmentti datasegmentti pinosegmentti (stack) kasa (heap) ssa ohjelman koodisegmentti sisältää käännetyn ohjelmakoodin sisältö

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

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

Ohjelmiston testaus ja laatu. Ohjelmistotekniikka elinkaarimallit

Ohjelmiston testaus ja laatu. Ohjelmistotekniikka elinkaarimallit Ohjelmiston testaus ja laatu Ohjelmistotekniikka elinkaarimallit Vesiputousmalli - 1 Esitutkimus Määrittely mikä on ongelma, onko valmista ratkaisua, kustannukset, reunaehdot millainen järjestelmä täyttää

Lisätiedot

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

C-ohjelma. C-ohjelma. C-ohjelma. C-ohjelma. C-ohjelma. C-ohjelma. Operaatioiden suoritusjärjestys Loogisia operaatioita - esimerkkejä Tänään on lämmin päivä ja perjantai Eilen satoi ja oli keskiviikko tai tänään on tiistai. On perjantai ja kello on yli 13 Ei ole tiistai tai ei sada. Ei pidä paikkaansa,

Lisätiedot

Yhtälöryhmä matriisimuodossa. MS-A0004/A0006 Matriisilaskenta. Tarkastellaan esimerkkinä lineaarista yhtälöparia. 2x1 x 2 = 1 x 1 + x 2 = 5.

Yhtälöryhmä matriisimuodossa. MS-A0004/A0006 Matriisilaskenta. Tarkastellaan esimerkkinä lineaarista yhtälöparia. 2x1 x 2 = 1 x 1 + x 2 = 5. 2. MS-A4/A6 Matriisilaskenta 2. Nuutti Hyvönen, c Riikka Kangaslampi Matematiikan ja systeemianalyysin laitos Aalto-yliopisto 5.9.25 Tarkastellaan esimerkkinä lineaarista yhtälöparia { 2x x 2 = x + x 2

Lisätiedot

jotakin käyttötarkoitusta varten laadittu kokoelma toisiinsa liittyviä säilytettäviä tietoja

jotakin käyttötarkoitusta varten laadittu kokoelma toisiinsa liittyviä säilytettäviä tietoja Tietokanta Tietokanta (database) jotakin käyttötarkoitusta varten laadittu kokoelma toisiinsa liittyviä säilytettäviä tietoja mikä tahansa tietokokoelma? --> erityispiirteitä Tietokanta vs. tiedosto 1

Lisätiedot

Tieto- ja tallennusrakenteet

Tieto- ja tallennusrakenteet Tieto- ja tallennusrakenteet Sisältö Tyyppi, abstrakti tietotyyppi, abstraktin tietotyypin toteutus Tallennusrakenteet Taulukko Linkitetty rakenne Abstraktit tietotyypit Lista (Puu) (Viimeisellä viikolla)

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

17. Javan omat luokat 17.1

17. Javan omat luokat 17.1 17. Javan omat luokat 17.1 Sisällys Application Programming Interface (API). Pakkaukset. Merkkijonoluokka String. Math-luokka. Kääreluokat. 17.2 Java API Java-kielen Application Programming Interface (API)

Lisätiedot

Ongelma(t): Miten mikro-ohjelmoitavaa tietokonetta voisi ohjelmoida kirjoittamatta binääristä (mikro)koodia? Voisiko samalla algoritmin esitystavalla

Ongelma(t): Miten mikro-ohjelmoitavaa tietokonetta voisi ohjelmoida kirjoittamatta binääristä (mikro)koodia? Voisiko samalla algoritmin esitystavalla Ongelma(t): Miten mikro-ohjelmoitavaa tietokonetta voisi ohjelmoida kirjoittamatta binääristä (mikro)koodia? Voisiko samalla algoritmin esitystavalla ohjelmoida useita komponenteiltaan ja rakenteeltaan

Lisätiedot

Ohjelmassa henkilön etunimi ja sukunimi luetaan kahteen muuttujaan seuraavasti:

Ohjelmassa henkilön etunimi ja sukunimi luetaan kahteen muuttujaan seuraavasti: 1 (7) Tiedon lukeminen näppäimistöltä Scanner-luokan avulla Miten ohjelma saa käyttöönsä käyttäjän kirjoittamaa tekstiä? Järjestelmässä on olemassa ns. syöttöpuskuri näppäimistöä varten. Syöttöpuskuri

Lisätiedot

1. Omat operaatiot 1.1

1. Omat operaatiot 1.1 1. Omat operaatiot 1.1 Sisällys 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

Ohjelmistojen mallintaminen

Ohjelmistojen mallintaminen Ohjelmistojen mallintaminen - Mallit - Ohjelmiston kuvaaminen malleilla 31.10.2008 Harri Laine 1 Malli: abstraktio jostain kohteesta Abstrahointi: asian ilmaiseminen tavalla, joka tuo esiin tietystä näkökulmasta

Lisätiedot

Alkuarvot ja tyyppimuunnokset (1/5) Alkuarvot ja tyyppimuunnokset (2/5) Alkuarvot ja tyyppimuunnokset (3/5)

Alkuarvot ja tyyppimuunnokset (1/5) Alkuarvot ja tyyppimuunnokset (2/5) Alkuarvot ja tyyppimuunnokset (3/5) Alkuarvot ja tyyppimuunnokset (1/5) Aiemmin olemme jo antaneet muuttujille alkuarvoja, esimerkiksi: int luku = 123; Alkuarvon on oltava muuttujan tietotyypin mukainen, esimerkiksi int-muuttujilla kokonaisluku,

Lisätiedot

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

Metodit. Metodien määrittely. Metodin parametrit ja paluuarvo. Metodien suorittaminen eli kutsuminen. Metodien kuormittaminen Metodit Metodien määrittely Metodin parametrit ja paluuarvo Metodien suorittaminen eli kutsuminen Metodien kuormittaminen 1 Mikä on metodi? Metodi on luokan sisällä oleva yhteenkuuluvien toimintojen kokonaisuus

Lisätiedot

Lohkot. if (ehto1) { if (ehto2) { lause 1;... lause n; } } else { lause 1;... lause m; } 16.3

Lohkot. if (ehto1) { if (ehto2) { lause 1;... lause n; } } else { lause 1;... lause m; } 16.3 16. Lohkot 16.1 Sisällys Tutustutaan lohkoihin. Muuttujien ja vakioiden näkyvyys sekä elinikä erityisesti operaation lohkossa. Nimikonfliktit. Muuttujat operaation alussa vai myöhemmin? 16.2 Lohkot Kaarisulut

Lisätiedot

Yhtälöryhmä matriisimuodossa. MS-A0007 Matriisilaskenta. Tarkastellaan esimerkkinä lineaarista yhtälöparia. 2x1 x 2 = 1 x 1 + x 2 = 5.

Yhtälöryhmä matriisimuodossa. MS-A0007 Matriisilaskenta. Tarkastellaan esimerkkinä lineaarista yhtälöparia. 2x1 x 2 = 1 x 1 + x 2 = 5. 2. MS-A000 Matriisilaskenta 2. Nuutti Hyvönen, c Riikka Kangaslampi Matematiikan ja systeemianalyysin laitos Aalto-yliopisto 2..205 Tarkastellaan esimerkkinä lineaarista yhtälöparia { 2x x 2 = x x 2 =

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

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

T Olio-ohjelmointi Osa 3: Luokka, muodostin ja hajotin, this-osoitin Jukka Jauhiainen OAMK Tekniikan yksikkö 2010

T Olio-ohjelmointi Osa 3: Luokka, muodostin ja hajotin, this-osoitin Jukka Jauhiainen OAMK Tekniikan yksikkö 2010 11. Luokka Opetellaan seuraavaksi, miten omia luokkia kirjoitetaan. Aikaisemmin olikin jo esillä, että luokka on tietorakenne, joka sisältää sekä tiedot (attribuutit) että niitä käsittelevät aliohjelmat

Lisätiedot

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python Ohjelmoinnin perusteet Y Python T-106.1208 17.3.2010 T-106.1208 Ohjelmoinnin perusteet Y 17.3.2010 1 / 49 Olioista (kertausta) Olioiden avulla voidaan kuvata useammasta arvosta koostuvaa kokonaisuutta

Lisätiedot

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

C-ohjelmointi, syksy Modulaarinen ohjelmointi. Luento C-ohjelmointi Syksy , syksy 2007 Modulaarinen ohjelmointi Luento 9 10.10.2007 Syksy 2007 1 Sisältö Modulaarisuus C:ssä Käännösyksikkö ja otsaketiedosto Makefile Syksy 2007 2 1 Ison ohjelman toteuttaminen Kokonaisuus on jaettava

Lisätiedot

Modulaarinen ohjelmointi

Modulaarinen ohjelmointi C-ohjelmointi Modulaarinen ohjelmointi Viikko 6 1 Sisältö Modulaarisuus C:ssä Käännösyksikkö ja otsaketiedosto Makefile 2 Ison ohjelman toteuttaminen Kokonaisuus on jaettava hallittaviin osiin Toiminnallisia

Lisätiedot

811312A Tietorakenteet ja algoritmit 2015-2016. I Johdanto

811312A Tietorakenteet ja algoritmit 2015-2016. I Johdanto 811312A Tietorakenteet ja algoritmit 2015-2016 I Johdanto Sisältö 1. Algoritmeista ja tietorakenteista 2. Algoritmien analyysistä 811312A TRA, Johdanto 2 I.1. Algoritmeista ja tietorakenteista I.1.1. Algoritmien

Lisätiedot

Ohjelmointiharjoituksia Arduino-ympäristössä

Ohjelmointiharjoituksia Arduino-ympäristössä Ohjelmointiharjoituksia Arduino-ympäristössä Yleistä Arduino-sovelluksen rakenne Syntaksi ja käytännöt Esimerkki ohjelman rakenteesta Muuttujat ja tietotyypit Tietotyypit Esimerkkejä tietotyypeistä Ehtolauseet

Lisätiedot

Ohjelmoinnin peruskurssi Y1

Ohjelmoinnin peruskurssi Y1 Ohjelmoinnin peruskurssi Y1 CSE-A1111 26.10.2015 CSE-A1111 Ohjelmoinnin peruskurssi Y1 26.10.2015 1 / 28 Mahdollisuus antaa luentopalautetta Goblinissa vasemmassa reunassa olevassa valikossa on valinta

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

Sisällys. 15. Lohkot. Lohkot. Lohkot

Sisällys. 15. Lohkot. Lohkot. Lohkot Sisällys 15. Lohkot Tutustutaan lohkoihin. Muuttujien ja vakioiden näkyvyys sekä elinikä erityisesti operaation lohkossa. Nimikonfliktit. Muuttujat operaation alussa vai myöhemmin? 15.1 15.2 Lohkot Aaltosulkeet

Lisätiedot

Esimerkki 1: Kahviautomaatti.

Esimerkki 1: Kahviautomaatti. Esimerkki 1: Kahviautomaatti. ÄÄRELLISET AUTOAATIT JA SÄÄNNÖLLISET KIELET 2.1 Tilakaaviot ja tilataulut Tarkastellaan aluksi tietojenkäsittelyjärjestelmiä, joilla on vain äärellisen monta mahdollista tilaa.

Lisätiedot

Ongelma(t): Mikä on Turingin kone? Miten Turingin kone liittyy funktioihin ja algoritmeihin? Miten Turingin kone liittyy tietokoneisiin?

Ongelma(t): Mikä on Turingin kone? Miten Turingin kone liittyy funktioihin ja algoritmeihin? Miten Turingin kone liittyy tietokoneisiin? Ongelma(t): Mikä on Turingin kone? Miten Turingin kone liittyy funktioihin ja algoritmeihin? Miten Turingin kone liittyy tietokoneisiin? 2013-2014 Lasse Lensu 2 Algoritmit ovat deterministisiä toimintaohjeita

Lisätiedot

Ohjeita Siemens Step7, Omron CX Programmer käyttöön

Ohjeita Siemens Step7, Omron CX Programmer käyttöön Ohjeita Siemens Step7, Omron CX Programmer käyttöön Sisällysluettelo 1 Siemens Step7 Manager...1 1.1 Laitteistomäärittely...1 1.2 Ohjelmalohkon luonti ja toteutus...2 1.3 Ohjelman kutsu...3 2 CX-Programmer...4

Lisätiedot

Pong-peli, vaihe Aliohjelman tekeminen. Muilla kielillä: English Suomi. Tämä on Pong-pelin tutoriaalin osa 3/7. Tämän vaiheen aikana

Pong-peli, vaihe Aliohjelman tekeminen. Muilla kielillä: English Suomi. Tämä on Pong-pelin tutoriaalin osa 3/7. Tämän vaiheen aikana Muilla kielillä: English Suomi Pong-peli, vaihe 3 Tämä on Pong-pelin tutoriaalin osa 3/7. Tämän vaiheen aikana Jaetaan ohjelma pienempiin palasiin (aliohjelmiin) Lisätään peliin maila (jota ei voi vielä

Lisätiedot

Tietotyypit ja operaattorit

Tietotyypit ja operaattorit Tietotyypit ja operaattorit Luennossa tarkastellaan yksinkertaisten tietotyyppien int, double ja char muunnoksia tyypistä toiseen sekä esitellään uusia operaatioita. Numeeriset tietotyypit ja muunnos Merkkitieto

Lisätiedot

Ohjelmointi 1. Kumppanit

Ohjelmointi 1. Kumppanit Ohjelmointi 1 Kumppanit November 20, 2012 2 Contents 1 Mitä ohjelmointi on 7 2 Ensimmäinen C#-ohjelma 9 2.1 Ohjelman kirjoittaminen......................... 9 A Liite 11 3 4 CONTENTS Esipuhe Esipuhe 5

Lisätiedot

Lohkot. if (ehto1) { if (ehto2) { lause 1;... lause n; } } else { lause 1;... lause m; } 15.3

Lohkot. if (ehto1) { if (ehto2) { lause 1;... lause n; } } else { lause 1;... lause m; } 15.3 15. Lohkot 15.1 Sisällys Tutustutaan lohkoihin. Muuttujien ja vakioiden näkyvyys sekä elinikä erityisesti operaation lohkossa. Nimikonfliktit. Muuttujat operaation alussa vai myöhemmin? 15.2 Lohkot Aaltosulkeet

Lisätiedot

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

JAVA-PERUSTEET. JAVA-OHJELMOINTI 3op A274615 JAVAN PERUSTEET LYHYT KERTAUS JAVAN OMINAISUUKSISTA JAVAN OMINAISUUKSIA. Java vs. C++? JAVA-OHJELMOINTI 3op A274615 JAVAN PERUSTEET LYHYT KERTAUS Teemu Saarelainen teemu.saarelainen@kyamk.fi Lähteet: http://java.sun.com/docs/books/tutorial/index.html Vesterholm, Kyppö: Java-ohjelmointi,

Lisätiedot