Valinnat ja päätökset

Koko: px
Aloita esitys sivulta:

Download "Valinnat ja päätökset"

Transkriptio

1 Valinnat ja päätökset 4 Valinnat ja päätökset Päätöksenteko on erittäin tärkeässä asemassa kaikissa ohjelmointikielissä. Jos ohjelman lauseiden suoritusjärjestystä ei voitaisi muuttaa tietojen vertailun perusteella, useimpien ongelmien ratkaiseminen tietokoneohjelmilla olisi mahdotonta. Tässä luvussa käsittelemme, miten C++-ohjelmissa tehdään valintoja ja päätöksiä. Näin voit esimerkiksi tarkistaa ohjelmien syötteiden oikeellisuuden tai kirjoittaa ohjelmia, joiden suoritus riippuu syötetystä tiedosta. Ohjelmasi voivat käsitellä ongelmia, joissa loogiset valinnat ovat välttämättömiä. Luvun aiheita ovat: Miten tietoja vertaillaan Kuinka ohjelman lauseiden suoritusjärjestystä muutetaan vertailun tuloksen perusteella Mitä ovat loogiset operaattorit ja vertailulausekkeet ja kuinka niitä käytetään Miten käsitellään tilanteita, joissa on useita vaihtoehtoja Tiedon vertailu Jotta voimme tehdä päätöksiä, tarvitsemme tavan, jolla voimme vertailla asioita. Kaiken lisäksi olemassa on erityyppisiä vertailuja. Esimerkiksi päätös jos liikennevalo näyttää punaista, pysäytä auto, sisältää yhtäsuuruuden vertailun. Vertaamme liikennevalon näyttämää väriä vertailuväriin, punaiseen, ja jos ne ovat samat, pysäytämme auton. Toisaalta esimerkiksi päätös jos auton nopeus ylittää nopeusrajoituksen, hiljennä vauhtia, sisältää erityyppisen vertailun: vertailemme auton nopeutta voimassa olevaan nopeusrajoitukseen. Molemmat vertailut ovat samanlaisia siinä, että ne molemmat palauttavat toisen kahdesta arvosta: ne ovat joko tosia (true) tai epätosia (false). Vertailut tapahtuvat C++:ssa juuri tällä tavalla. Voimme vertailla arvoja vertailuoperaattoreilla. Käytössä on kuusi perusvertailuoperaattoria: < pienempi kuin <= pienempi tai yhtä suuri kuin > suurempi kuin >= suurempi tai yhtä suuri kuin == yhtäsuuruus!= erisuuruus 111

2 C++ Ohjelmoijan käsikirja! Tässä yhtäsuuruus -vertailuoperaattorissa on kaksi peräkkäistä yhtäsuuruusmerkkiä. Tämä ei ole sama kuin sijoitusoperaattori (=), jossa on vain yksi yhtäsuuruusmerkki. Varsin yleinen virhe on käyttää vain yhtä yhtäsuuruusmerkkiä kahden sijaan, kun vertaillaan yhtäsuuruutta. Kääntäjä ei yleensä anna tästä virheilmoitusta, joten sinun tulee olla erityisen tarkka. Kukin näistä binäärisistä operaattoreista vertailee kahta arvoa ja palauttaa arvon true, jos vertailu on tosi tai arvon false, jos vertailu on epätosi. Arvot true ja false ovat varattuja sanoja C++:ssa. Ne muodostavat myöskin uuden literaalivakion: booleanliteraalin (boolean algebran isän George Boolen mukaan). Sen tyyppi on bool. Jos muunnat arvon true integer-tyyppiseksi, tulos on 1 ja jos muunnat arvon false kokonaisluvuksi, tulos on 0. Voit myös muuntaa numeerisen arvon bool-tyyppiseksi; tällöin nolla on false ja nollasta poikkeava true. Kuten muidenkin perustietotyyppien kohdalla, voit luoda bool-tyyppisen muuttujan booleanarvon tallettamista varten. Esittelet tällaisen aivan samaan tapaan kuin muunkin muuttujan: bool paatos = true; //Esitellään, määritellään ja alustetaan //looginen muuttuja Tämä esittelee ja määrittelee muuttujan paatos boolean-tyyppiseksi ja alustaa siihen alkuarvon true. Vertailuoperaattoreiden käyttö Näemme muutaman yksinkertaisen esimerkin avulla, kuinka vertailuoperaattoreita käytetään. Oletetaan, että käytössämme on kaksi kokonaislukumuuttujaa i ja j, joiden arvot ovat 10 ja -5. Voimme käyttää niitä seuraavanlaisissa vertailulausekkeissa: i > j i!= j j > -8 i <= j + 15 Kaikkien näiden lausekkeiden arvo on true. Huomaa, että viimeisessä lausekkeessa, i <= j + 15, lisäysoperaatio j + 15 suoritetaan ensin, koska + on suoritusjärjestyksessä ennen operaattoria <=. Voit sijoittaa minkä tällaisen lausekkeen tahansa tuloksen bool-tyyppiseen muuttujaan. Esimerkiksi: char ensimmainen = A ; char viimeinen = Z ; Voimme nyt kirjoittaa joitakin esimerkkejä, jotka käyttävät näitä muuttujia. Tarkastellaan seuraavia: ensimmainen < viimeinen E <= ensimmainen ensimmainen!= viimeinen 112

3 Valinnat ja päätökset Ensimmäinen näistä lausekkeista tarkistaa, onko muuttujan ensimmainen arvo, joka on A, pienempi kuin muuttujan viimeinen arvo, joka on Z. Tämä on aina true. Voit tarkastaa tämän ASCII-merkkien kohdalla liitteestä A - isot kirjaimet ovat nousevassa järjestyksessä koodeissa 65-90; 65 kuvaa arvoa A ja 90 arvoa Z. Toisen lausekkeen arvo on false, koska E on suurempi kuin muuttujan ensimmainen arvo. Viimeinen lauseke on true, koska A ei todellakaan ole sama kuin Z. Voimme tulostaa bool-tyyppisiä arvoja aivan samaan tapaan kuin muitakin muuttujia, joten katsotaan esimerkin avulla, miltä ne näyttävät. Kokeile itse - Tietojen vertailu Tämä esimerkki lukee käyttäjältä kaksi char-tyyppistä arvoa, ja tulostaa niiden välisten vertailujen tulokset: // Esimerkki Tietojen vertailu #include <iostream> using namespace std; int main() char ensimmainen = 0; char toinen = 0; // Sisältää ensimmäisen merkin // Sisältää toisen merkin // Luetaan käyttäjältä ensimmäinen merkki cout << "Syötä merkki: "; cin >> ensimmainen; // Luetaan käyttäjältä toinen merkki cout << "Syötä toinen merkki: "; cin >> toinen; cout << "Lausekkeen ensimmainen < toinen arvo on: " << (ensimmainen < toinen) << endl << "Lausekkeen ensimmainen == toinen arvo on: " << (ensimmainen == toinen) return 0; Ohjelman tulostus voisi olla vaikka seuraavaa: Syötä merkki: p Syötä toinen merkki: t Lausekkeen ensimmainen < toinen arvo on: 1 Lausekkeen ensimmainen == toinen arvo on: 0 Kuinka se toimii Syötteen pyytäminen ja lukeminen käyttäjältä on jo tuttua. Tulostamme tuloksen käyttämällä < ja == -operaattoreita lauseessa: 113

4 C++ Ohjelmoijan käsikirja cout << "Lausekkeen ensimmainen < toinen arvo on: " << (ensimmainen < toinen) << endl << "Lausekkeen ensimmainen == toinen arvo on: " << (ensimmainen == toinen) Huomaa, että vertailulausekkeiden ympärillä olevat sulkeet ovat tässä välttämättömät, muutoin kääntäjä ei pysty tulkitsemaan lausetta oikein ja se antaa virheilmoituksen. Lausekkeet vertailevat syötettyjä ensimmäistä ja toista merkkiä. Yllä olevasta tulostuksesta voit nähdä, että arvo true tulostuu lukuna 1 ja arvo false lukuna 0. Jos haluamme tulostaa boolean-arvot sanoina true ja false, voimme käyttää muokkausfunktiota boolalpha. Lisää seuraava lause funktion main() alkuun: cout << boolalpha; Jos käännät ja suoritat esimerkin uudelleen, boolean-arvot tulostuvat sanoilla true ja false. Palataksesi takaisin oletusarvoihin, käytä noboolalpha-muokkausfunktiota. Liukulukuarvojen vertailu Voit luonnollisestikin vertailla myöskin liukulukuja. Tarkastellaan joitakin hieman monimutkaisempia vertailuja. Ensiksi määrittelemme muutaman muuttujan seuraavilla lauseilla: int i = -10; int j = 20; double x = 1.5; double y = -0.25E-10; Katsotaan nyt seuraavia vertailulausekkeita: -1 < y j < (10 - i) 2.0 * x >= (3 + y) Kuten huomaat, voimme käyttää numeerisen arvon palauttavia lausekkeita vertailun operandeina. Koska vertailuoperaattorit ovat kaikki suoritusjärjestyksessä laskuoperaattoreiden jälkeen (katso liite D), yksikään sulkeista ei ole välttämätön, mutta ne tekevät lausekkeesta selkeämmän. Ensimmäisen vertailun tulos on true, koska muuttujan y arvo on hyvin pieni negatiivinen arvo ( ), joka on suurempi kuin -1. Toinen lauseke palauttaa arvon false, koska lausekkeen 10 - i arvo on 20, joka on sama kuin muuttujan j arvo. Kolmas lauseke on true, koska 3 + y on hieman pienempi kuin 3. Voimme käyttää vertailuoperaattoreita kaikkien perustietotyyppien vertailuun, joten nyt tarvitsemme keinon, jolla voimme käyttää vertailun tulosta muuttamaan ohjelman suoritusta. Katsotaanpa tätä heti seuraavaksi. 114

5 Valinnat ja päätökset If-lause Yksiosaisen if-lauseen avulla ohjelmasi voi suorittaa yksittäisen lauseen tai aaltosulkeiden sisällä olevan lohkon, jos vertailun arvo on true. Tätä havainnollistaa viereinen kuva: If(vertailulauseke) Lause; Seuraava lause; Tai If(vertailulauseke) Lause;... Seuraava lause; Ei Vertailu on true Kyllä Lause tai lohko Seuraava lause If-lauseen perässä oleva lause tai lohko suoritetaan vain, jos vertailulausekkeen arvo. on true. Yksinkertainen esimerkki if-lauseesta on char-tyyppisen muuttujan kirjain arvo testaus: if(kirjain == A ) cout << Ensimmäinen aakkosnumeerinen merkki. cout << Tämä lause suoritetaan aina. Jos muuttujan kirjain arvo on A, vertailulausekkeen arvo on true ja lauseet tulostavat: Ensimmäinen aakkosnumeerinen merkki. Tämä lause suoritetaan aina. Jos muuttujan kirjain arvo ei ole A, vain toisen rivin tulostus suoritetaan. Testattava vertailulauseke on sulkeissa heti if-avainsanan perässä. Huomaa puolipisteen sijainti. Se sijoitetaan if-aivainsanaa ja sulkeissa olevaa vertailulauseketta seuraavan lauseen perään. Sulkeissa olevan vertailulausekkeen perässä ei tule olla puolipistettä, koska if ja vertailulauseke liittyvät niitä seuraavaan lauseeseen tai lohkoon. Ne eivät voi olla olemassa sellaisinaan. Huomaa myös, kuinka if-avainsanan perässä oleva lause on sisennetty merkiksi siitä, että se suoritetaan vain, jos vertailulausekkeen arvo on true. Sisennystä ei tarvita ohjelman kääntämistä varten, mutta se helpottaa tunnistamaan if-avainsanan ja siitä riippuvan lauseen. Joskus tällaiset yksinkertaiset if-lauseet kirjoitetaan yhdelle riville: if(kirjain == A ) cout << Ensimmäinen aakkosnumeerinen merkki. Mielestäni if-avainsanaan liittyvä lause tai lohko kannattaa aina kirjoittaa omalle rivilleen; se on selvempi sillä tavalla. 115

6 C++ Ohjelmoijan käsikirja Voimme laajentaa esimerkkiä siten, että se muuttaa muuttujan kirjain arvon, jos se sisältää kirjaimen A : if(kirjain == A ) cout << Ensimmäinen aakkosnumeerinen merkki. kirjain = a ; cout << Tämä lause suoritetaan aina. Lohkossa olevat lauseet suoritetaan vain, jos vertailulausekkeen arvo on true. Ilman aaltosulkeita ainoastaan ensimmäinen lause olisi liitettynä if-lauseeseen, ja muuttujaan kirjain arvon a sijoittava lause suoritettaisiin aina. Huomaa, että lohkon jokaisen lauseen perässä on puolipiste, mutta ei lohkon päättävän aaltosulkeen perässä. Lohkossa voi olla niin monta lausetta kuin haluat, tai jopa sisäkkäisiä lohkoja. Jos muuttuja kirjain sisältää arvon A, se muutetaan arvoksi a sen jälkeen, kun on tulostettu sama viesti kuin aikaisemmassakin esimerkissä. Kumpaakaan lausetta ei suoriteta, jos vertailulausekkeen arvo on false. if-lausetta seuraava lause suoritetaan tietysti aina. Kokeile itse - Päätöksen tekeminen Kokeillaan if-lausetta käytännössä. Voimme tehdä ohjelman, joka tarkistaa, kuuluuko syötetty kokonaisluku haluttuun arvoväliin: // Esimerkki if-lauseen käyttö #include <iostream> using namespace std; int main() cout << "Syötä kokonaisluku väliltä : "; int arvo = 0; cin >> arvo; if(arvo < 50) cout << "Arvo ei ole sallittu - se on pienempi kuin 50." if(arvo > 100) cout << "Arvo ei ole sallittu - se on suurempi kuin 100." cout << "Syötit luvun " << arvo return 0; Tulostus riippuu syötetystä arvosta. Jos arvo on välillä , tulostus näyttää seuraavalta: Syötä kokonaisluku väliltä : 77 Syötit luvun

7 Valinnat ja päätökset Jos arvo on välin ulkopuolella, tulostuu viesti, joka kertoo, että syöte ei ollut halutulla arvovälillä. Jos arvo on alle 50, ohjelma tulostaa: Syötä kokonaisluku väliltä : 27 Arvo ei ole sallittu - se on pienempi kuin 50. Syötit luvun 27 Jos arvo on suurempi kuin 100, ohjelman tulostus on saman tyyppinen: Syötä kokonaisluku väliltä : 270 Arvo ei ole sallittu - se on suurempi kuin 100. Syötit luvun 270 Kuinka se toimii Arvon lukemisen jälkeen ensimmäinen if-lause tarkistaa, onko syötetty arvo alle alarajan 50: if(arvo < 50) cout << "Arvo ei ole sallittu - se on pienempi kuin 50." Tulostuslause suoritetaan vain, jos vertailulausekkeen arvo on true, eli silloin, kun muuttujan arvo arvo on pienempi kuin 50. Seuraava if-lause tarkistaa ylärajan: if(arvo > 100) cout << "Arvo ei ole sallittu - se on suurempi kuin 100." Tulostuslause suoritetaan, jos muuttujan arvo arvo on suurempi kuin 100. Viimeinen tulostuslause suoritetaan aina: cout << "Syötit luvun " << arvo Sisäkkäiset if-lauseet Lause, joka suoritetaan, kun if-lauseen vertailulauseke on true, voi olla myös if-lause. Tällaista lausetta kutsutaan sisäkkäiseksi if-lauseeksi. Sisemmän if-lauseen vertailulauseke testataan vain, jos ulomman if-lauseen vertailulausekkeen arvo on true. Sisempi if-lause voi edelleen sisältää if-lauseen. Voit sijoittaa if-lauseita toisen if-lauseen sisälle niin monta kuin haluat. Kokeile itse - Sisäkkäiset if-lauseet Voimme havainnollistaa sisäkkäisiä if-lauseita esimerkillä, joka testaa, onko näppäimistöltä syötetty merkki kirjain. Vaikka tämä esimerkki on aivan järkevä sisäkkäisten if-lauseiden käyttötilanne, siinä on joitakin oletuksia, joita tulee välttää; huomaatko ongelman? Seuraavassa on esimerkin koodi: // Esimerkki Sisäkkäiset if-lauseet #include <iostream> using namespace std; int main() char kirjain = 0; // Syötteen muuttuja 117

8 C++ Ohjelmoijan käsikirja cout << endl << "Syötä kirjain: "; // Pyydetään syöte cin >> kirjain; // sitten luetaan merkki cout if(kirjain >= 'A') if(kirjain <= 'Z') cout << "Syötit ison kirjaimen." return 0; if(kirjain >= 'a') if(kirjain <= 'z') cout << "Syötit pienen kirjaimen." << endl ; return 0; // Testataan onko 'A' tai suurempi // Testataan onko Z tai pienempi // Testataan onko 'a' tai suurempi // Testataan onko z tai pienempi cout << "Et syöttänyt kirjainta." return 0; Ohjelman tyypillinen tulostus on: Syötä kirjain: H Syötit ison kirjaimen. 118 Kuinka se toimii Ohjelman alussa on tavalliset kommenttirivit ja #include-esikäsittelijäkomento, joka sisällyttää tulostusta/syöttöä tukevan otsikkotiedoston iostream. Varattuaan muistia char-tyyppiselle muuttujalle kirjain ja alustettuaan sen alkuarvoksi nollan, funktio main() pyytää syöttämään kirjaimen. Syöttöä seuraava if-lause tarkistaa, oliko syötetty merkki A tai suurempi: if(kirjain >= 'A') // Testataan onko 'A' tai suurempi if(kirjain <= 'Z') // Testataan onko Z tai pienempi cout << "Syötit ison kirjaimen." return 0; Jos kirjain on suurempi tai yhtä suuri kuin A, suoritetaan sisempi if-lause, joka testaa, onko syöte Z tai pienempi. Jos se on Z tai pienempi, päättelemme, että kyseessä on iso kirjain ja tulostamme viestin. Olemme nyt suorittaneet tarvittavat toimenpiteet, joten suoritamme returnlauseen, joka lopettaa ohjelman suorituksen. Molemmat lauseet ovat aaltosulkeiden sisällä, joten ne molemmat suoritetaan, kun sisemmän if-lauseen vertailulauseke on true.

9 Valinnat ja päätökset Nämä kaksi sisäkkäistä if-lausetta on muodostettu perustuen kahteen oletukseen kirjainten koodeista. Ensimmäinen oletus on se, että kirjaimet A-Z esitetään koodeilla, joissa A :n koodi on minimi ja Z :n maksimi. Toinen oletus on, että isojen kirjainten koodit ovat peräkkäiset, eli muita kuin kirjainmerkkejä ei ole koodien A ja Z välissä. Ei ole järkevää rakentaa tällaisia oletuksia ohjelmiisi. Esimerkiksi EBCDIC-koodauksessa kirjainmerkkien koodit eivät ole peräkkäiset. Hetken päästä näemme, miten voimme välttää tämän rajoituksen. Seuraava if käyttää aivan samanlaista tapaa kuin ensimmäinenkin if-lause ja tarkastaa, onko syötetty merkki pieni kirjain, tulostaa viestin ja suorittaa return-lauseen. Jos tarkastelit ohjelmaa tarkasti, huomasit, että pienen kirjaimen testaavissa if-lauseissa on vain yhdet aaltosulkeet, kun taas ison merkin testaavassa oli kahdet. Molemmat ovat oikein: kuten muistat, C++:ssa if(vertailulauseke)... on itse asiassa yksi lause, joten sitä ei tarvitse sijoittaa aaltosulkeiden sisään. Voit kuitenkin käyttää toisiakin aaltosulkeita, jos se mielestäsi tekee koodista selkeämmän. Viimeisen if-lohkon perässä oleva tulostuslause suoritetaan vain, jos syötetty merkki ei ollut kirjain. Tämän jälkeen suoritetaan return-lause. Kuten huomaat, sisäkkäisten if-lauseiden suhteet ovat varsin selkeät, koska ne on sisennetty. C++:ssa käytetään yleensä sisennystä selventämään ohjelman logiikkaa. Kuten esimerkin alussa mainitsimme, ohjelma havainnollistaa vain, kuinka sisäkkäiset if-lauseet toimivat, mutta se ei ole hyvä tapa testata merkkejä. Standardikirjaston avulla voimme kirjoittaa ohjelman, joka toimii riippumatta merkkien koodauksesta. Katsotaan seuraavaksi, miten teemme tämän. Merkkien koodauksesta riippumaton merkkien käsittely Standardikirjasto sisältää suuren joukon funktioita, joita voit helposti käyttää ohjelmissasi testaamaan erilaisia asioita. Tarkastelemme omien funktioiden kirjoittamista vasta luvussa 8, mutta se ei estä käyttämästä olemassa olevia funktioita. Ennen kuin jatkamme, käsittelemme pikaisesti ideaa siitä, mitä tapahtuu funktioita käytettäessä. Funktio on nimetty, itsenäinen lohko koodia, joka suorittaa tietyn tehtävän. Usein se tarkoittaa sille välitettyjen tietojen käsittelyä ja käsittelyn tuloksen takaisin palauttamista ohjelmalle. Tällaisissa tapauksissa funktio toimii kuten edellisessä luvussa ollut sizeof()-operaattori: välitimme sille tietoa (muuttujan) ja se palautti tuloksen (tämän muuttujan koon). Funktion kutsu näyttää seuraavalta: FunktionNimi(parametri1, parametri2,... ) Riippuen kyseessä olevasta funktiosta, sille voidaan kutsuttaessa välittää ei yhtään, yksi tai useampia arvoja sijoittamalla ne sulkeisiin funktion nimen perään. Tällä tavalla funktiolle välitettyjä arvoja kutsutaan parametreiksi. Kuten kaikilla arvoilla C++:ssa, myös funktiolle välitettävillä parametreillä ja funktion palauttamalla arvolla on tyyppi, joka sinun tulee ottaa huomioon käyttäessäsi funktiota. Sisällyttämällä ohjelmaasi otsikkotiedoston cctype, saat käyttöösi erittäin käyttökelpoisen joukon funktioita, joilla voit testata merkkejä. Jokaisessa niistä välität funktiolle int-tyyppisen muuttujan tai literaalin. Jos välität char-tyyppisen, se muunnetaan automaattisesti int-tyyppiseksi. 119

10 C++ Ohjelmoijan käsikirja Funktio isupper() islower() isalpha() Toiminta Testaa, onko iso kirjain 'A' - 'Z'. Testaa, onko pieni kirjain 'a' - 'z'. Testaa, onko pieni tai iso kirjain. isdigit() Testaa, onko numero 0-9. isxdigit() isalnum() isspace() iscntrl() isprint() isgraph() ispunct() Testaa, onko heksadesimaalinen numero 0-9, 'a' - 'f' tai 'A' - 'F'. Testaa, onko kirjain tai numero (ts. aakkosnumeerinen merkki). Testaa, onko tyhjä merkki, joka voi olla välilyönti, uusi rivi, rivinvaihto, sivun vaihto, sarake- tai rivisarkain. Testaa, onko kontrollimerkki. Testaa, onko tulostettava merkki, eli iso tai pieni kirjain, numero, pistetyyppinen merkki (piste, pilkku jne) tai välilyönti. Testaa, onko graafinen merkki, eli mikä tahansa tulostettava merkki, mutta ei välilyönti. Testaa, onko pistetyyppinen merkki, eli mikä tahansa tulostettava merkki, mutta ei kirjain tai numero. Tällaisia ovat välilyönti ja seuraavat: _ [ ] # ( ) < > % : ;.? * + - / ^ & ~! =, \ " ' Jokainen näistä funktiosta palauttaa int-tyyppiset arvon. Paluuarvo on positiivinen (true), jos merkki oli testattavaa tyyppiä ja 0 (false), jos ei ollut. Saatat ihmetellä, miksi nämä funktiot eivät palauta bool-tyyppistä arvoa. Syynä on se, että nämä funktiot olivat osa standardikirjastoa jo ennen kuin bool-tyyppi lisättiin C++-kieleen. Otsikkotiedosto cctype sisältää myös kaksi funktiota merkkien muuntamiseen isoiksi ja pieniksi. Muunnettava merkki tulee välittää funktioille int-tyyppisenä: tolower() Jos välität ison kirjaimen, vastaava pieni kirjain palautetaan, muuten välittämäsi merkki palautetaan muuttamattomana. toupper() Jos välität pienen kirjaimen, vastaava iso kirjain palautetaan, muuten välittämäsi merkki palautetaan muuttamattomana. Kumpikin näistä funktioista palauttaa int-tyyppisen paluuarvon. Voimme toteuttaa näillä funktioilla edellisen esimerkkimme ilman olettamuksia merkkien koodauksesta. Eri ympäristöjen eri merkkikoodit otetaan aina huomioon standardikirjaston funktioissa, joten meidän ei tarvitse huolehtia niistä. Emme myöskään tarvitse sisäkkäisiä iflauseita, jos käytämme näitä standardikirjaston funktioita, eli koodi on selkeämpää. Kokeile itse - Standardikirjaston merkkimuunnokset 120 Kun kerran muutamme edellistä esimerkkiämme standardikirjaston funktioilla, voimme yhtä hyvin myös laajentaa ohjelmaa ja kokeilla muunnosfunktioita:

11 Valinnat ja päätökset // Esimerkki Standardikirj. merkkien testaus- ja muunnosfunktiot #include <iostream> #include <cctype> // Merkkien testaus ja muunnos using namespace std; int main() char kirjain = 0; // Syötteen muuttuja cout << endl << "Syötä kirjain: "; // Pyydetään syöte cin >> kirjain; // Sitten luetaan merkki cout if(isupper(kirjain)) // Testataan, onko iso kirjain cout << "Syötit ison kirjaimen." cout << "Muuntamalla pieneksi merkiksi saamme " << static_cast<char>(tolower(kirjain)) return 0; if(islower(kirjain)) // Testataan, onko pieni kirjain cout << "Syötit pienen kirjaimen." cout << "Muuntamalla isoksi merkiksi saamme " << static_cast<char>(toupper(kirjain)) return 0; cout << "Et syöttänyt kirjainta." return 0; Ohjelman tyypillinen tulostus on: Syötä kirjain: t Syötit pienen kirjaimen. Muuntamalla isoksi merkiksi saamme T Kuinka se toimii if-lauseet on muutettu käyttämään standardikirjaston funktioita. Emme enää tarvitse sisäkkäisiä if-lauseita, koska aikaisemmin testaamamme kaksi ehtoa on nyt korvattu yhdellä, joko funktiolla isupper() tai islower(). Meitä ei itse asiassa kiinnosta, miten nämä funktiot toimivat. Niitä käyttääksemme meidän tulee vain tietää, mitä ne tekevät, kuinka monta ja minkä tyyppisiä parametrejä niille tulee välittää ja minkä tyyppisen paluuarvon ne palauttavat. Kun meillä on tämä tieto, voimme yksinkertaistaa koodiamme ja tehdä siitä yleiskäyttöisempää. Tämä esimerkkiohjelma toimii riippumatta chartyypin käyttämästä merkkikoodauksesta. 121

12 C++ Ohjelmoijan käsikirja Huomaa, kuinka käytämme muunnosfunktion palauttamaa arvoa tulostuslauseessa - esimerkiksi: cout << "Muuntamalla isoksi merkiksi saamme " << static_cast<char>(toupper(kirjain)) Funktion toupper() palauttama arvo on int-tyyppinen, joten muunnamme sen eksplisiittisesti char-tyyppiseksi ja lähetämme tulostusvirtaan cout. Jos haluaisimme tallettaa palautetun merkin ja poistaa eksplisiittisen tyypinmuunnoksen, voisimme tallettaa sen takaisin alkuperäiseen muuttujaan kirjain: kirjain = toupper(kirjain); Nyt voisimme tulostaa muunnetun merkin käyttämällä tulostuslauseessa muuttujaa kirjain: cout << "Muuntamalla isoksi merkiksi saamme << kirjain Jos tarvitset wchar_t-tyyppisiä merkkejä, voit käyttää otsikkotiedostoa cwctype. Se sisältää versiot tämän tyyppisille merkeille kaikille samoille funktioille kuin on otsikkotiedostossa cctype. Kunkin funktion nimessä on w is -merkkien perässä: iswupper() iswdigit() iswspace() iswgraph() iswlower() iswxdigit() iswcntrl() iswpunct() iswalpha() iswalnum() iswprint() Näille kullekin tulee välittää wchar_t-tyyppinen merkki ja ne kaikki palauttavat int-tyyppisen arvon aivan samaan tapaan, kuin kaikki tyyppiä char käsittelevät funktiotkin. Vastaavasti wchar_t-tyyppiset muunnosfunktiot ovat towlower() ja towupper(). if- -lause Tähän saakka käyttämämme if-lause suorittaa lauseen, jos vertailulausekkeen arvo on true. Tämän jälkeen ohjelman suoritus jatkuu normaalisti. Saattaisi kuitenkin olla, että haluamme suorittaa tietyn lauseen tai lohkon, jos vertailulausekkeen arvo on false. Jotta voimme tehdä tämän, tarvitsemme lisäyksen if-lauseeseen: tietty toiminta suoritetaan, jos vertailulauseke on true ja toinen toiminta suoritetaan, jos vertailulauseke on false. Tämän jälkeen ohjelman suoritus jatkuu normaalisti. Käyttämällä char-tyyppisiä muuttujia, voimme kirjoittaa if- -lauseen, joka ilmoittaa, oliko merkki aakkosnumeerinen: if(isalnum(kirjain)) cout << Se on kirjain tai numero. cout << Se ei ole kirjain eikä numero. 122 Tässä käytetään otsikkotiedoston cctype funktiota isalnum(). Jos muuttuja kirjain sisältää kirjaimen tai numeron, funktio isalnum() palauttaa positiivisen kokonaisluvun. if-lause tulkitsee

13 Valinnat ja päätökset tämän arvoksi true, joten ensimmäinen viesti tulostetaan. Jos kirjain sisältää jotain muuta kuin kirjaimen tai numeron, isalnum() palauttaa arvon 0. Tämän if-lause tulkitsee arvoksi false ja -osan tulostuslause suoritetaan. Kokeile itse - if- Seuraavassa esimerkissä käytämme if- -lausetta. Käytetään tällä kertaa numeerisia arvoja: // Esimerkki if- #include <iostream> using namespace std; int main() long numero = 0; // Syötteen muuttuja cout << "Syötä kokonaisluku (pienempi kuin 2 miljardia: "; cin >> numero; cout if(numero % 2L == 0) // Testataan jakojäännös cout << "Numerosi on parillinen." // Jakojäännös on 0 cout << "Numerosi on pariton." // Jakojäännös on 1 return 0; Ohjelman tyypillinen tulostus näyttää seuraavalta: Syötä kokonaisluku (pienempi kuin 2 miljardia: Numerosi on parillinen. Kuinka se toimii Kun syöte on luettu muuttujaan numero, arvo testataan if-lauseessa ottamalla jakojäännös, kun numero jaetaan ensin kahdella (käyttämällä jakojäännös-operaattoria, jonka tapasimme luvussa 2) ja tarkistamalla onko se 0. Jaettaessa luvulla 2, jakojäännös voi olla vain 1 tai 0 kuten koodissa on kommentoitu. Jos jakojäännös on nolla, if-lauseen vertailulauseke on true ja ensimmäinen tulostuslause suoritetaan. Jos jakojäännös on 1, vertailulauseke on false ja -osan tulostuslause suoritetaan. Kummassakin tapauksessa return-lause päättää ohjelman suorituksen.! Huomaa, että -avainsana kirjoitetaan ilman puolipistettä, aivan kuten lauseen if-osakin. Sisennystä käytetään selventämään lauseiden välisiä suhteita. Näet selvästi, mitkä lauseet suoritetaan, jos vertailulauseke on true ja mitkä, jos se on false. Sinun tulisi aina sisentää ohjelmasi lauseet selventääksesi ohjelman rakennetta. 123

14 C++ Ohjelmoijan käsikirja Seuraavassa on toinen vaihtoehto vertailulausekkeen koodaamiselle. Palauta mieleen, että nollasta poikkeava arvo vastaa arvoa true, jos se muunnetaan bool-tyyppiseksi ja 0 vastaa arvoa false. Voimme näin käyttää jakojäännös-operaattoria suoraan vertailulausekkeena ilman, että sitä vertaillaan erikseen nollaan. if- -lause näyttäisi tällaiselta: if(numero % 2L) // Testataan jakojäännös cout << "Numerosi on pariton." // Jakojäännös on 1 cout << "Numerosi on parillinen." // Jakojäännös on 0 return 0; If- ja -osat tulee tässä vaihtaa keskenään, koska jos muuttujan numero arvo on parillinen, lauseke (numero % 2L == 0) palauttaa arvon true, mutta lauseke (numero % 2L) muunnetaan arvoksi false. Tämä saattaa aluksi tuntua hieman hämmentävältä, mutta muista, että ensimmäinen versio vastaa seuraavaa: Onko totta, että jakojäännös on 0? Kun taas toinen versio vastaa seuraavaa, koska arvo 1 muunnetaan arvoksi true: Onko jakojäännös 1? if- -lause mahdollistaa valinnan kahden eri vaihtoehdon väliltä. Lauseen rakenne havainnollistetaan seuraavassa kaaviossa: Ei Vertailulauseke on true? if( vertailulauseke ) // Lauseet, kun vertailulauseke on true // Lauseet, kun vertailulauseke on false // Seuraava lause Lause tai lohko falsetilanteessa Kyllä Lause tai lohko truetilanteessa Seuraava lause Toinen If- -lauseen lauseista suoritetaan aina. Vuokaavio kertoo lauseiden suoritusjärjestyksen, kun vertailulausekkeen arvo on true tai false. Kuten kaavio kertoo, ja kuten olemme jo aikaisemminkin nähneet, lauseen tilalle voidaan aina sijoittaa lohko. 124

15 Sisäkkäiset if- -lauseet Valinnat ja päätökset Olemme jo nähneet, että voit sijoittaa if-lauseita toisen if-lauseen sisälle. Ja koska sinulla ei ole mitään ennakkoluuloja, voit myös sijoittaa if- -lauseita if-lauseiden sisään, if-lauseita if -lauseiden sisään ja myöskin if- -lauseita toisten if- -lauseiden sisään. Tämä antaa meille runsaasti mahdollisuuksia (sekä myöskin vaaran sekaannuksille), joten katsotaan muutamia esimerkkejä. Tarkastellaan ensiksi esimerkkiä, jossa if-lauseen sisällä on if- -lause: if(kahvia == 'k') if(donitseja == 'k') cout << "Meillä on kahvia ja donitseja." cout << "Meillä on kahvia, mutta ei donitseja." Tässä kahvia ja donitseja ovat char-tyyppisiä muuttujia, joiden arvona voi olla k tai e. Donitsien testi suoritetaan vain, jos kahvien testauksen tulos on true, joten tulostettava viesti on oikea kummassakin tilanteessa. -osa kuuluu donitseja testaavaan if-lauseeseen. Tämä saattaa kuitenkin aiheuttaa sekaannusta. Jos kirjoitamme lähes samaan tapaan kuin edellä, mutta sisennämme väärin, voimme saada väärän kuvan lauseen toiminnasta: if(kahvia == 'k') if(donitseja == 'k') cout << "Meillä on kahvia ja donitseja." //Tämä -osa on sisennetty väärin cout << "Meillä ei ole kahvia..." //Väärin! Tässä virheellinen sisennys saa meidät ajattelemaan, että kyseessä on if-lause if- -lauseen sisällä. Näinhän ei tässä ole. Ensimmäinen viesti on oikein, mutta toinen on väärin. Tämä lause voidaan suorittaa vain, jos kahvin testaus on true, koska -osa kuuluu donitsien testaukseen, ei kahvin testaukseen. Tässä virhe on helppo nähdä, mutta monimutkaisempien ja laajempien ifrakenteiden kohdalla tulee muistaa sääntö siitä, mikä if omistaa minkäkin :n. kuuluu aina lähimmälle edellä olleelle if:lle, joka ei vielä omista -osaa. Tässä piilevä sekaannusvaara tunnetaan nimellä riippuvan :n ongelma. Aina kun joukko if- -lauseita näyttää ohjelmassasi hieman monimutkaiselta, voit käyttää tätä sääntöä tilanteen selvittämiseksi. Kun kirjoitat omia ohjelmiasi, voit aina käyttää aaltosulkeita selvennykseksi. Voimme kirjoittaa edellisen esimerkin uudelleen tällä tavalla (vaikka se ei näin yksinkertaisessa esimerkissä olekaan tarpeellista): if(kahvia == 'k') if(donitseja == 'k') cout << "Meillä on kahvia ja donitseja." 125

16 C++ Ohjelmoijan käsikirja cout << "Meillä on kahvia, mutta ei donitseja." Nyt tilanteen pitäisi olla varsin selvä. kuuluu ehdottomasti donitseja testaavaan iflauseeseen. Sisäkkäiset if-lauseet Nyt kun tiedämme säännöt, if- -lauseeseen sijoitetun if-lauseen ymmärtäminen on helpompaa: if(kahvia == 'k') if(donitseja == 'k') cout << "Meillä on kahvia ja donitseja." if(tee == k ) cout << "Meillä ei ole kahvia, mutta teetä on." 126 Huomaa koodin muotoilu tässä esimerkissä. Kun if-lause sijoitetaan -osaan, voimme kirjoittaa if yhdelle riville. Tätä tapaa käytetään tässä kirjassa. Tässä aaltosulkeet ovat välttämättömät. Jos jätämme ne pois, kuuluu donitseja testaavaan if-lauseeseen. Tämäntapaisessa tilanteessa on helppo unohtaa kirjoittaa ne ja saada aikaan virhetilanne, joka on vaikea löytää. Ohjelma, jossa tällainen virhe on, kääntyy normaalisti, koska koodi on aivan oikein. Ohjelma saattaa jopa toimia oikein tietyissä tilanteissa, mutta ei aina. Jos poistamme aaltosulkeet tästä esimerkistä, saamme oikeat tulokset niin kauan kuin molemmat sekä kahvia että donitseja ovat k. Eli tällöin if(tee == k ) -lausetta ei suoritettaisi koskaan. Lopuksi katsomme vielä if- -lauseeseen sijoitettua if- -lausetta. Tällainen saattaa muodostua varsin sekavaksi, vaikka kyseessä olisikin vain yksi sisäkkäinen if- -lause: if(kahvia == 'k') if(donitseja == 'k') cout << "Meillä on kahvia ja donitseja." cout << "Meillä on kahvia, mutta ei donitseja." if(tee == k ) cout << "Meillä ei ole kahvia, mutta teetä on ja ehkä donitseja..." cout << "Ei kahvia eikä teetä, mutta ehkä donitseja..."

17 Valinnat ja päätökset Tämän esimerkin logiikka ei ole aivan itsestään selvä, vaikka se onkin sisennetty oikein. Aaltosulkeet eivät ole välttämättömät, koska aikaisemmin mainittu sääntö on voimassa, mutta esimerkki näyttää selvemmältä, jos lisäämme ne: if(kahvia == 'k') if(donitseja == 'k') cout << "Meillä on kahvia ja donitseja." cout << "Meillä on kahvia, mutta ei donitseja." if(tee == k ) cout << "Ei ole kahvia, mutta teetä on ja ehkä donitseja..." cout << "Ei kahvia eikä teetä, mutta ehkä donitseja..." Tällaisen logiikan toteuttamiseen on paljon parempiakin tapoja. Jos sijoitat riittävän monta iflausetta sisäkkäin, teet lähes sataprosenttisen varmasti virheen jossakin kohtaa. Seuraavassa osassa on apuja tällaiseen tilanteeseen. Loogiset operaattorit Kuten olemme juuri huomanneet, kahden tai useamman if-lauseen sijoittaminen sisäkkäin on varsin kömpelöä. Käsittelimme edellä vain kahvin ja donitsien olemassaoloa, mutta käytännössä sinun tulee testata huomattavasti monimutkaisempiakin tilanteita. Voit esimerkiksi etsiä henkilöstötiedostosta henkilöä, joka on yli 21 vuotias, mutta alle 35, nainen, jolla on yliopistotutkinto ja joka on naimisissa ja puhuu hindiä ja urdua. Tällaisen testin toteuttaminen vaatisi jo kaikki maailman if-lauseet. C++:n loogiset operaattorit antavat siistin ja yksinkertaisen ratkaisun. Loogisten operaattoreiden avulla voimme yhdistää useita vertailuja yhteen lausekkeeseen, joten voimme käyttää vain yhtä if-lausetta lähes kuinka monimutkaisen tilanteen testaamiseksi. Niitä on vain kolme erilaista: && looginen AND (JA) looginen OR (TAI)! looginen NOT (EI) Kaksi ensimmäistä, && ja, ovat binäärisiä operaattoreita, joiden operandit ovat bool-tyyppisiä ja palauttavat bool-tyyppisen tuloksen. Kolmas operaattori,!, on unaarinen, joten sen ainut operandi on bool-tyyppinen ja palauttaa bool-tyyppisen tuloksen. Käsittelemme ensin miten kutakin näistä käytetään yleisellä tasolla. Tämän jälkeen katsomme esimerkkiä. On tärkeää, että erotat mielessäsi aikaisemmin näkemämme bittioperaattorit, jotka toimivat kokonaislukutyyppisten operandiensa biteillä, ja nämä loogiset operaattorit, joiden operandien tyyppinä on bool. 127

18 C++ Ohjelmoijan käsikirja Looginen AND AND-operaattoria && käytetään, kun on kaksi ehtoa, joiden tulee olla true, jotta tulos on true. Haluat olla esimerkiksi rikas ja terve. Kun käytimme aikaisemmin sisäkkäisiä if-lauseita tarkistamaan, oliko merkki iso merkki, testattavan arvon tuli olla sekä suurempi tai yhtä suuri kuin A ja pienempi tai yhtä suuri kuin Z. Molempien ehtojen tulee olla true, jos kyseessä on iso kirjain. Muutoin tulos on false. Voimme näyttää tämän pienessä taulukossa, jossa ylärivillä ja vasemmassa reunassa ovat operandit: Operandit true false true true false false false false Esimerkissämme, jossa oli char-tyyppinen muuttuja kirjain, voimme korvata kahden iflauseen käytön yhdellä if-lauseella, jossa käytetään &&-operaattoria. if(kirjain >= A && kirjain <= Z ) cout << Iso kirjain. Tulostuslause suoritetaan vain, jos molemmat &&-operaattorilla yhdistetyt ehdot ovat true. Lausekkeessa ei tarvita sulkeita, koska vertailuoperaattorit ovat suoritusjärjestyksessä ennen &&- operaattoria. Voit kuitenkin lisätä sulkeet, jos haluat. Voit siis kirjoittaa lauseen seuraavasti: if((kirjain >= A ) && (kirjain <= Z )) cout << Iso kirjain. Nyt ei ole epäilystäkään, etteikö sulkeiden sisällä olevia vertailulausekkeita suoritettaisi ensin. Looginen OR OR-operaattoria käytetään, kun on kaksi ehtoa ja tuloksen halutaan olevan true, kun toinen tai molemmat niistä ovat true. -operaattorin tulos on false vain silloin, kun molemmat sen operandit ovat false. Kaikki muut kombinaatiot muodostavat tuloksen true. Tämä näkyy seuraavasta taulukosta: Operandit true false true true true false true false 128 Esimerkiksi sinut voidaan luokitella luottokelpoiseksi hakiessasi lainaa pankista, jos tulosi ovat vähintään mk tai sinulla on käteistä mk. Tämä voidaan testata seuraavalla if-lauseella:

19 Valinnat ja päätökset if(tulot >= kateinen >= ) cout << "Totta kai, kuinka paljon tarvitset?" Viesti tulostetaan, kun toinen tai molemmat ehdot ovat true. (Parempi vastaus saattaisi olla Miksi haluat lainata rahaa? On outoa, että pankit lainaavat rahaa vain silloin, kun et sitä tarvitse.) Looginen NOT Kolmannella operaattorilla,!, on yksi true tai false -arvoinen operandi, jonka arvon se kääntää. Eli jos boolean-tyyppisen muuttujan testi arvo on true,!testi on false; jos testi on false,!testi on true. Esimerkiksi, jos muuttujan x arvo on 10, niin lausekkeen!(x > 5) arvo on false, koska x > 5 on true. Voimme käyttää!-operaattoria myöskin lausekkeessa, joka oli Charles Dickensin suosikki:!(tulot > menot) Jos tämä lauseke on true, tuloksena on kurjuus - ainakin sitten, kun pankki peruu luottokorttisi. Kaikkia loogisia operaattoreita voidaan käyttää lausekkeissa, joiden arvo on true tai false. Operandit voivat olla yksittäisestä bool-tyyppisestä muuttujasta monimutkaiseen vertailujen ja loogisten operaattoreiden yhdistelmään. Kokeile itse - Loogisten operaattoreiden yhdistäminen Voit yhdistää ehtolausekkeita ja loogisia operaattoreita aivan kuten haluat. Voimme esimerkiksi tehdä ohjelman, joka päättää, oletko lainakelpoinen: // Esimerkki Loogisten operaattoreiden yhdistäminen #include <iostream> using namespace std; int main() int ika = 0; long tulot = 0; long saldo = 0; // Lainanhakijan ikä // Lainanhakijan tulot // Nykyinen pankkitilin saldo // Luetaan perustiedot cout << endl << "Syötä ikäsi vuosissa: "; cin >> ika; cout << "Syötä vuositulosi markoissa: "; cin >> tulot; 129

20 C++ Ohjelmoijan käsikirja cout << "Mikä on nykyinen pankkitilisi saldo markoissa: "; cin >> saldo; cout // Lainaamme vain yli 21 vuotiaille henkilöille, joiden // vuositulot ovat yli mk tai joilla on pankkitilillä // yli mk, tai molemmat. if(ika >= 21 && (tulot > saldo > )) // OK, saat lainaa - mutta kuinka paljon? // Pienempi kahdesta: 2 * tulot tai puolet tilin saldosta long laina = 0; if(2 * tulot < saldo / 2) laina = 2 * tulot; laina = saldo / 2; // Lainan maksimimäärä cout << "Voit lainata maksimissaan " << laina cout << "Valitamme, et ole lainakelpoinen." return 0; Esimerkin tulostus voi olla seuraavanlainen: Syötä ikäsi vuosissa: 25 Syötä vuositulosi markoissa: Mikä on nykyinen pankkitilisi saldo markoissa: Voit lainata maksimissaan Kuinka se toimii Määrittelemme ensin kolme muuttujaa, joihin talletamme ohjelman tarvitsemat syötteet: int ika = 0; // Lainanhakijan ikä long tulot = 0; // Lainanhakijan tulot long saldo = 0; // Nykyinen pankkitilin saldo Tämän jälkeen luemme arvot, joiden avulla määrittelemme lainakelpoisuuden: cout << endl << "Syötä ikäsi vuosissa: "; cin >> ika; cout << "Syötä vuositulosi markoissa: "; cin >> tulot; 130 cout << "Mikä on nykyinen pankkitilisi saldo markoissa: "; cin >> saldo;

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

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

Java-kielen perusteita

Java-kielen perusteita Java-kielen perusteita valintalauseet 1 Johdantoa kontrollirakenteisiin Tähän saakka ohjelmissa on ollut vain peräkkäisyyttä eli lauseet on suoritettu peräkkäin yksi kerrallaan Tarvitsemme myös valintaa

Lisätiedot

Java-kielen perusteet

Java-kielen perusteet Java-kielen perusteet Tunnus, varattu sana, kommentti Muuttuja, alkeistietotyyppi, merkkijono, literaalivakio, nimetty vakio Tiedon merkkipohjainen tulostaminen 1 Tunnus Java tunnus Java-kirjain Java-numero

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

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

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

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

Python-ohjelmointi Harjoitus 2

Python-ohjelmointi Harjoitus 2 Python-ohjelmointi Harjoitus 2 TAVOITTEET Kerrataan tulostuskomento ja lukumuotoisen muuttujan muuttaminen merkkijonoksi. Opitaan jakojäännös eli modulus, vertailuoperaattorit, ehtorakenne jos, input-komento

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

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

Osoittimet. Mikä on osoitin?

Osoittimet. Mikä on osoitin? Osoittimet 7 Osoittimet On aika siirtyä käsittelemään osoittimia, C++:lle elintärkeätä ominaisuutta. Osoittimet ovat tärkeitä, koska ne luovat perustan muistin dynaamiselle varaukselle ja käytölle. Ne

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

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

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

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

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

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

Ohjausrakenteet. Valinta:

Ohjausrakenteet. Valinta: Ohjausrakenteet Luento antaa yleiskuvan siitä kuinka ohjelmassa suorittaan vaihtoehtoisia tehtäviä valintarakenteiden avulla ja kuinka samanlaisia ohjelma-askeleita toistetaan toistorakenteiden avulla

Lisätiedot

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python Ohjelmoinnin perusteet Y Python T-106.1208 9.2.2009 T-106.1208 Ohjelmoinnin perusteet Y 9.2.2009 1 / 35 Listat Esimerkki: halutaan kirjoittaa ohjelma, joka lukee käyttäjältä 30 lämpötilaa. Kun lämpötilat

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

Kerta 2. Kerta 2 Kerta 3 Kerta 4 Kerta 5. 1. Toteuta Pythonilla seuraava ohjelma:

Kerta 2. Kerta 2 Kerta 3 Kerta 4 Kerta 5. 1. Toteuta Pythonilla seuraava ohjelma: Kerta 2 Kerta 3 Kerta 4 Kerta 5 Kerta 2 1. Toteuta Pythonilla seuraava ohjelma: 2. Tulosta Pythonilla seuraavat luvut allekkain a. 0 10 (eli, näyttää tältä: 0 1 2 3 4 5 6 7 8 9 10 b. 0 100 c. 50 100 3.

Lisätiedot

Kääntäjän virheilmoituksia

Kääntäjän virheilmoituksia OHJ-1101 Ohjelmointi 1e 2008-09 1 Kääntäjän virheilmoituksia Kun progvh2 ohjelma käännetään antaa tutg++ seuraavat virheilmoitukset ja varoitukset: proffa> tutg++ progvh2.cc progvh2.cc:29:13: warning:

Lisätiedot

Ohjelmointi 1 Taulukot ja merkkijonot

Ohjelmointi 1 Taulukot ja merkkijonot Ohjelmointi 1 Taulukot ja merkkijonot Jussi Pohjolainen TAMK Tieto- ja viestintäteknologia Johdanto taulukkoon Jos ohjelmassa käytössä ainoastaan perinteisiä (yksinkertaisia) muuttujia, ohjelmien teko

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 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

Harjoitus 3 (viikko 39)

Harjoitus 3 (viikko 39) Mikäli tehtävissä on jotain epäselvää, laita sähköpostia vastuuopettajalle (jorma.laurikkala@uta.fi). Muista nimetä muuttujat hyvin sekä kommentoida ja sisentää koodisi. Vältä liian pitkiä rivejä. Ohjelmointitehtävien

Lisätiedot

ITKP102 Ohjelmointi 1 (6 op)

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

Lisätiedot

2. Lisää Java-ohjelmoinnin alkeita. Muuttuja ja viittausmuuttuja (1/4) Muuttuja ja viittausmuuttuja (2/4)

2. Lisää Java-ohjelmoinnin alkeita. Muuttuja ja viittausmuuttuja (1/4) Muuttuja ja viittausmuuttuja (2/4) 2. Lisää Java-ohjelmoinnin alkeita Muuttuja ja viittausmuuttuja Vakio ja literaalivakio Sijoituslause Syötteen lukeminen ja Scanner-luokka 1 Muuttuja ja viittausmuuttuja (1/4) Edellä mainittiin, että String-tietotyyppi

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

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

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

7. Näytölle tulostaminen 7.1

7. Näytölle tulostaminen 7.1 7. Näytölle tulostaminen 7.1 Sisällys System.out.println- ja System.out.print-operaatiot. Tulostus erikoismerkeillä. Edistyneempää tulosteiden muotoilua. 7.2 Tulostusoperaatiot System.out.println-operaatio

Lisätiedot

ITKP102 Ohjelmointi 1 (6 op)

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

Lisätiedot

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

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

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

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

Lisätiedot

11. Javan valintarakenteet 11.1

11. Javan valintarakenteet 11.1 11. Javan valintarakenteet 11.1 Sisällys If- ja if-else-lauseet. Orpo else. Valintaa toisin: switch-lause. 11.2 If-lause Merkitään varatulla sanalla if. Kuvaa yksisuuntaisen päätöksen: rakenteen lauseet

Lisätiedot

4. oppitunti. Ilmaukset ja ohjelmalauseet. Osa

4. oppitunti. Ilmaukset ja ohjelmalauseet. Osa Osa I 4. oppitunti Ilmaukset ja ohjelmalauseet Ohjelma ei todellisuudessa ole mitään muuta kuin joukko komentoja, jotka suoritetaan peräkkäin. Monipuolisuutta ohjelmaan saadaan, kun ohjelmassa haaraudutaan

Lisätiedot

Osa. Listaus 2.1. HELLO.CPP esittelee C++ -ohjelman osat. 14: #include <iostream.h> 15: 16: int main() 17: {

Osa. Listaus 2.1. HELLO.CPP esittelee C++ -ohjelman osat. 14: #include <iostream.h> 15: 16: int main() 17: { Osa I 2. oppitunti C++-ohjelman osat Ennen kuin menemme yksityiskohtaisemmin sisälle C++-luokkiin, -muuttujiin jne, katsokaamme ensin, millaisista osista C++-ohjelma koostuu. Tämän tunnin aikana opit seuraavat

Lisätiedot

Zeon PDF Driver Trial

Zeon PDF Driver Trial Matlab-harjoitus 2: Kuvaajien piirto, skriptit ja funktiot. Matlabohjelmoinnin perusteita Numeerinen integrointi trapezoidaalimenetelmällä voidaan tehdä komennolla trapz. Esimerkki: Vaimenevan eksponentiaalin

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

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

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

12 Mallit (Templates)

12 Mallit (Templates) 12 Mallit (Templates) Malli on määrittely, jota käyttämällä voidaan luoda samankaltaisten aliohjelmien ja luokkien perheitä. Malli on ohje kääntäjälle luoda geneerisestä tyyppiriippumattomasta ohjelmakoodista

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

14. Hyvä ohjelmointitapa 14.1

14. Hyvä ohjelmointitapa 14.1 14. Hyvä ohjelmointitapa 14.1 Yleistä Ohjelman elinkaari ei tyypillisesti pääty sen toteuttamiseen; ohjelmaa voidaan käyttää ja ylläpitää jopa vuosikymmeniä. Jotta koodin muuttaminen on mahdollista, sen

Lisätiedot

System.out.printf("%d / %d = %.2f%n", ekaluku, tokaluku, osamaara);

System.out.printf(%d / %d = %.2f%n, ekaluku, tokaluku, osamaara); Kysy Karilta tai Kimmolta, jos tehtävissä on jotain epäselvää. Kerro WETOon liittyvät ongelmat suoraan Jormalle sähköpostitse (jorma.laurikkala@uta.fi). Muista nimetä muuttujat hyvin sekä kommentoida ja

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

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

ITKP102 Ohjelmointi 1 (6 op)

ITKP102 Ohjelmointi 1 (6 op) ITKP102 Ohjelmointi 1 (6 op) Tentaattori: Antti-Jussi Lakanen 12. huhtikuuta 2019 Tee kukin tehtävä omalle konseptiarkille. Noudata ohjelmointitehtävissä kurssin koodauskäytänteitä. Yksi A4-kokoinen lunttilappu

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

Lauseet. Ehdollinen lause. Tämän osan sisältö. Ehdollinen lause. Esimerkkejä. Yksinkertainen ehto. Lohkosulut ja sisennys. Ehdollinen lause if

Lauseet. Ehdollinen lause. Tämän osan sisältö. Ehdollinen lause. Esimerkkejä. Yksinkertainen ehto. Lohkosulut ja sisennys. Ehdollinen lause if 3 Lauseet Lue kirjasta s. 54-84 Tämän osan sisältö Ehdollinen lause if Looginen lauseke vertailut AND-operaattori &&, & OR-operaattori, NOT-operaattori! Valintalause switch Toistolauseet while for do while

Lisätiedot

Ohjelmoinnin perusteet Y Python

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

Lisätiedot

Sisällys. 3. Muuttujat ja operaatiot. Muuttujat ja operaatiot. Muuttujat. Operaatiot. Imperatiivinen laskenta. Muuttujat. Esimerkkejä: Operaattorit.

Sisällys. 3. Muuttujat ja operaatiot. Muuttujat ja operaatiot. Muuttujat. Operaatiot. Imperatiivinen laskenta. Muuttujat. Esimerkkejä: Operaattorit. 3. Muuttujat ja operaatiot Sisällys Imperatiivinen laskenta. Muuttujat. Nimi ja arvo. Muuttujan nimeäminen. Muuttujan tyyppi.. Operandit. Arvon sijoitus muuttujaan. Aritmeettiset operaattorit. Arvojen

Lisätiedot

Perustietotyypit ja laskutoimitukset

Perustietotyypit ja laskutoimitukset Perustietotyypit ja laskutoimitukset 2 Perustietotyypit ja laskutoimitukset Tässä luvussa käsittelemme C++:n perustietotyyppejä, varsinkin sellaisia kuin sinä mitä todennäköisemmin tulet käyttämään omissa

Lisätiedot

13. Hyvä ohjelmointitapa (osa 1) 13.1

13. Hyvä ohjelmointitapa (osa 1) 13.1 13. Hyvä ohjelmointitapa (osa 1) 13.1 Yleistä Ohjelman elinkaari ei tyypillisesti pääty sen toteuttamiseen tarvitaan ylläpitoa. Jotta koodin muuttaminen on mahdollista, on sen oltava myös muidenkin kuin

Lisätiedot

Ohjelmoinnin perusteet Y Python

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

Lisätiedot

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

3. Muuttujat ja operaatiot 3.1

3. Muuttujat ja operaatiot 3.1 3. Muuttujat ja operaatiot 3.1 Sisällys Imperatiivinen laskenta. Muuttujat. Nimi ja arvo. Muuttujan nimeäminen. Muuttujan tyyppi. Operaattorit. Operandit. Arvon sijoitus muuttujaan. Aritmeettiset operaattorit.

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

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

Virtuaalifunktiot ja polymorfismi

Virtuaalifunktiot ja polymorfismi Virtuaalifunktiot ja polymorfismi 16 Virtuaalifunktiot ja polymorfismi Polymorfismi on niin tehokas olio-ohjelmoinnin ominaisuus, että tulet varmastikin käyttämään sitä lähes kaikissa C++-ohjelmissasi.

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

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 perusteet Y Python

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

Lisätiedot

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

Operaattoreiden uudelleenmäärittely

Operaattoreiden uudelleenmäärittely Operaattoreiden uudelleenmäärittely 14 Operaattoreiden uudelleenmäärittely Tässä luvussa käsittelemme, kuinka voit lisätä toiminnallisuutta luokkiisi, jotta ne toimivat enemmän C++:n perustietotyyppien

Lisätiedot

Harjoitus 2 (viikko 45)

Harjoitus 2 (viikko 45) Mikäli tehtävissä on jotain epäselvää, laita sähköpostia vastuuopettajalle (jorma.laurikkala@uta.fi). Muista lisätä static-määre operaatioidesi otsikoihin, jotta ohjelmasi kääntyvät. Muista noudattaa hyvän

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

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

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

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python Ohjelmoinnin perusteet Y Python T-106.1208 3.2.2010 T-106.1208 Ohjelmoinnin perusteet Y 3.2.2010 1 / 36 Esimerkki: asunnon välityspalkkio Kirjoitetaan ohjelma, joka laskee kiinteistönvälittäjän asunnon

Lisätiedot

Tietojen syöttäminen ohjelmalle. Tietojen syöttäminen ohjelmalle Scanner-luokan avulla

Tietojen syöttäminen ohjelmalle. Tietojen syöttäminen ohjelmalle Scanner-luokan avulla Tietojen syöttäminen ohjelmalle Tähän mennessä on käsitelty Javan tulostuslauseet System.out.print ja System.out.println sekä ohjelman perusrakenneosat (muuttujat, vakiot, lauseet). Jotta päästään tekemään

Lisätiedot

System.out.printf("%d / %d = %.2f%n", ekaluku, tokaluku, osamaara);

System.out.printf(%d / %d = %.2f%n, ekaluku, tokaluku, osamaara); Mikäli tehtävissä on jotain epäselvää, laita sähköpostia vastuuopettajalle (jorma.laurikkala@uta.fi). Muista nimetä muuttujat hyvin sekä kommentoida ja sisentää koodisi. Ohjelmointitehtävien osalta palautetaan

Lisätiedot

Javan perusteet. Ohjelman tehtävät: tietojen syöttö, lukeminen prosessointi, halutun informaation tulostaminen tulostus tiedon varastointi

Javan perusteet. Ohjelman tehtävät: tietojen syöttö, lukeminen prosessointi, halutun informaation tulostaminen tulostus tiedon varastointi 1 Javan perusteet Ohjelmointi IPO-malli Java lähdekoodista suoritettavaksi ohjelmaksi Vakio Muuttuja Miten Javalla näytetään tietoa käyttäjälle, miten Javalla luetaan käyttäjän antama syöte Miten Javalla

Lisätiedot

KAAVAT. Sisällysluettelo

KAAVAT. Sisällysluettelo Excel 2013 Kaavat Sisällysluettelo KAAVAT KAAVAT... 1 Kaavan tekeminen... 2 Kaavan tekeminen osoittamalla... 2 Kaavan kopioiminen... 3 Kaavan kirjoittaminen... 3 Summa-funktion lisääminen... 4 Suorat eli

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

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

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

// Tulostetaan double-tyyppiseen muuttujaan "hinta" tallennettu // kertalipun hinta ja vaihdetaan riviä. System.out.printf("%.1f euros.

// Tulostetaan double-tyyppiseen muuttujaan hinta tallennettu // kertalipun hinta ja vaihdetaan riviä. System.out.printf(%.1f euros. Lue kukin tehtävänanto huolellisesti ja kokonaisuudessaan ennen kuin aloitat vastaamisen. Kustakin tehtävästä voi saada 0 6 pistettä. Tentin läpipääsyraja on 12 / 24 pistettä. Ratkaisut palautetaan WETO-järjestelmään

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

Harjoitus 5. Esimerkki ohjelman toiminnasta: Lausekielinen ohjelmointi I Kesä 2018 Avoin yliopisto 1 / 5

Harjoitus 5. Esimerkki ohjelman toiminnasta: Lausekielinen ohjelmointi I Kesä 2018 Avoin yliopisto 1 / 5 Kysy Karilta tai Kimmolta, jos tehtävissä on jotain epäselvää. Kerro WETOon liittyvät tekniset ongelmat suoraan Jormalle sähköpostitse (jorma.laurikkala@uta.fi). Muista nimetä muuttujat hyvin sekä kommentoida

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

1. Mikä on lukujen 10, 9, 8,..., 9, 10 summa? 2. Mikä on lukujen 10, 9, 8,..., 9, 10 tulo? =?

1. Mikä on lukujen 10, 9, 8,..., 9, 10 summa? 2. Mikä on lukujen 10, 9, 8,..., 9, 10 tulo? =? Tehtävät 1 1. Mikä on lukujen 10, 9, 8,..., 9, 10 summa? 2. Mikä on lukujen 10, 9, 8,..., 9, 10 tulo? 3. 16 125 250 =? 4. Kirjoita lausekkeeseen sulut siten, että tulos on nolla. 2 + 2 2 2 : 2 + 2 2 2

Lisätiedot

Harjoitus 5 (viikko 41)

Harjoitus 5 (viikko 41) Mikäli tehtävissä on jotain epäselvää, laita sähköpostia vastuuopettajalle (jorma.laurikkala@uta.fi). Muista nimetä muuttujat hyvin sekä kommentoida ja sisentää koodisi. Vältä liian pitkiä rivejä, käytä

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

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

Luokat. Luokat ja olio-ohjelmointi

Luokat. Luokat ja olio-ohjelmointi Luokat 12 Luokat Tässä luvussa laajennamme edellisessä luvussa käsittelemäämme struktuurityyppiä ja siirrymme yhteen C++-ohjelmoijan kaikkein tärkeimmistä välineistä: luokkiin. Käsittelemme myöskin joitakin

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

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

Python-ohjelmointi Harjoitus 5

Python-ohjelmointi Harjoitus 5 Python-ohjelmointi Harjoitus 5 TAVOITTEET Kerrataan silmukkarakenteen käyttäminen. Kerrataan jos-ehtorakenteen käyttäminen. Opitaan if else- ja if elif else-ehtorakenteet. Matematiikan sisällöt Tehtävät

Lisätiedot

// Tulostetaan double-tyyppiseen muuttujaan "hinta" tallennettu // kertalipun hinta ja vaihdetaan riviä. System.out.printf("%.1f euros.

// Tulostetaan double-tyyppiseen muuttujaan hinta tallennettu // kertalipun hinta ja vaihdetaan riviä. System.out.printf(%.1f euros. Lue kukin tehtävänanto huolellisesti ja kokonaisuudessaan ennen kuin aloitat vastaamisen. Kustakin tehtävästä voi saada 0 6 pistettä. Tentin läpipääsyraja on 12 / 24 pistettä. Ratkaisut palautetaan WETO-järjestelmään

Lisätiedot

Luento 5. Timo Savola. 28. huhtikuuta 2006

Luento 5. Timo Savola. 28. huhtikuuta 2006 UNIX-käyttöjärjestelmä Luento 5 Timo Savola 28. huhtikuuta 2006 Osa I Shell-ohjelmointi Ehtolause Lausekkeet suoritetaan jos ehtolausekkeen paluuarvo on 0 if ehtolauseke then lauseke

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

Sisällys. 12. Näppäimistöltä lukeminen. Yleistä. Yleistä 12.1 12.2 12.3 12.4

Sisällys. 12. Näppäimistöltä lukeminen. Yleistä. Yleistä 12.1 12.2 12.3 12.4 Sisällys 12. Näppäimistöltä lukeminen Arvojen lukeminen näppäimistöltä yleisesti. Arvojen lukeminen näppäimistöltä Java-kielessä.. Luetun arvon tarkistaminen. Tietovirrat ja ohjausmerkit. Scanner-luokka.

Lisätiedot

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python Ohjelmoinnin perusteet Y Python T-106.1208 25.2.2009 T-106.1208 Ohjelmoinnin perusteet Y 25.2.2009 1 / 34 Syötteessä useita lukuja samalla rivillä Seuraavassa esimerkissä käyttäjä antaa useita lukuja samalla

Lisätiedot

Metropolia ammattikorkeakoulu 05.02.2015 TI00AA43-3004: Ohjelmointi Kotitehtävät 3

Metropolia ammattikorkeakoulu 05.02.2015 TI00AA43-3004: Ohjelmointi Kotitehtävät 3 : http://users.metropolia.fi/~pasitr/2014-2015/ti00aa43-3004/kt/03/ratkaisut/ Tehtävä 1. (1 piste) Tee ohjelma K03T01.cpp, jossa ohjelmalle syötetään kokonaisluku. Jos kokonaisluku on positiivinen, niin

Lisätiedot

\+jokin merkki tarkoittaa erikoismerkkiä; \n = uusi rivi.

\+jokin merkki tarkoittaa erikoismerkkiä; \n = uusi rivi. 1. Johdanto 1.1 Yleistä Suurten ohjelmien organisointi vaikeaa C:ssä. 1980 Stroustrup lisäsi C:hen olio-ohjelmoinnin (OOP = Object Oriented Programming). C C++: C-ohjelma on (muutamia poikkeuksia lukuunottamatta)

Lisätiedot