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;

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

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

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, Vakio Tiedon merkkipohjainen tulostaminen Ohjelmointi (ict1tx006) Tunnus (5.3) Javan tunnus Java-kirjain Java-numero

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Lisätiedot

Ohjelmoinnin 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

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

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

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

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

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

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

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

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

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

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

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

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

Ohjelmiston testaus ja laatu. Testausmenetelmiä

Ohjelmiston testaus ja laatu. Testausmenetelmiä Ohjelmiston testaus ja laatu Testausmenetelmiä Testausmenetelmiä - 1 Testauksen menetelmien päälähestymistapoina ovat black-box testi testaaja ei voi tutkia lähdekoodia testaus perustuu sovellukselle suunnitteluvaiheessa

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

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

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

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

Modulaarisessa ohjelmoinnissa jaetaan ohjelma osiin (moduuleihin), jotka ovat yksinkertaisia ja lyhyitä.

Modulaarisessa ohjelmoinnissa jaetaan ohjelma osiin (moduuleihin), jotka ovat yksinkertaisia ja lyhyitä. 3. Funktiot Modulaarisessa ohjelmoinnissa jaetaan ohjelma osiin (moduuleihin), jotka ovat yksinkertaisia ja lyhyitä. Modulaarisuudella pyritään parantamaan ohjelman ymmärrettävyyttä, testattavuutta sekä

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

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 2.2.2011 T-106.1208 Ohjelmoinnin perusteet Y 2.2.2011 1 / 37 Kännykkäpalautetteen antajia kaivataan edelleen! Ilmoittaudu mukaan lähettämällä ilmainen tekstiviesti

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

Algoritmit. Ohjelman tekemisen hahmottamisessa käytetään

Algoritmit. Ohjelman tekemisen hahmottamisessa käytetään Ohjelmointi Ohjelmoinnissa koneelle annetaan tarkkoja käskyjä siitä, mitä koneen tulisi tehdä. Ohjelmointikieliä on olemassa useita satoja. Ohjelmoinnissa on oleellista asioiden hyvä suunnittelu etukäteen.

Lisätiedot

Kielioppia: toisin kuin Javassa

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

Lisätiedot

Ohjelmoinnin peruskurssi Y1

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

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

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

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

Muuttujien määrittely

Muuttujien määrittely Tarja Heikkilä Muuttujien määrittely Määrittele muuttujat SPSS-ohjelmaan lomakkeen kysymyksistä. Harjoitusta varten lomakkeeseen on muokattu kysymyksiä kahdesta opiskelijoiden tekemästä Joupiskan rinneravintolaa

Lisätiedot

Tietueet. Tietueiden määrittely

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

Lisätiedot

Lisää perustietotyypeistä

Lisää perustietotyypeistä Perustietotyypit ja laskutoimitukset 3 Lisää perustietotyypeistä Tässä luvussa käsittelemme lisää jo edellisessä luvussa käsittelemiämme perustietotyyppejä. Näemme, kuinka eri tyyppiset muuttujat vaikuttavat

Lisätiedot

13 Operaattoreiden ylimäärittelyjä

13 Operaattoreiden ylimäärittelyjä 248 13 C++-kielessä voidaan operaattoreita ylimäärittää. Ylimääriteltävää operaattoria voidaan pitää ikäänkuin metodina, joka esitellään luokan esittelyssä ja määritellään luokan ulkopuolella kuten metoditkin.

Lisätiedot

Taulukot. Jukka Harju, Jukka Juslin 2006 1

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

Lisätiedot

11. oppitunti III. Viittaukset. Osa. Mikä on viittaus?

11. oppitunti III. Viittaukset. Osa. Mikä on viittaus? Osa III 11. oppitunti Viittaukset Kahdessa viime luvussa opit käyttämään osoittimia kohteiden käsittelyyn vapaalla muistialueella sekä viittaamaan noihin kohteisiin epäsuorasti. Tässä luvussa käsiteltävät

Lisätiedot

Perinteiset tietokoneohjelmat alkavat pääohjelmasta, c:ssä main(), jossa edetään rivi riviltä ja käsky käskyltä.

Perinteiset tietokoneohjelmat alkavat pääohjelmasta, c:ssä main(), jossa edetään rivi riviltä ja käsky käskyltä. TIETOKONEOHJELMIEN RAKENNE Perinteiset tietokoneohjelmat alkavat pääohjelmasta, c:ssä main(), jossa edetään rivi riviltä ja käsky käskyltä. Teollisuusautomaation ohjelmiin on lainattu runsaasti perinteisen

Lisätiedot

Johdanto ja esimerkki. Pseudokoodi lauseina. Kommentointi ja sisentäminen. Ohjausrakenteet:

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

Lisätiedot

1. luento. Ohjelmointi (C) T0004 Syksy 2003. 1. luento. 1. luento. 1. luento. 1. luento. kurssin sisältö ja tavoitteet työmuodot.

1. luento. Ohjelmointi (C) T0004 Syksy 2003. 1. luento. 1. luento. 1. luento. 1. luento. kurssin sisältö ja tavoitteet työmuodot. EVTEK Teknillinen ammattikorkeakoulu Ohjelmointi (C) T0004 Syksy 2003 Olli Hämäläinen kurssin sisältö ja tavoitteet työmuodot luennot 1-2/2003 laboratorioharjoitukset 1-2/2003 kotitehtävät, laboratoriokerrat

Lisätiedot

Kappale 20: Kantaluvut

Kappale 20: Kantaluvut Kappale 20: Kantaluvut 20 Johdanto: Kantaluvut... 328 Kantalukujen syöttäminen ja muuntaminen... 329 Matemaattiset toiminnot Hex- ja Bin-luvuilla... 330 Bittien vertaileminen ja manipulointi... 331 Huom!

Lisätiedot

VIII. Osa. Liitteet. Liitteet Suoritusjärjestys Varatut sanat Binääri- ja heksamuoto

VIII. Osa. Liitteet. Liitteet Suoritusjärjestys Varatut sanat Binääri- ja heksamuoto Osa VIII Liitteet Liitteet A B C Suoritusjärjestys Varatut sanat Binääri- ja heksamuoto Osa VIII A. Liite Operaattoreiden suoritusjärjestys On tärkeää ymmärtää, että operaattoreilla on prioriteettinsa,

Lisätiedot

Ohjelmoinnin perusteet Y Python

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

Lisätiedot

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

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

Lisätiedot

815338A Ohjelmointikielten periaatteet 2014-2015

815338A Ohjelmointikielten periaatteet 2014-2015 815338A Ohjelmointikielten periaatteet 2014-2015 IV.2 Imperatiivinen ohjelmointi lauseet ja lausekkeet Sisältö 1. Yleistä lausekkeista 2. Presedenssi- ja assosiaatiosäännöt 3. Tyyppimuunnokset 4. Vertailulausekkeet

Lisätiedot

Perusasiat. Mitkä ovat C++-ohjelman perusosat. Miten lähdeteksti kommentoidaan. Miten lähdetekstistä tulee suoritettava ohjelma

Perusasiat. Mitkä ovat C++-ohjelman perusosat. Miten lähdeteksti kommentoidaan. Miten lähdetekstistä tulee suoritettava ohjelma Perusasiat 1 Perusasiat Tässä ensimmäisessä luvussa käsittelemme C++:n perusominaisuuksia. Kaikkiin tässä käsiteltäviin asioihin palataan tarkemmin myöhemmissä luvuissa - tarkoituksena on nyt vain hieman

Lisätiedot

C-kieli mahdollistaa hyvin tiiviin ja samalla sekavan tavan esittää asioita, kuitenkin hyvän ohjelman tulisi olla mahdollisimman helppolukuinen ja

C-kieli mahdollistaa hyvin tiiviin ja samalla sekavan tavan esittää asioita, kuitenkin hyvän ohjelman tulisi olla mahdollisimman helppolukuinen ja 1. C-kieli yleiskäyttöinen ohjelmointikieli, standardoitu 1990. siirrettävä laiteläheinen pieni ydin, monimutkaiset kokonaisuudet rakennetaan aliohjelmakirjastojen avulla. direktiivit ja esikääntäjien

Lisätiedot

Ohjelmoinnin jatkokurssi, kurssikoe 28.4.2014

Ohjelmoinnin jatkokurssi, kurssikoe 28.4.2014 Ohjelmoinnin jatkokurssi, kurssikoe 28.4.2014 Kirjoita jokaiseen palauttamaasi konseptiin kurssin nimi, kokeen päivämäärä, oma nimi ja opiskelijanumero. Vastaa kaikkiin tehtäviin omille konsepteilleen.

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

Periytyminen. Luokat ja olio-ohjelmointi

Periytyminen. Luokat ja olio-ohjelmointi Periytyminen 15 Periytyminen Tässä luvussa käsittelemme aihetta, joka on olio-ohjelmoinnin kaikkein tärkein osa - periytyvyys. Periytyvyyden avulla voimme luoda uusia luokkia uudelleenkäyttämällä ja laajentamalla

Lisätiedot

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python Ohjelmoinnin perusteet Y Python T-106.1208 11.2.2009 T-106.1208 Ohjelmoinnin perusteet Y 11.2.2009 1 / 33 Kertausta: listat Tyhjä uusi lista luodaan kirjoittamalla esimerkiksi lampotilat = [] (jolloin

Lisätiedot

-ohjelmointikurssi 1998-1999. luentomoniste ja tehtävät

-ohjelmointikurssi 1998-1999. luentomoniste ja tehtävät -ohjelmointikurssi 1998-1999 luentomoniste ja tehtävät Sisällysluettelo C++-KIELESTÄ...2 KONEKIELI JA LAUSEKIELI...3 C++-KIELEN OHJELMAN RAKENNE...4 TYYPIT JA MUUTTUJAT...6 OPERAATTOREISTA...8 TYYPPIMUUNNOKSET...11

Lisätiedot

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python Ohjelmoinnin perusteet Y Python T-106.1208 2.3.2011 T-106.1208 Ohjelmoinnin perusteet Y 2.3.2011 1 / 39 Kertausta: tiedoston avaaminen Kun ohjelma haluaa lukea tai kirjoittaa tekstitiedostoon, on ohjelmalle

Lisätiedot

C# Windows ohjelmointi perusopas

C# Windows ohjelmointi perusopas Paavo Räisänen C# Windows ohjelmointi perusopas www.ohjelmoimaan.net Tätä opasta saa vapaasti kopioida, tulostaa ja levittää ei kaupallisissa tarkoituksissa. Kuitenkaan omille nettisivuille opasta ei saa

Lisätiedot

Omat tietotyypit. Mikä on olio?

Omat tietotyypit. Mikä on olio? Omat tietotyypit 11 Omat tietotyypit C++:n suuri vahvuus on sen oliopohjaisuudessa. Siihen liittyy runsaasti asiaa ja kulutammekin seuraavat viisi lukua tässä aiheessa. Tässä ja seuraavassa luvussa käsittelemme

Lisätiedot

Matematiikan tukikurssi

Matematiikan tukikurssi Matematiikan tukikurssi Kurssikerta 1 1 Matemaattisesta päättelystä Matemaattisen analyysin kurssin (kuten minkä tahansa matematiikan kurssin) seuraamista helpottaa huomattavasti, jos opiskelija ymmärtää

Lisätiedot

Java-kielen perusteita

Java-kielen perusteita Java-kielen perusteita Käyttäjän kanssa keskusteleva ohjelma 1 Kirjoittaminen konsolinäkymään //Java ohjelma, joka tulostaa konsoli-ikkunaan public class HeiMaailma { public void aja() { // kirjoitus ja

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

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

Lisätiedot

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python Ohjelmoinnin perusteet Y Python T-106.1208 15.2.2010 T-106.1208 Ohjelmoinnin perusteet Y 15.2.2010 1 / 46 Merkkijonot Merkkijonojen avulla ohjelmassa voi esittää tekstitietoa, esim. nimiä, osoitteita ja

Lisätiedot

5.2 Ensimmäisen asteen yhtälö

5.2 Ensimmäisen asteen yhtälö 5. Ensimmäisen asteen ytälö 5. Ensimmäisen asteen yhtälö Aloitetaan antamalla nimi yhtälön osille. Nyt annettavat nimet eivät riipu yhtälön tyypistä tai asteesta. Tarkastellaan seuraavaa yhtälöä. Emme

Lisätiedot

Kortinhaltijat joilla on maksukeskeytys Maksuryhmään liitettyjen kortinhaltijoiden lukumäärä, joiden maksut ovat tilapäisesti keskeytetty.

Kortinhaltijat joilla on maksukeskeytys Maksuryhmään liitettyjen kortinhaltijoiden lukumäärä, joiden maksut ovat tilapäisesti keskeytetty. 1(6) MAKSURYHMÄN HALLINTA Maksuryhmäkohtaiselle sivulle pääset klikkaamalla yksittäisen maksuryhmän nimeä verkkopalvelun etusivulla tai valitsemalla ryhmän Maksuryhmät - osion listalta. Sivun tiedot ja

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

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python Ohjelmoinnin perusteet Y Python T-106.1208 24.1.2011 T-106.1208 Ohjelmoinnin perusteet Y 24.1.2011 1 / 36 Luentopalaute kännykällä alkaa tänään! Ilmoittaudu mukaan lähettämällä ilmainen tekstiviesti Vast

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

Mallit standardi mallikirjasto parametroitu tyyppi

Mallit standardi mallikirjasto parametroitu tyyppi Mallit 18 Mallit Malli on tehokas mekanismi uusien luokkien generoimiseksi automaattisesti. Standardikirjaston suuri osa, standardi mallikirjasto, rakentuu kokonaan mallien määrittelymahdollisuuden ympärille,

Lisätiedot

Informaatioteknologian laitos Olio-ohjelmoinnin perusteet / Salo 15.2.2006

Informaatioteknologian laitos Olio-ohjelmoinnin perusteet / Salo 15.2.2006 TURUN YLIOPISTO DEMO III Informaatioteknologian laitos tehtävät Olio-ohjelmoinnin perusteet / Salo 15.2.2006 1. Tässä tehtävässä tarkastellaan erääntyviä laskuja. Lasku muodostaa oman luokkansa. Laskussa

Lisätiedot

TT00AA12-2016 - Ohjelmoinnin jatko (TT10S1ECD)

TT00AA12-2016 - Ohjelmoinnin jatko (TT10S1ECD) TT00AA12-2016 - Ohjelmoinnin jatko (TT10S1ECD) Ohjelmointikäytännöt 21/3/11 Mikko Vuorinen Metropolia Ammattikorkeakoulu 1 Sisältö 1) Mitä on hyvä koodi? 2) Ohjelmointikäytäntöjen merkitys? 3) Koodin asettelu

Lisätiedot

Olion elinikä. Olion luominen. Olion tuhoutuminen. Olion tuhoutuminen. Kissa rontti = null; rontti = new Kissa();

Olion elinikä. Olion luominen. Olion tuhoutuminen. Olion tuhoutuminen. Kissa rontti = null; rontti = new Kissa(); Sisällys 7. Oliot ja viitteet Olio Java-kielessä. Olion luominen, elinikä ja tuhoutuminen. Viitteiden käsittelyä: sijoitus, vertailu ja varautuminen null-arvoon. Viite metodin paluuarvona.. 7.1 7.2 Olio

Lisätiedot

Plagioinnin tunnistaminen lähdekielisistä ohjelmista

Plagioinnin tunnistaminen lähdekielisistä ohjelmista Plagioinnin tunnistaminen lähdekielisistä ohjelmista Plagiointi- ja tutkimusetiikka seminaari 30.09.2003 Kirsti Ala-Mutka TTY/Ohjelmistotekniikka Sisältö Plagiointi ohjelmointikursseilla Tyypillisiä ulkoasumuutoksia

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

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

Kerta 2. Kerta 2 Kerta 3 Kerta 4 Kerta 5 Kerta 6 Kerta 7. 1. Toteuta Pythonilla seuraava ohjelma: Kerta 2 Kerta 3 Kerta 4 Kerta 5 Kerta 6 Kerta 7 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

Lisätiedot

Sisällys JAVA-OHJELMOINTI Osa 3: Laskennan ohjaus. Lohkolause (block) Peräkkäinen laskenta. Lohkon käyttö. Esimerkki

Sisällys JAVA-OHJELMOINTI Osa 3: Laskennan ohjaus. Lohkolause (block) Peräkkäinen laskenta. Lohkon käyttö. Esimerkki Sisällys JAVA-OHJELMOINTI Osa 3: Laskennan ohjaus Eero Hyvönen Tietojenkäsittelytieteen laitos Helsingin yliopisto Peräkkäinen laskenta Ehdollinen laskenta Laskennan toisto Laskennan hierarkisuus 10/19/99

Lisätiedot

Java kahdessa tunnissa. Jyry Suvilehto

Java kahdessa tunnissa. Jyry Suvilehto Java kahdessa tunnissa Jyry Suvilehto Ohjelma Ohjelmointiasioita alkeista nippelitietoon n. 45 min Tauko 10 min Oliot, luokat ja muut kummajaiset n. 45 min Kysykää Sisältöä ei oikeasti ole 2x45 min täytteeksi,

Lisätiedot

etunimi, sukunimi ja opiskelijanumero ja näillä

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

Lisätiedot