5.4. Sulautetun järjestelmän C-kielen perusteet. 4/8. Ohjausrakenteet pva

Koko: px
Aloita esitys sivulta:

Download "5.4. Sulautetun järjestelmän C-kielen perusteet. 4/8. Ohjausrakenteet 7.1.2008 pva"

Transkriptio

1 5.4. Sulautetun järjestelmän C-kielen perusteet. 4/8. Ohjausrakenteet pva Superohjelmoija on insinörttitaiteilija ja ryhtyessään koodaamaan, hän keskittyy kunnolla, leijuu jonnekin sfääreihin ja maailma katoaa ympäriltä. - Richi Jennings Tässä osiossa tärkeää: sulautetun järjestelmän ohjelman etenemiseen käytetyt käskyt Sisältö Peräkkäisrakenne Valintarakenne if-lause, if else lause, else-if lause if-esimerkki 1, if ja input, esimerkki 2, if-else-esimerkki 3, if ja else-lause, esimerkki 4 Inkrementointi ja if-lause Switch-lause switch-lause esimerkki 1, Switch-lause esimerkki 2 Toistorakenne for-silmukkalause, for-loop, For-silmukan kolme vaihetta, For-lause esimerkki 1 For-lause ja ikuinen silmukka, Sisäkkäiset silmukat, Sisäkkäiset silmukat esimerkki Break ja for-silmukka, Silmukan keskeyttäminen break-käskyllä, Break-lause esimerkki continue-lause, Silmukan keskeyttäminen continue-lauseella, Continue esimerkki While-toistolause, while-loop, While-lause esimerkki 1 Sisäkkäiset while-lauseet, Ikuinen while-silmukka, while-silmukka ja odotus Do-while-toistolause. Miksi käytetään do-silmukkaa? 1

2 Yleistä Kuten olet tähänastisista harjoituksista huomannut, niin C-kielinen ohjelma koostuu lauseista, joita ovat - lausekkeet - kootut lauseet eli lohkot - sekä erilaiset esittelyt Nämä riittävät yksinkertaisiin ohjelmiin, silloin kun ollaan aivan opiskelun alussa. Jos käsitellään hiemankin monimutkaisempia tehtäviä, myös ohjelmasta tulee monimutkainen ja laaja. Tarvitaan uusia rakenteita ja lauseita ohjelman toiminnan organisointiin ja hallintaan. C-kieli on ohjelmointikieli, jolla tehdään ns. rakenteista eli strukturoitua ohjelmakoodia. Rakenteinen tarkoittaa tässä sitä, että ohjelma jaetaan pieniin rakenneosiin eli lohkoihin ja funktioihin. Pieni on kaunista ja pieniä funktioita on helpompi hallita kuin suuria, jakamattomia kokonaisuuksia. Ryhmittelemällä sopivasti kaikkia opittavia rakenteita saadaan aikaan toimiva ohjelma. Näitten rakenteiden suoritusjärjestyksen muuttaminen on olennainen osa ohjelmointia. Seuraavaksi opitaan miten lisätään ohjelmaan erilaisia ohjausrakenteita. Ohjausrakenteilla ohjataan ja muutetaan ohjelman käskyjen suoritusjärjestystä. Useimmat suorituksen ohjauskäskyt perustuvat jonkin ehdon testaamiseen. Ehto joko täyttyy, eli on tosi - true, tai ei täyty, eli on epätosi- false. C-kielessä tosi-arvo on mikä tahansa nollasta poikkeava kokonaisluku ja epätosi on aina nolla. Ohjelman eteneminen Ohjelma etenee (käskyjen suoritusjärjestys) kolmella eri tavalla: 1. Peräkkäinen 2. Valinta 3. Toisto Peräkkäisrakenne Ohjelman käskyt suoritetaan peräkkäin eli siinä järjestyksessä, johon ohjelmoija on ne kirjoittanut, ylhäältä alas, vasemmalta oikealle. Lauseiden ryhmitys selkeyttää koodin ymmärtämistä. Tähänastiset ohjelmaesimerkit ovat käyttäneet (pääasiassa) vain tätä rakennetta Valintarakenne Valinta- eli ehtorakenne mahdollistaa tehtävien vaihtoehtoisen suorittamisen. Toimenpide valitaan kahdesta tai useammasta vaihtoehdosta jonkin ehdon perusteella. Ohjelma tekee päätöksiä. Näin saadaan pienestäkin ohjelmasta älykäs, mikä on eduksi etenkin sulautetuissa järjestelmissä. Valintarakenteita ovat: - päätöksen tekeminen, if, if-else - yhden valitseminen useasta vaihtoehdosta, switch 2

3 if-lause Kaikkien ohjauskäskyjen perusrakenne on ehto- eli if-lause. Sen avulla voi ohjelman suorituksen jakaa kahteen eri haaraan, joista vain toinen suoritetaan halutun ehdon perusteella. If-lause näyttää C-kielessä tällaiselta: Kuva if-rakenne. if-lauseen yleinen muoto, formaatti: if(ehto) lause; esim. if(lampo_1 > lampo_2) // jos ehto on tosi eli lampo_1 on suurempi kuin lampo_2, PORTB = 0x01; // B-porttiin sijoitetaan hex-luku 0x01 Sulkujen sisällä oleva ehto voi olla mikä tahansa lauseke, tavallisimmin se on vertailulauseke. Siinä verrataan kahden arvon suuruutta keskenään, esim. onko y suurempi kuin x; y > x? Jos ehto on tosi, eli sulkujen sisällä olevan ehto-lauseen arvo on nollasta poikkeava, suoritetaan lause. Muuten ei. Jos ehdon perusteella suoritettavia lauseita on useita, lauseet kootaan yhteen käyttäen aaltosulkuja. if(ehto) lause_1; lause_2; lause_3; Huomaa, että kaarisulkujen jälkeen ei tule puolipistettä. if-käskyyn liittyy - joko yksittäinen käsky - tai monta käskyä. Jos if-lauseeseen liittyy monta käskyä, ne on sijoitettava omaan lohkoonsa ja siis erotettava muusta ohjelmasta lohkoerottimilla 3

4 if else lause If-lauseessa voi olla myös valinnainen else-osa: if(ehto) lause_1; else lause_2; Kuva If-else-rakenne. Jos ehto on tosi, suoritetaan lause_1. Jos ehto ei ole totta, eli sulkujen sisällä olevan lausekkeen arvo on nolla, suoritetaan lause_2. If-lausetta voi jatkaa niin pitkälle kuin tarpeellista lisäämällä uusia if-lauseita else-osan perään. Ehto laitetaan aina sulkeiden sisään. Lause voi olla joko yksittäinen käskylause tai aaltosulkeissa oleva koottu lause (eli monta lausetta). else-if lause if(ehto_1) lause_1; else if(ehto_2) lause_2; else lause_3; Huom! if-lauseen jälkeen puolipiste (;) puuttuu. Muista kirjoittaa ehdon ympärille kaarisulkeet. Jos if-lauseita on kaksi tai useampia, niin se toteutetaan, joka on tosi. 4

5 if-esimerkki 1 Kirjoita seuraava lähdekoodi, käännä ja aja se. /********************************************************** Project : if_1.c Hardware: PV-M32 + PV-LEDIT on PORTB Software: WinAVR Date : Comments: if-lauseen demo **********************************************************/ #include <util/delay.h> // prototyyppi void wait(uint16_t time); int main(void) DDRB = 0xFF; uint8_t luku = 0; while(1) PORTB = luku; wait(500); luku = luku + 1; if(luku > 8) // testi, jos luku on suurempi kuin 8 luku = 0; // luku nollataan Analysointi Ohjelma laskee nollasta ylöspäin ja joka kierroksella testataan, joko ollaan yli kahdeksan. Kun luku on suurempi kuin 8, luku-muuttuja nollataan ja laskenta alkaa uudestaan. Harjoituksia 1. Muuta esimerkkiohjelman testiehtoa. 2. Muuta testiehtoa ja askellusta. (esim. luku = luku + 2;). 3. Muuta testiehto toisinpäin, siis pienempi kuin, <., ja samalla myös koodia, niin että toimii. Aloittelijan virhe! Tyypillinen aloittelijan virhe on panna puolipiste if-lauseen loppuun. Se aiheuttaa yleensä paljon hämminkiä. if(virta == 10); // jos virta on yhtä suuri kuin 10 lause_1; - tässä lause_1 suoritetaan aina, koska kukin rivi suoritetaan erillisenä lauseena, ei yhdessä, kuten oli tarkoitus - kun otat puolipisteen pois sulkumerkin jälkeen, ohjelma toimii oikein. 5

6 Nyt voidaan jatkaa if-lauseen tutkimista. if ja input, esimerkki 2 /********************************************************** Project : if_in.c HW: PV-M32 + PV-TINT + PV-LEDIT SW: WinAVR Date : Comments: lukee D-portin tilan ja tulostaa muuttujan, jos S1=INT0 on painettu ***********************************************************/ int main(void) unsigned char inpu; unsigned char luku = 0x18; DDRB = 0xFF; // B-portti output DDRD = 0xF0; // D-portti input PORTD = 0xFF; while(1) PORTB = 0x01; inpu = PIND; // luetaan portti D muuttujan arvoksi if(inpu == 0xBB) // jos S1=INT0 painettu PORTB = luku; // katso PV-TINT-kortin kaaviota, // siitä selviää miksi vertoarvo on 0xBB Analysointi Ohjelman alussa kaikki D-portin bitit asetetaan ykköseksi: PORTD = 0xFF; Jos S1 on painettu, se merkitsee sitä, että bitti 3 menee nollaksi, ja johtuen kortin kytkennästä myös 6- bitti menee nollaksi, jolloin portista luettava ei ole 0xFB, vaan 0xBB. if-lauseessa testataan, onko inpu-muuttujaan luettu arvo yhtä kuin 0xBB. Jos S1=INT0 on painettu alas, kun porttia luetaan muuttujaan, niin silloinhan se on. Ehto on selvästikin tosi ja B-porttiin kirjoitetaan luku-muuttujan arvo. Harjoituksia 1. Lisää testiehto, jossa testataan onko kytkintä S2=INT1 painettu. 2. Lisää testiehto, jossa testataan onko kytkimet S1 ja S2 painettu alas yhtaikaa.. 6

7 if-else-esimerkki 3 jossa mukana esikääntimen direktiivi #define /********************************************************** Project : if_else.c HW : PV-M32 + PV-EMO + PV-LEDIT SW : WinAVR Date : Comments: lukee D-portin tilan ja tulostaa muuttujan, jos S1 & S2 on painettu **********************************************************/ #define S2 bit_is_clear(pind, 2) // jos S2 painettu #define S3 bit_is_clear(pind, 3) // jos S3 painettu int main(void) DDRB = 0xFF; DDRD = 0x00; PORTD = 0xFF; // B-portti output // D-portti input while(1) if(s2) // jos S2 painettu PORTB = 0x0F; else if(s3) // jos S3 painettu PORTB = 0xF0; else PORTB = 0x81; // ellei mitään painettu Analysointi Uutta koodissa on kaksi symbolisen merkkivakion määritystä, #define S2 bit_is_clear(pind, 2) // jos S2 painettu #define S3 bit_is_clear(pind, 3) // jos S3 painettu Määritys toimii siten, että esikäännin korvaa koodissa missä tahansa kohtaa esiintyvän S2-merkinnän makrolla joka testaa onko D-portin 2-bitti nolla vai ei. Siinähän on nolla, jos S2-nappia on painettu. Ellei kumpaakaan nappia ole painettu niin else // ellei mitään painettu PORTB = 0x81; LED-kuvio loistaa vain niin kauan kuin painat jotain kytkintä, sillä koodissa ei käytetä viivettä. Harjoituksia 1. Muuta testiehtoja ja tulostettavia LED-kuvioita. 2. Lisää testiehto, jossa S1 ja S2 painettu alas yhtaikaa. If-else-lausetta kehittyneempi valintakomento on switch. Tarvitsemme sen käytössä break-komentoa, joten tutkitaan se ensin. 7

8 Silmukan keskeyttäminen break-käskyllä Switch-lauseesta joudutaan poistumaan, kun jokin sen ehto toteutuu. Poistuminen voidaan toteuttaa break-komennolla. Se aiheuttaa hyppäämisen ulos silmukasta välittömästi. Break-komennon käyttö ei liity pelkästään switch-lauseeseen, vaan sitä voidaan käyttää myös ohjelmasilmukoiden kanssa. Jos ollaan ohjelmasilmukassa, break-komennolla hypätään sieltä ulos. Käsky toimii siis myös while, for ja do - while lauseiden yhteydessä. Break-lause, esimerkki /********************************************************* Project : break.c HW: PV-M32 SW: WinAVR Date : Comments: break-lauseen demo *********************************************************/ #include <util/delay.h> // *** Primitive wait() *** void wait(uint16_t time) volatile uint16_t i; for(i=0;i<2000;i++) _delay_loop_2(time); int main(void) DDRB = 0xFF; unsigned char laskuri=0; while(1) while(1) if(laskuri > 33) break; // hypätään ulos, kun ehto on tosi ++laskuri; // laskuri = laskuri + 1; PORTB = laskuri; wait(50); laskuri = 0; Analysointi Ohjelma laskee ja tulostaa laskuri-muuttujaa, kunnes ehto on tosi. Silloin poistutaan sisemmästä whilesilmukasta, ja jatketaan. Uloimman while-silmukan ensimmäinen toimenpide on nollata laskuri, palataan takaisin sisempään silmukkaan ja if-testiin. Laskenta jatkuu ikuisesti. 8

9 Silmukan keskeyttäminen continue-lauseella Muuten toiminnaltaan samankaltainen kuin break, mutta kun break-lauseen kohdatessaan ohjelma hyppää ulos silmukasta, niin continue ohittaa kaikki silmukan loput käskyt ja aloittaa saman silmukan alusta. Käyttö while, do-while ja for-loopeissa. Ei toimi switch-lauseessa. Joissakin tapauksissa ohjelmassa joudutaan palaamaan while-silmukan alkuun ennen kaikkien silmukan runkolauseiden suoritusta. Continue-komento sijoitetaan silmukan runkoon haluttuun kohtaan. Kun continue-komento suoritetaan, alkaa seuraava silmukan kierros välittömästi. Silmukan loput lauseet ohitetaan. Do-while-silmukassa testataan lopetusehdot ja tarvittaessa aloitetaan seuraava silmukkakierros. Käytä continue ja break-lauseita varoen. Ohjelmaa, joka äkkiä muuttaa suuntaansa, on vaikea ymmärtää. Continue esimerkki /********************************************* Project : continue.c HW: PV-M32 SW: WinAVR Date : Comments: continue-lauseen demo *********************************************/ #include <util/delay.h> int main(void) DDRB = 0xFF; unsigned char laskuri; while(1) laskuri = 0; while(1) if(laskuri > 62) continue; // stop, kun ehto on tosi, // koska ei hypätä ulos silmukasta, vaan silmukan alkuun ++laskuri; // laskuri = laskuri + 1; PORTB = laskuri; wait(50); laskuri = 0; Analysointi Koodin pohjana on edellinen esimerkki, jotta komentojen toimintaero selviää. Kun if-lauseen ehto on tosi, ohjelma pysähtyy, koska ei poistuta silmukasta, vaan continuella hypätään saman silmukan alkuun ja laskurihan on edelleen suurempi kuin 62. 9

10 Switch-lause Jos testattavia asioita on monta, pannaan if- ja else-lauseita yhtä monta peräjälkeen. Muutama vielä menettelee, mutta äkkiä tulee tilanne, että koodista tulee sekava ja se on vaikeasti ymmärrettävä. Otetaan apuun switch-lause. Switch-lauseen sisällä suoritus haarautuu yhteen useasta mahdollisesta haarasta. Sitä käytetään tavallisesti erilaisissa valikkorakenteissa, joissa käyttäjän valintojen perusteella jatketaan ohjelmaa. Tai esimerkiksi sulautetuissa järjestelmissä luetaan jonkin portin tila (vaikkapa varasvalvonnan ovi- ja ikkunakytkimet) tietyin väliajoin ja sen perusteella suoritetaan valinta, miten ohjelma jatkuu (käynnistetään kameranauhuri, kutsutaan yövahti, soitetaan poliisi, hälytetään palokunta, pannaan summeri soimaan, jne.). Kuva switch-lause. switch-lauseen formaatti: switch (ehto) case luku1: lause1; break; case luku2: lause2; break; case luku3: lause3; break; case luku4: lause4; break; default: lause5 Switch-lauseen otsikossa on ehto-lauseke, joka määrää mikä case-sanalla merkityistä tapauksista valitaan. Lausekkeen arvon on oltava kokonaisluku, mutta sen paikalla voi käyttää myös erimerkiksi merkkivakiota. Jokaisella tapauksella on oma case-osansa. Lohkossa hypätään siihen kohtaan, joka vastaa muuttujan arvoa. Jokaisen vaihtoehdon käsittelyn jälkeen pitää laittaa break-käsky. Sillä poistutaan switch-lauseesta sitä seuraavaan komentolauseeseen. Jos vastaava arvoa ei löydy, hypätään 10

11 default-arvoon ja suoritetaan sen käskyt. Default-osassa voi olla esimerkiksi virhetilanteiden käsittelyyn liittyvää ohjelmakoodia, vaikka vikailmoitus. Se voi myös puuttua. Switch-lause on kuin vaihtokytkin, jonka avulla haaraudutaan oikeaan case-osaan, jos switchin jälkeen suluissa oleva lauseke saa jonkin caselauseen jälkeisen arvon. Jos mikään ei matsaa, suoritetaan default-lause. Switch-lause vaikuttaa monimutkaiselta, mutta siitä tulee selkeä parin harjoituksen jälkeen. switch-lause, esimerkki 1 /********************************************************** Project : switch_1. HW : PV-M32 + PV-TINT + PV-LEDIT on B-port SW : WinAVR Date : Comments: switch-ehtorakenne case-ehdot "outoja", ne johtuvat PV-TINT-kortin rakenteesta **********************************************************/ #include <util/delay.h> // *** Primitive wait() *** void wait(uint16_t time) volatile uint16_t i; for(i=0;i<2000;i++) _delay_loop_2(time); int main(void) uint8_t inpu; DDRB = 0xFF; DDRD = 0x00; PORTD = 0xFF; // B-portin suunta lähtö, output // D-portin suunta tulo, input // D-portin pinnit ylös while(1) inpu = PIND; // luetaan D-portin tila switch(inpu) case 0x8B: PORTB = 0x0F; wait(1000); break; case 0xC7: PORTB = 0xF0; // jos INT0 painettu // jos INT1 painettu 11

12 wait(1000); break; default: PORTB = 0x81; // jos mitään ei painettu Analysointi Ensin luetaan D-portin tila. Jos mitään painokytkintä ei ole painettu, resetin jälkeen kaikki portin pinnit ovat tilassa looginen ykkönen, lukuunottamatta 5- ja 6-bittejä (johtuu kortin kytkennästä). Eli kun D- portin tila luetaan inpu-muuttujan arvoksi, on tulos 0xCF. Jos jompikumpi D-portin kahdesta kytkimestä on painettu alas, se maadoittaa ko. pinnin eli sen tila on nolla, joten inpu-muuttujan arvo muuttuu vastaavasti. Tätä testataan switch-lauseessa ja tämän jälkeen suoritetaan sen case-osan lause, jonka lausekkeen arvo on sama kuin ehto-osan lausekkeen arvo. Mikäli switch-lauseessa ei ole sellaista case-osaa, jonka lausekkeen arvo vastaa ehto-osan lausekkeen arvoa, (eli mitään kytkintä ei ole painettu) suoritetaan default-osan lause. Switch-lause, esimerkki 2 /********************************************************** Project : switch_2.c Hardware: PV-M32 + PV-EMO + PV-LEDIT on PORTB Software: WinAVR Date : Comments: switch-ehtorakenne **********************************************************/ #include <util/delay.h> int main(void) unsigned char arvo, laskuri = 0; DDRB = 0xFF; // B-portin suunta lähtö, output while(1) if(laskuri < 5) PORTB = 0x01; laskuri++; arvo = laskuri; if(laskuri > 20) laskuri = 0; switch(arvo) case 5: PORTB = 0x04; // jos arvo on 5, LED 4 loistaa break; 12

13 case 10: PORTB = 0x10; break; case 15: PORTB = 0x40; break; default: wait(200); Analysointi Koodi ei kommenttia enempää kaipaa, kunhan teet tähän liittyvän harjoitukset. No goto! Basicilla ohjelmoineet muistanevat goto-lauseen. Se on myös C-kielessä. Goto-lause sallii hypyn koodissa mihin tahansa, eteen- tai taaksepäin. Siitä seuraa vaikeasti tulkittavaa koodia, spagetti-koodia. Ilman goto-lausetta voi C-ohjelman aivan hyvin tehdä, joten on parempi olla käyttämättä sitä. 13

14 Toistorakenne Toisto- eli silmukkarakenne on ohjelmarakenne, joka suorittaa saman asian useita kertoja peräkkäin. Jos on laskettava joku tietty arvo, vaikkapa viive, jos pitää säännöllisesti tietyn ajan kuluttua käydä lukemassa joukko portteja tai vaikkapa taulukon käsittely (opitaan myöhemmin), tarvitaan ohjelmoinnissa silmukkarakennetta. Koska sulautetuissa järjestelmissä ei (yleensä) ole käyttöjärjestelmää, tarvitaan jokaisessa ohjelmassa erityinen toistorakenne, ikuinen silmukka. Silmukkarakenteita on kolme erilaista; - for - while - do-while for-silmukkalause, for-loop Jos tiedetään etukäteen, montako kertaa ohjelmasilmukka tulee tehdä, käytetään for-lausetta. Kuva for-silmukka. for-silmukan formaatti: for(silmukkalaskurin_alkuarvo; ehto; päivitys) ohjelmalause; Jos useita lauseita liittyy for-silmukkaan, on käytettävä lausesulkeita. 14

15 For-silmukan kolme vaihetta 1. Laskurimuuttujan alkuarvon asetus, initialization Alkuarvon asetus voi olla mikä tahansa C-kielen lause. Yleensä se kuitenkin on sijoituslause, jolla asetetaan muuttujan alkuarvo. 2. Testi eli ehdon tarkistus, test-expression Sillä tarkistetaan jatketaanko silmukkaa vai ei. Testiehtolause on usein vertailulause. Toistoehto tutkitaan aina ennen mahdollista silmukan suoritusta. Jos ehto on tosi eli nollasta poikkeava, forlauseen komennot suoritetaan. Jos tulos taas on epätosi (nolla), silmukka pysäytetään ja siirrytään forlauseen jälkeiseen lauseeseen. Jos ehto on epätosi jo ensimmäisessä tarkistuksessa, ei ohjelmalausetta suoriteta kertaakaan. 3. Laskurimuuttujan arvon päivitys, increment/decrement Laskurin päivtys voi olla mikä tahansa C-kielen lauseke. Yleensä se on lause, joka kasvattaa alkuarvoa (yhdellä tai suuremmalla luvulla). Voi olla myös toisin päin eli vähennyslause. Silmukassa olevaa ohjelmalausetta toistetaan niin kauan, kunnes laskuri on kasvanut alarajalta ylärajalle tai päinvastoin. Silmukkalaskuri on muuttuja, joka tulee määritellä aivan kuten muutkin muuttujat. Laskurin alku- ja loppuarvot voivat olla mitä tahansa kokonaislukuja, tai jonkun muun numerotyypin alkioita. Vanhassa C:ssä for-silmukan alkulausekkeessa ei voinut alustaa muuttujia. Vuoden 1999 standardiin tuo ominaisuus lisättiin. Gcc:n uusimmatkaan versiot eivät tue koko C99-standardia kunnolla, mutta tuo ominaisuus kyllä löytyy ainakin gcc 3.0:sta. Tutkitaan muutama esimerkki ja tehdään harjoituksia, jotka selvittävät asiaa. For-lause, esimerkki 1 /********************************************************** Project : for_1.c HW: PV-M32 + PV-LEDIT SW: WinAVR Date : Comments: for-lauseen demo **********************************************************/ #include <util/delay.h> // *** Primitive wait() *** void wait(uint16_t time) volatile uint16_t i; for(i=0;i<2000;i++) _delay_loop_2(time); 15

16 int main(void) uint8_t i; // silmukkalaskurin muuttuja DDRB = 0xFF; for(i = 0; i < 65; i++) // alkuarvo, testi, päivitys PORTB = i; wait(50); PORTB = 0x81; Analysointi Ensin for-silmukassa alustetaan laskurimuuttuja eli i:n arvoksi laitetaan 0. Sen jälkeen tutkitaan, onko laskurin tarkistamiseen annettu ehto tosi, vai epätosi. Ensimmäisellä kierroksella se on selvästi tosi, joten siirrytään suorittamaan for-lauseen runkoa, eli suoritetaan aaltosulkujen välissä olevat lauseet, järjestyksessä. Kun for-lauseen runko on suoritettu, kasvatetaan laskuria i, siis i++ eli i = i + 1; Nyt yksi for-lauseen kierros on suoritettu, ja i:n arvona on 1. Alustusta ei enää suoriteta, ainoastaan ehdon tarkistus, runko ja kasvatus. Seuraava kierros alkaa jälleen ehdon tarkistuksella, eli onko i < 65?, kyllä. Näin jatketaan kunnes ehto on epätosi eli 65 < 65. For lause päättyy For-lause ja ikuinen silmukka Tähän asti me olemme tehneet sulautetuissa järjestelmissä yleisen ikuisen silmukan while-lauseella. Sama voidaan tehdä myös for-lauseella. /********************************************* Project : for_ikuinen.c Date : Comments: ikuinen silmukka for-lauseella *********************************************/ #include <util/delay.h> // *** Primitive wait() *** void wait(uint16_t time) volatile uint16_t i; for(i=0;i<2000;i++) _delay_loop_2(time); 16

17 int main(void) uint8_t i = 0; // silmukkalaskurin muuttuja DDRB = 0xFF; for(;;) // ikuinen silmukka i++; // i = i + 1; PORTB = i; wait(100); if(i > 100) // jos yli 100, aloita alusta i = 0; Analysointia tuskin kaipaa Sisäkkäiset silmukat Silmukat voidaan laittaa sisäkkäin, yksi silmukka toisen sisälle. Sisällä oleva silmukka tulee suorittaa kokonaan jokaisen ulomman silmukan kierroksen aikana. Sisäkkäiset silmukat, esimerkki /********************************************************** Project : for_sisaiset.c HW: PV-M32 + PV-LEDIT on B-port SW: WinAVR Date : Comments: for-lauseen demo **********************************************************/ int main(void) volatile uint8_t i; // ulompi silmukkalaskuri volatile uint32_t k; // sisempi silmukkalaskuri DDRB = 0xFF; for(i = 0; i < 65; i++) PORTB = i; for(k = 0; k < 30000; k++); // kulutetaan aikaa PORTB = 0x81; // for-lauseet läpikäyty 17

18 Analysointi Tärkeää on huomata, että tässä on käytettävä muuttujan volatile-määritystä. Muuten käännin optimoi koodin ja hypätään suoraan silmukasta ulos. Käy tutustumassa volatile-määrityksestä C-kielen käsitteet-osiosta. volatile uint8_t i; // ulompi silmukkalaskuri volatile uint32_t k; // sisempi silmukkalaskuri Käytämme for-silmukassa sisäistä for-silmukkaa, jossa ei tehdä mitään, kulutetaan vain aikaa laskemalla :een. Luku on oltava suuri, jotta viive näkyisi. Kuten muistanet, AVR on RISCtyyppinen, joten yhdellä kellopulssilla tehdään koko konekäsky. Jos silmukkamuuttuja on saanut arvon ennen silmukkaan tuloa, sitä ei tarvitse initialisoida itse silmukassa. Toisaalta silmukkamuuttujan päivitys voi olla muutakin kuin +1. esim. laskuri = 4; for(; laskuri < 14; laskuri + 2) lauseita; Laskuri-muuttuja on asetettu jo ennen for-silmukkaa Break ja for-silmukka Break-käskyn suoritus aiheuttaa poistumisen ohjelman siitä (sisimmästä) ohjausrakenteesta, missä se sijaitsee. Ts. jos break kohdataan sisäisessä silmukassa, ohjelma hyppää ulospäin silmukan jälkeiselle komentoriville, tai seuraavaan silmukkaan. esim. for(laskuri = 0; laskuri < 9; laskuri++) PORTB = laskuri; if (laskuri == 5) //jos laskurin arvo yhtä kuin 5, hypätään ulos for-silmukasta break; 18

19 While-toistolause, while-loop Kun ei tiedetä tarkkaan, montako kertaa käskysarjaa pitää toistaa, käytetään while-lausetta. Siinä toistetaan käskysarjaa niin kauan kuin annettu ehto on tosi. While-lauseen tarve testataan ennen silmukkaan menoa. Siksi on mahdollista, että silmukkaa ei koskaan käydä läpi, eikä sen käskyjä suoriteta. Kuva while-silmukka. while-silmukan formaatti: while (ehto) lause; esim. while (luku < 5) // niin kauan kuin luku on pienempi kuin 5, suoritetaan silmukassa käskyjä PORTB = 0xAA; Sulkujen sisällä on testi- eli jatkamisehto. Mikäli lausekkeen arvo on tosi, suoritetaan lause ja palataan uudelleen lausekkeen arvon testaamiseen. Esimerkkilauseessa niin kauan kuin luku-muuttuja on pienempi kuin 5, ehto on tosi ja silmukka jatkuu. Silmukassa ollaan, kunnes ehto on epätosi. Lopetusehto tarkistetaan aina ennen ensimmäistä toimenpidettä ja aina, kun ollaan silmukan käskyrivien lopussa. Ehto voi olla mikä tahansa C-lauseke, useimmiten vertailulauseke. Lause, joka while-silmukassa suoritetaan, voi olla * yksi lause, joka päättyy puolipisteeseen, tai * se voi olla useita lauseita, yhdistelmälause, jolloin se ympäröidään lausesulkeisiin. Itse ohjelmalauseet voivat olla mitä tahansa C-kielen lauseita. 19

20 While-lause, esimerkki 1 /********************************************************** Project : while_1.c HW: PV-M32 + PV-LEDIT on B-port SW: WinAVR Date : Comments: while-lauseen demo **********************************************************/ #include <util/delay.h> // *** Primitive wait() *** void wait(uint16_t time) volatile uint16_t i; for(i=0;i<2000;i++) _delay_loop_2(time); int main(void) uint8_t testi = 33; DDRB = 0xFF; while(testi) testi--; // testi = testi - 1; PORTB = testi; wait(100); PORTB = 0x81; // while-lause läpikäyty Analysointi Äkkiä ajatellen yllä olevassa koodissa ei loppua tule koskaan. Mutta tutkitaan asiaa tarkemmin, opitaan samalla tärkeä seikka, jota tarvitaan, kunhan päästään ohjelmoinnissa mikro-ohjaimen sisäisiin laskureihin. Niin kauan kuin testi on erisuuri kuin nolla, ohjelma pyörii while-silmukassa vilkutellen LED-diodeja. Miksi ja milloin ohjelma viimein pysähtyy? Kun ehto on nolla, epätosi, sehän on selvä. Kun laskennassa muuttujan arvo on päätynyt arvoon 0x00, se on binäärisenä Silloin whiletestiehto on selvästikin epätosi ja tullaan ulos silmukasta. Muista! C-kielessä kaikki nollasta poikkeavat luvut ovat tosi-true. Nolla on epätosi-false. 20

21 Sisäkkäiset while-lauseet while-silmukka voi olla toisen while-lauseen sisällä. Tällöin on pidettävä huolta, että sisäinen silmukka on kokonaisuudessaan ulomman sisällä. Ikuinen while-silmukka while(1) koodia Tässä ehto on aina tosi, joten ohjelma pyörii silmukassa 'ikuisesti'. Tämä on tyypillinen ja hyvin usein tarvittava sulautetun järjestelmän ohjelmasilmukka. while-silmukka ja odotus While-silmukkaa voidaan käyttää odotettaessa jotain tiettyä tapahtumaa, kuten ovikytkimen aiheuttamaa bitin kääntymistä. Kun ovi on sulkeutunut, ohjelma jatkuu while-silmukan jälkeisestä seuraavasta käskystä. while(ovi==1); Kun ovi sulkeutuu, ovi-muuttuja saa arvon 0 ja ohjelman eteneminen jatkuu Do-while-toistolause Do-while lause muodostaa silmukan, jota toistetaan kunnes testilausekkeesta tulee epätosi eli nolla. Dowhile lause on lopetusehtoinen silmukka. Päätös silmukan uudesta kierroksesta tehdään silmukan läpikäynnin jälkeen, joten silmukan kaikki käskyt suoritetaan ainakin kerran. Kuva do-while-lause. 21

22 do-while-lauseen formaatti: do ohjelmalause(et); while (ehto); Ehto voi olla mikä tahansa C-lauseke, usein se on vertaileva lauseke. Jos lauseosassa on useita käskyjä, on käytettävä lausesulkeita. Lauseosaa toistetaan, kunnes testistä tulee epätosi eli nolla. Ehdon testi tehdään vasta käskyjen suorittamisen jälkeen. Miksi käytetään do-silmukkaa? do-silmukka on harvemmin käytetty kuin while. Erona on se, että while-lauseessa ehto testataan ennen käskysarjan suoritusta ja do-lauseessa vasta sen jälkeen. Mitä tämä käytännössä merkitsee? Jos silmukan lauseet on tehtävä ainakin yhden kerran, käytetään Do-lausetta. While-lauseen runkoa ei suoriteta kertaakaan, jos ehto on epätosi jo ensimmäisellä testauskerralla. Yleensä do.. while -rakennetta ei suositella käytettäväksi sen hankalan logiikan kannalta. Do-while esimerkki /********************************************************** Project : do_while.c HW: PV-M32 + PV-LEDIT SW: WinAVR Date : Comments: for-lauseen demo **********************************************************/ #include <util/delay.h> // *** Primitive wait() *** void wait(uint16_t time) volatile uint16_t i; for(i=0;i<2000;i++) _delay_loop_2(time); 22

23 int main(void) uint8_t testi = 0x00; DDRB = 0xFF; do testi++; // testi = testi + 1; PORTB = testi; wait(50); while(testi < 9); // ehdon testaus PORTB = 0x81; // while-lause läpikäyty Analysointi Niin kauan kuin testi on pienempi kuin 9, suoritetaan silmukan koodit. Kun ehto ei ole tosi, hypätään ulos. while(testi < 9); // ehdon testaus 23

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

12. Javan toistorakenteet 12.1

12. Javan toistorakenteet 12.1 12. Javan toistorakenteet 12.1 Sisällys Yleistä toistorakenteista. Laskurimuuttujat. While-, do-while- ja for-lauseet. Laskuri- ja lippumuuttujat. Tyypillisiä ohjelmointivirheitä. Silmukan rajat asetettu

Lisätiedot

11. Javan toistorakenteet 11.1

11. Javan toistorakenteet 11.1 11. Javan toistorakenteet 11.1 Sisällys Laskuri- ja lippumuuttujat. Sisäkkäiset silmukat. Tyypillisiä ohjelmointivirheitä: Silmukan rajat asetettu kierroksen verran väärin. Ikuinen silmukka. Silmukoinnin

Lisätiedot

Sisällys. 12. Javan toistorakenteet. Yleistä. Laskurimuuttujat

Sisällys. 12. Javan toistorakenteet. Yleistä. Laskurimuuttujat Sisällys 12. Javan toistorakenteet Ylstä toistorakentsta. Laskurimuuttujat. While-, do-while- ja for-lauseet. Laskuri- ja lippumuuttujat. Tyypillisiä ohjelmointivirhtä. Silmukan rajat asetettu kierroksen

Lisätiedot

Sisällys. 11. Javan toistorakenteet. Laskurimuuttujat. Yleistä

Sisällys. 11. Javan toistorakenteet. Laskurimuuttujat. Yleistä Sisällys 11. Javan toistorakenteet Laskuri- ja lippumuuttujat.. Tyypillisiä ohjelmointivirheitä: Silmukan rajat asetettu kierroksen verran väärin. Ikuinen silmukka. Silmukoinnin lopettaminen break-lauseella.

Lisätiedot

Ehto- ja toistolauseet

Ehto- ja toistolauseet Ehto- ja toistolauseet 1 Ehto- ja toistolauseet Uutena asiana opetellaan ohjelmointilauseet / rakenteet, jotka mahdollistavat: Päätösten tekemisen ohjelman suorituksen aikana (esim. kyllä/ei) Samoja lauseiden

Lisätiedot

Osa. Toimintojen toteuttaminen ohjelmissa vaatii usein haarautumisia ja silmukoita. Tässä luvussa tutustummekin seuraaviin asioihin:

Osa. Toimintojen toteuttaminen ohjelmissa vaatii usein haarautumisia ja silmukoita. Tässä luvussa tutustummekin seuraaviin asioihin: Osa II 8. oppitunti Kehittynyt ohjel- man kulku Toimintojen toteuttaminen ohjelmissa vaatii usein haarautumisia ja silmukoita. Tässä luvussa tutustummekin seuraaviin asioihin: Mitä silmukat ovat ja kuinka

Lisätiedot

Sisällys. 3. Pseudokoodi. Johdanto. Johdanto. Johdanto ja esimerkki. Pseudokoodi lauseina. Kommentointi ja sisentäminen.

Sisällys. 3. Pseudokoodi. Johdanto. Johdanto. Johdanto ja esimerkki. Pseudokoodi lauseina. Kommentointi ja sisentäminen. Sisällys 3. Pseudokoodi Johdanto ja esimerkki. Pseudokoodi lauseina. Kommentointi ja sisentäminen. Ohjausrakenteet: Valinta if- ja if--rakenteilla. oisto while-, do-while- ja for-rakenteilla. 3.1 3.2 Johdanto

Lisätiedot

11. Javan valintarakenteet 11.1

11. Javan valintarakenteet 11.1 11. Javan valintarakenteet 11.1 Sisällys If- ja if--lauseet. Orpo. Valintaa toisin: switch-lause. 11.2 Valintarakenteet Valintarakenteilla ilmaistaan formaalisti, kuinka algoritmin suoritus voi haarautua

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

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

TAITAJA 2007 ELEKTRONIIKKAFINAALI 31.01-02.02.07 KILPAILIJAN TEHTÄVÄT. Kilpailijan nimi / Nro:

TAITAJA 2007 ELEKTRONIIKKAFINAALI 31.01-02.02.07 KILPAILIJAN TEHTÄVÄT. Kilpailijan nimi / Nro: KILPAILIJAN TEHTÄVÄT Kilpailijan nimi / Nro: Tehtävän laatinut: Hannu Laurikainen, Deltabit Oy Kilpailutehtävä Kilpailijalle annetaan tehtävässä tarvittavat ohjelmakoodit. Tämä ohjelma on tehty laitteen

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

5/20: Algoritmirakenteita III

5/20: Algoritmirakenteita III Ohjelmointi 1 / syksy 2007 5/20: Algoritmirakenteita III Paavo Nieminen nieminen@jyu.fi Tietotekniikan laitos Informaatioteknologian tiedekunta Jyväskylän yliopisto Ohjelmointi 1 / syksy 2007 p.1/17 Tämän

Lisätiedot

Sisällys. 17. Ohjelmoinnin tekniikkaa. Aritmetiikkaa toisin merkiten. for-lause lyhemmin

Sisällys. 17. Ohjelmoinnin tekniikkaa. Aritmetiikkaa toisin merkiten. for-lause lyhemmin Sisällys 17. Ohjelmoinnin tekniikkaa for-lause lyhemmin. Vaihtoehtoisia merkintöjä aritmeettisille lauseille. Useiden muuttujien esittely ja alustaminen yhdellä lauseella. if-else-lause vaihtoehtoisesti

Lisätiedot

13. Loogiset operaatiot 13.1

13. Loogiset operaatiot 13.1 13. Loogiset operaatiot 13.1 Sisällys Loogiset operaatiot AND, OR, XOR ja NOT. Operaatioiden ehdollisuus. Bittioperaatiot. Loogiset operaatiot ohjausrakenteissa. Loogiset operaatiot ja laskentajärjestys.

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 30.9.2015 CSE-A1111 Ohjelmoinnin peruskurssi Y1 30.9.2015 1 / 27 Mahdollisuus antaa luentopalautetta Goblinissa vasemmassa reunassa olevassa valikossa on valinta Luentopalaute.

Lisätiedot

16. Ohjelmoinnin tekniikkaa 16.1

16. Ohjelmoinnin tekniikkaa 16.1 16. Ohjelmoinnin tekniikkaa 16.1 Sisällys For-lause lyhemmin. Vaihtoehtoisia merkintöjä aritmeettisille lauseille. Useiden muuttujien esittely ja alustaminen yhdellä lauseella. If-else-lause vaihtoehtoisesti

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

Muuttujien roolit Kiintoarvo cin >> r;

Muuttujien roolit Kiintoarvo cin >> r; Muuttujien roolit Muuttujilla on ohjelmissa eräitä tyypillisiä käyttötapoja, joita kutsutaan muuttujien rooleiksi. Esimerkiksi muuttuja, jonka arvoa ei muuteta enää kertaakaan muuttujan alustamisen jälkeen,

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

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

Vertailulauseet. Ehtolausekkeet. Vertailulauseet. Vertailulauseet. if-lauseke. if-lauseke. Javan perusteet 2004

Vertailulauseet. Ehtolausekkeet. Vertailulauseet. Vertailulauseet. if-lauseke. if-lauseke. Javan perusteet 2004 Vertailulauseet Ehtolausekkeet Ehdot, valintalausekkeet Boolean-algebra == yhtäsuuruus!= erisuuruus < pienempi suurempi >= suurempi tai yhtäsuuri Esimerkkejä: int i=7; int j=10;

Lisätiedot

Ehto- ja toistolauseet

Ehto- ja toistolauseet Ehto- ja toistolauseet 1 Ehto- ja toistolauseet Uutena asiana opetellaan ohjelmointilauseet / rakenteet, jotka mahdollistavat: Päätösten tekemisen ohjelman suorituksen aikana (esim. kyllä/ei) Samoja lauseiden

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

Ohjelmointitaito (ict1td002, 12 op) Kevät Java-ohjelmoinnin alkeita. Tietokoneohjelma. Raine Kauppinen

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

Lisätiedot

Java-kielen perusteet

Java-kielen perusteet Java-kielen perusteet Tunnus, varattu sana, kommentti Muuttuja, alkeistietotyyppi, merkkijono, Vakio Tiedon merkkipohjainen tulostaminen Ohjelmointi (ict1tx006) Tunnus (5.3) Javan tunnus Java-kirjain Java-numero

Lisätiedot

TIEP114 Tietokoneen rakenne ja arkkitehtuuri, 3 op. Assembly ja konekieli

TIEP114 Tietokoneen rakenne ja arkkitehtuuri, 3 op. Assembly ja konekieli TIEP114 Tietokoneen rakenne ja arkkitehtuuri, 3 op Assembly ja konekieli Tietokoneen ja ohjelmiston rakenne Loogisilla piireillä ja komponenteilla rakennetaan prosessori ja muistit Prosessorin rakenne

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

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python Ohjelmoinnin perusteet Y Python T-106.1208 1.4.2009 T-106.1208 Ohjelmoinnin perusteet Y 1.4.2009 1 / 56 Tentti Ensimmäinen tenttimahdollisuus on pe 8.5. klo 13:00 17:00 päärakennuksessa. Tämän jälkeen

Lisätiedot

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python Ohjelmoinnin perusteet Y Python T-106.1208 19.1.2011 T-106.1208 Ohjelmoinnin perusteet Y 19.1.2011 1 / 39 Haluatko antaa palautetta luennoista? Ilmoittaudu mukaan lähettämällä ilmainen tekstiviesti Vast

Lisätiedot

Harjoitustyön testaus. Juha Taina

Harjoitustyön testaus. Juha Taina Harjoitustyön testaus Juha Taina 1. Johdanto Ohjelman teko on muutakin kuin koodausta. Oleellinen osa on selvittää, että ohjelma toimii oikein. Tätä sanotaan ohjelman validoinniksi. Eräs keino validoida

Lisätiedot

Ohjelmoinnin peruskurssi Y1

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

Lisätiedot

Harjoitus 4 -- Ratkaisut

Harjoitus 4 -- Ratkaisut Harjoitus -- Ratkaisut 1 Ei kommenttia. Tutkittava funktio: In[15]:= f x : x 1 x Sin x ; Plot f x, x, 0, 3 Π, PlotRange All Out[159]= Luodaan tasavälinen pisteistö välille 0 x 3 Π. Tehdään se ensin kiinnitetyllä

Lisätiedot

TIEP114 Tietokoneen rakenne ja arkkitehtuuri, 3 op. Assembly ja konekieli

TIEP114 Tietokoneen rakenne ja arkkitehtuuri, 3 op. Assembly ja konekieli TIEP114 Tietokoneen rakenne ja arkkitehtuuri, 3 op Assembly ja konekieli Tietokoneen ja ohjelmiston rakenne Loogisilla piireillä ja komponenteilla rakennetaan prosessori ja muistit Prosessorin rakenne

Lisätiedot

Johdatus Ohjelmointiin

Johdatus Ohjelmointiin Johdatus Ohjelmointiin Syksy 2006 Viikko 2 13.9. - 14.9. Tällä viikolla käsiteltävät asiat Peruskäsitteitä Kiintoarvot Tiedon tulostus Yksinkertaiset laskutoimitukset Muuttujat Tiedon syöttäminen Hyvin

Lisätiedot

Ohjelmoinnin peruskurssi Y1

Ohjelmoinnin peruskurssi Y1 Ohjelmoinnin peruskurssi Y1 CS-A1111 14.9.2016 CS-A1111 Ohjelmoinnin peruskurssi Y1 14.9.2016 1 / 19 Oppimistavoitteet: tämän luennon jälkeen osaat kirjoittaa Python-ohjelman, joka pyytää käyttäjältä lukuja,

Lisätiedot

Ohjelmoinnin peruskurssi Y1

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

Lisätiedot

Muuttujat ja kontrolli. Ville Sundberg

Muuttujat ja kontrolli. Ville Sundberg Muuttujat ja kontrolli Ville Sundberg 14.9.2007 Alkeistyyppi Alin abstraktiotaso josta tarvitsee välittää Yksittäinen, jakamaton tiedonjyvä Tavallaan kaikki alkeistyypit ovat lukuja arvojoukko vaihtelee

Lisätiedot

Taitaja2007/Elektroniikka

Taitaja2007/Elektroniikka 1. Jännitelähteiden sarjakytkentä a) suurentaa kytkennästä saatavaa virtaa b) rikkoo jännitelähteet c) pienentää kytkennästä saatavaa virtaa d) ei vaikuta jännitelähteistä saatavan virran suuruuteen 2.

Lisätiedot

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python Ohjelmoinnin perusteet Y Python T-106.1208 16.2.2010 T-106.1208 Ohjelmoinnin perusteet Y 16.2.2010 1 / 41 Kännykkäpalautetteen antajia kaivataan edelleen! Ilmoittaudu mukaan lähettämällä ilmainen tekstiviesti

Lisätiedot

815338A Ohjelmointikielten periaatteet Harjoitus 4 vastaukset

815338A Ohjelmointikielten periaatteet Harjoitus 4 vastaukset 815338A Ohjelmointikielten periaatteet 2015-2016. Harjoitus 4 vastaukset Harjoituksen aiheena ovat imperatiivisten kielten lauseisiin, lausekkeisiin ja aliohjelmiin liittyvät kysymykset. Tehtävä 1. Mitä

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

Pong-peli, vaihe Rajojen tarkistus Yläreunan tarkistus. Muilla kielillä: English Suomi

Pong-peli, vaihe Rajojen tarkistus Yläreunan tarkistus. Muilla kielillä: English Suomi Muilla kielillä: English Suomi Pong-peli, vaihe 6 Tässä vaiheessa parantelemme mailojen liikuttelua ja tutustumme if-lauseeseen. 1. Rajojen tarkistus Edellisessä oppaassa laitoimme mailat liikkumaan, mutta

Lisätiedot

Harjoitus 1 -- Ratkaisut

Harjoitus 1 -- Ratkaisut Kun teet harjoitustyöselostuksia Mathematicalla, voit luoda selkkariin otsikon (ja mahdollisia alaotsikoita...) määräämällä soluille erilaisia tyylejä. Uuden solun tyyli määrätään painamalla ALT ja jokin

Lisätiedot

2 Konekieli, aliohjelmat, keskeytykset

2 Konekieli, aliohjelmat, keskeytykset ITK145 Käyttöjärjestelmät, kesä 2005 Tenttitärppejä Tässä on lueteltu suurin piirtein kaikki vuosina 2003-2005 kurssin tenteissä kysytyt kysymykset, ja mukana on myös muutama uusi. Jokaisessa kysymyksessä

Lisätiedot

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

Ohjelmassa muuttujalla on nimi ja arvo. Kääntäjä ja linkkeri varaavat muistilohkon, jonne muuttujan arvo talletetaan. Osoittimet Ohjelmassa muuttujalla on nimi ja arvo. Kääntäjä ja linkkeri varaavat muistilohkon, jonne muuttujan arvo talletetaan. Muistilohkon koko riippuu muuttujan tyypistä, eli kuinka suuria arvoja muuttujan

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

T Syksy 2004 Logiikka tietotekniikassa: perusteet Laskuharjoitus 12 (opetusmoniste, kappaleet )

T Syksy 2004 Logiikka tietotekniikassa: perusteet Laskuharjoitus 12 (opetusmoniste, kappaleet ) T-79.144 Syksy 2004 Logiikka tietotekniikassa: perusteet Laskuharjoitus 12 (opetusmoniste, kappaleet 9.1 9.5) 30.11. 3.12.2004 1. Osoita lauselogiikan avulla oheisten ehtolausekkeiden ekvivalenssi. (a)!(a

Lisätiedot

Tällä ohjelmoitavalla laitteella saat hälytyksen, mikäli lämpötila nousee liian korkeaksi.

Tällä ohjelmoitavalla laitteella saat hälytyksen, mikäli lämpötila nousee liian korkeaksi. Lämpötilahälytin Tällä ohjelmoitavalla laitteella saat hälytyksen, mikäli lämpötila nousee liian korkeaksi. Laite koostuu Arduinokortista ja koekytkentälevystä. Hälyttimen toiminnat ohjelmoidaan Arduinolle.

Lisätiedot

Matriisit ovat matlabin perustietotyyppejä. Yksinkertaisimmillaan voimme esitellä ja tallentaa 1x1 vektorin seuraavasti: >> a = 9.81 a = 9.

Matriisit ovat matlabin perustietotyyppejä. Yksinkertaisimmillaan voimme esitellä ja tallentaa 1x1 vektorin seuraavasti: >> a = 9.81 a = 9. Python linkit: Python tutoriaali: http://docs.python.org/2/tutorial/ Numpy&Scipy ohjeet: http://docs.scipy.org/doc/ Matlabin alkeet (Pääasiassa Deni Seitzin tekstiä) Matriisit ovat matlabin perustietotyyppejä.

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

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python Ohjelmoinnin perusteet Y Python T-106.1208 31.1.2011 T-106.1208 Ohjelmoinnin perusteet Y 31.1.2011 1 / 41 Luentopalaute kännykällä käynnissä! Ilmoittaudu mukaan lähettämällä ilmainen tekstiviesti Vast

Lisätiedot

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python Ohjelmoinnin perusteet Y Python T-106.1208 4.3.2009 T-106.1208 Ohjelmoinnin perusteet Y 4.3.2009 1 / 35 Tiedostot Tiedostojen käsittelyä tarvitaan esimerkiksi seuraavissa tilanteissa: Ohjelman käsittelemiä

Lisätiedot

Yhtälönratkaisusta. Johanna Rämö, Helsingin yliopisto. 22. syyskuuta 2014

Yhtälönratkaisusta. Johanna Rämö, Helsingin yliopisto. 22. syyskuuta 2014 Yhtälönratkaisusta Johanna Rämö, Helsingin yliopisto 22. syyskuuta 2014 Yhtälönratkaisu on koulusta tuttua, mutta usein sitä tehdään mekaanisesti sen kummempia ajattelematta. Jotta pystytään ratkaisemaan

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

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python Ohjelmoinnin perusteet Y Python T-106.1208 26.1.2009 T-106.1208 Ohjelmoinnin perusteet Y 26.1.2009 1 / 33 Valintakäsky if syote = raw_input("kerro tenttipisteesi.\n") pisteet = int(syote) if pisteet >=

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

5. HelloWorld-ohjelma 5.1

5. HelloWorld-ohjelma 5.1 5. HelloWorld-ohjelma 5.1 Sisällys Lähdekoodi. Lähdekoodin (osittainen) analyysi. Lähdekoodi tekstitiedostoon. Lähdekoodin kääntäminen tavukoodiksi. Tavukoodin suorittaminen. Virheiden korjaaminen 5.2

Lisätiedot

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python Ohjelmoinnin perusteet Y Python T-106.1208 1.2.2010 T-106.1208 Ohjelmoinnin perusteet Y 1.2.2010 1 / 47 Sijoituksen arvokehitys, koodi def main(): print "Ohjelma laskee sijoituksen arvon kehittymisen."

Lisätiedot

LOAD R1, =2 Sijoitetaan rekisteriin R1 arvo 2. LOAD R1, 100

LOAD R1, =2 Sijoitetaan rekisteriin R1 arvo 2. LOAD R1, 100 Tiedonsiirtokäskyt LOAD LOAD-käsky toimii jälkimmäisestä operandista ensimmäiseen. Ensimmäisen operandin pitää olla rekisteri, toinen voi olla rekisteri, vakio tai muistiosoite (myös muuttujat ovat muistiosoitteita).

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

UML -mallinnus Viestiyhteyskaavio EERO NOUSIAINEN

UML -mallinnus Viestiyhteyskaavio EERO NOUSIAINEN UML -mallinnus Viestiyhteyskaavio EERO NOUSIAINEN SISÄLLYS 4. Viestiyhteyskaavio suunnitteluvaiheessa 4.1 Suunnitteluvaiheen viestiyhteyskaavion osat 4.2 Aikajakson viestit ohjelmakoodissa 4.3 Ehdonesittäminenohjelmakoodissa

Lisätiedot

Racket ohjelmointia osa 2. Tiina Partanen Lielahden koulu 2014

Racket ohjelmointia osa 2. Tiina Partanen Lielahden koulu 2014 Racket ohjelmointia osa 2 Tiina Partanen Lielahden koulu 2014 Sisältö 1) Funktiot ja muuttujat (kertaus) 2) Animaatiot & pelit (big-bang) 3) Vertailuoperaattorit sekä boolean arvot 4) Tietorakenteet (struct)

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

Kiertokysely. Sulautetut järjestelmät Luku 2 Sivu 1 (??)

Kiertokysely. Sulautetut järjestelmät Luku 2 Sivu 1 (??) Sulautetut järjestelmät Luku 2 Sivu 1 (??) Kiertokysely Perinteiset ohjelmointikielet kuten C tukevat hyvin sekventiaalista ohjelmointia, jossa herätteisiin reagointi on helppoa toteuttaa pollauksella

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

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

Sisältö. 2. Taulukot. Yleistä. Yleistä Sisältö 2. Taulukot Yleistä. Esittely ja luominen. Alkioiden käsittely. Kaksiulotteinen taulukko. Taulukko operaation parametrina. Taulukko ja HelloWorld-ohjelma. Taulukko paluuarvona. 2.1 2.2 Yleistä

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

Luku 8. Aluekyselyt. 8.1 Summataulukko

Luku 8. Aluekyselyt. 8.1 Summataulukko Luku 8 Aluekyselyt Aluekysely on tiettyä taulukon väliä koskeva kysely. Tyypillisiä aluekyselyitä ovat, mikä on taulukon välin lukujen summa tai pienin luku välillä. Esimerkiksi seuraavassa taulukossa

Lisätiedot

ITKP102 Ohjelmointi 1 (6 op)

ITKP102 Ohjelmointi 1 (6 op) ITKP102 Ohjelmointi 1 (6 op) Tentaattori: Antti-Jussi Lakanen 22. huhtikuuta 2016 Vastaa kaikkiin tehtäviin. Tee jokainen tehtävä erilliselle konseptiarkille! Kirjoittamasi luokat, funktiot ja aliohjelmat

Lisätiedot

Liikennevalot. Arduino toimii laitteen aivoina. Arduinokortti on kuin pieni tietokone, johon voit ohjelmoida toimintoja.

Liikennevalot. Arduino toimii laitteen aivoina. Arduinokortti on kuin pieni tietokone, johon voit ohjelmoida toimintoja. Liikennevalot Laite koostuu Arduinokortista ja koekytkentälevystä. Liikennevalon toiminnat ohjelmoidaan Arduinolle. Ledit ja muut komponentit asetetaan koekytkentälevylle. Arduino toimii laitteen aivoina.

Lisätiedot

Moduli 4: Moniulotteiset taulukot & Bittioperaatiot

Moduli 4: Moniulotteiset taulukot & Bittioperaatiot C! : Moniulotteiset taulukot & Bittioperaatiot 15.3.2016 Agenda Pieni kertausharjoitus Moniulotteiset taulukot Esimerkki taulukoista Tauko (bittitehtävä) Binäärioperaatioista Esimerkki (vilkaistaan IP

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

Algebralliset tietotyypit ym. TIEA341 Funktio ohjelmointi 1 Syksy 2005

Algebralliset tietotyypit ym. TIEA341 Funktio ohjelmointi 1 Syksy 2005 Algebralliset tietotyypit ym. TIEA341 Funktio ohjelmointi 1 Syksy 2005 Tällä luennolla Algebralliset tietotyypit Hahmonsovitus (pattern matching) Primitiivirekursio Esimerkkinä binäärinen hakupuu Muistattehan...

Lisätiedot

// // whiledemov1.c // #include int main(void){ int luku1 = -1; int luku2 = -1;

// // whiledemov1.c // #include <stdio.h> int main(void){ int luku1 = -1; int luku2 = -1; // // whiledemov1.c // #include int main(void){ int luku1 = -1; int luku2 = -1; while( luku1

Lisätiedot

811120P Diskreetit rakenteet

811120P Diskreetit rakenteet 811120P Diskreetit rakenteet 2016-2017 2. Lukujen esittäminen ja aritmetiikka 2.1 Kantajärjestelmät ja lukujen esittäminen Käytettävät lukujoukot: Luonnolliset luvut IN = {0,1,2,3,... } Positiiviset kokonaisluvut

Lisätiedot

Sukelluskeräily. Pelihahmon liikuttaminen. Aarre ja pisteet

Sukelluskeräily. Pelihahmon liikuttaminen. Aarre ja pisteet Sukelluskeräily 1 Tässä pelissä keräilet erilaisia aarteita ja väistelet vihollista. Tämän lisäksi pelaajan pitää käydä välillä pinnalla hengittelemässä. Peliin lisätään myös häiriötekijäksi esim. parvi

Lisätiedot

Hellä ensikosketus. Tomi Kiviniemi

Hellä ensikosketus. Tomi Kiviniemi Hellä ensikosketus Tomi Kiviniemi Asialista Vähän debuggauksen filosofiaa. GDB:n peruskäyttö Netbeansissä. GDB:n peruskäyttö komentoriviympäristössä. Hieman edistyneempää sähellystä komentoriviympäristössä.

Lisätiedot

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

Yleistä. Nyt käsitellään vain taulukko (array), joka on saman tyyppisten muuttujien eli alkioiden (element) kokoelma. 2. Taulukot 2.1 Sisältö Yleistä. Esittely ja luominen. Alkioiden käsittely. Kaksiulotteinen taulukko. Taulukko operaation parametrina. Taulukko ja HelloWorld-ohjelma. Taulukko paluuarvona. 2.2 Yleistä

Lisätiedot

Ohjelmoinnin peruskurssi Y1

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

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

58131 Tietorakenteet ja algoritmit (syksy 2015)

58131 Tietorakenteet ja algoritmit (syksy 2015) 58131 Tietorakenteet ja algoritmit (syksy 2015) Harjoitus 2 (14. 18.9.2015) Huom. Sinun on tehtävä vähintään kaksi tehtävää, jotta voit jatkaa kurssilla. 1. Erään algoritmin suoritus vie 1 ms, kun syötteen

Lisätiedot

Ohjelmoinnin peruskurssi Y1

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

Lisätiedot

Datatähti 2009 -alkukilpailu

Datatähti 2009 -alkukilpailu Datatähti 2009 -alkukilpailu Ohjelmointitehtävä 1/3: Hissimatka HUOM: Tutustuthan huolellisesti tehtävien sääntöihin ja palautusohjeisiin (sivu 7) Joukko ohjelmoijia on talon pohjakerroksessa, ja he haluavat

Lisätiedot

Alkuun HTML5 peliohjelmoinnissa

Alkuun HTML5 peliohjelmoinnissa Paavo Räisänen Alkuun HTML5 peliohjelmoinnissa www.ohjelmoimaan.net Tätä opasta saa vapaasti kopioida ja levittää ei kaupallisissa tarkoituksissa. Sisällysluettelo 1: Alkusanat 2: Alkuun 3: Pelinäkymä

Lisätiedot

Luku 6. Dynaaminen ohjelmointi. 6.1 Funktion muisti

Luku 6. Dynaaminen ohjelmointi. 6.1 Funktion muisti Luku 6 Dynaaminen ohjelmointi Dynaamisessa ohjelmoinnissa on ideana jakaa ongelman ratkaisu pienempiin osaongelmiin, jotka voidaan ratkaista toisistaan riippumattomasti. Jokaisen osaongelman ratkaisu tallennetaan

Lisätiedot

ALGORITMIT 1 DEMOVASTAUKSET KEVÄT 2012

ALGORITMIT 1 DEMOVASTAUKSET KEVÄT 2012 ALGORITMIT 1 DEMOVASTAUKSET KEVÄT 2012 1.1. (a) Jaettava m, jakaja n. Vähennetään luku n luvusta m niin kauan kuin m pysyy ei-negatiivisena. Jos jäljelle jää nolla, jaettava oli tasan jaollinen. int m,

Lisätiedot

4. Lausekielinen ohjelmointi 4.1

4. Lausekielinen ohjelmointi 4.1 4. Lausekielinen ohjelmointi 4.1 Sisällys Konekieli, symbolinen konekieli ja lausekieli. Lausekielestä konekieleksi: - Lähdekoodi, tekstitiedosto ja tekstieditorit. - Kääntäminen ja tulkinta. - Kääntäminen,

Lisätiedot

Harjoitus 2: Ohjelmointi (Matlab)

Harjoitus 2: Ohjelmointi (Matlab) Harjoitus 2: Ohjelmointi (Matlab) MS-C2107 Sovelletun matematiikan tietokonetyöt MS-C2107 Sovelletun matematiikan tietokonetyöt 1 2. Harjoituskerta Aiheet: - Matlabin kontrollirakenteet - Funktiot ja komentojonotiedostot

Lisätiedot

Mathematica Sekalaista asiaa

Mathematica Sekalaista asiaa Mathematica Sekalaista asiaa Asetusoperaattorit Mathematicassa voi käyttää omia muuttujasymboleja melko rajattomasti ja niiden nimeämisessä voi käyttää miltei mitä tahansa merkkejä. Käytännössä nimeämisessä

Lisätiedot

PHP tehtävä 3 Atte Pekarinen TIKT13A 4.12.2014

PHP tehtävä 3 Atte Pekarinen TIKT13A 4.12.2014 PHP-kielen perusteet 3.1 Mitä tarkoittaan heredoc? Milloin sitä kannattaa käyttää? Kirjoita esimerkki sen käyttämisestä. Heredoc on ominaisuus PHP-koodaamisessa, jolla voidaan kirjoittaa pitkiä tekstejä

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

Muuttujatyypit ovat Boolean, Byte, Integer, Long, Double, Currency, Date, Object, String, Variant (oletus)

Muuttujatyypit ovat Boolean, Byte, Integer, Long, Double, Currency, Date, Object, String, Variant (oletus) VISUAL BASIC OHJEITA Kutsuttava ohjelma alkaa kometoparilla Sub... End Sub Sub ohjelmanimi()...koodia... End Sub Muuttujat Muuttujan esittely Muuttujatyypit ovat Boolean, Byte, Integer, Long, Double, Currency,

Lisätiedot

tään painetussa ja käsin kirjoitetussa materiaalissa usein pienillä kreikkalaisilla

tään painetussa ja käsin kirjoitetussa materiaalissa usein pienillä kreikkalaisilla 2.5. YDIN-HASKELL 19 tään painetussa ja käsin kirjoitetussa materiaalissa usein pienillä kreikkalaisilla kirjaimilla. Jos Γ ja ovat tyyppilausekkeita, niin Γ on tyyppilauseke. Nuoli kirjoitetaan koneella

Lisätiedot

Ohjelman virheet ja poikkeusten käsittely

Ohjelman virheet ja poikkeusten käsittely Ohjelman virheet ja poikkeusten käsittely 17 Ohjelman virheet ja poikkeusten käsittely Poikkeukset ovat tapa ilmoittaa virheistä ja odottamattomista tilanteista C++-ohjelmassasi. Poikkeusten käyttö virheiden

Lisätiedot