Perustietotyypit ja laskutoimitukset

Koko: px
Aloita esitys sivulta:

Download "Perustietotyypit ja laskutoimitukset"

Transkriptio

1 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 ohjelmissasi. Käsittelemme myöskin miten suoritetaan yksinkertaisia numeerisia laskutoimituksia. Kaikki C++:n olio-ominaisuudet perustuvat perustietotyyppeihin, koska kaikki omat tietotyypit rakennetaan perustietotyypeistä. Tästä syystä on ensin tärkeää saada tukeva ote perustietotyypeistä. Tämän luvun jälkeen pystyt kirjoittamaan yksinkertaisia C++-ohjelmia perinteisen mallin mukaan: syöttö...käsittely...tulostus. Tässä luvussa käsittelemme: Tietotyypit C++:ssa Literaalivakiot, mitä ne ovat ja kuinka niitä määritellään Kokonaislukujen binäärinen ja heksadesimaalinen esitysmuoto Miten muuttujia määritellään ja alustetaan Miten kokonaislukujen laskutoimitukset toimivat Arvojen, jotka eivät ole kokonaislukuja, käyttö - eli liukulukulaskenta Miten estetään muuttujaan sijoitetun arvon muuttaminen Miten luodaan muuttujia, jotka voivat sisältää merkkejä Tieto ja tietotyypit C++ on vahvasti tyypitetty kieli - toisin sanoen, jokaisella tiedolla on tyyppi, joka määrittelee, minkälainen tieto on. C++-kääntäjäsi varmistaa niin pitkälle kuin mahdollista, että käytät oikeaa tietotyyppiä oikeassa paikassa ja kun yhdistät tietotyyppejä, että ne ovat yhteensopivia. Tästä tarkistuksesta johtuen kääntäjä huomaa useimmat virheet, jotka syntyisivät, jos esimerkiksi yrittäisit yhdistää tietotyyppejä, jotka eivät ole keskenään yhteensopivia. 31

2 C++ Ohjelmoijan käsikirja Numeeriset arvot, joita voit C++:ssa käsitellä, jakaantuvat kahteen pääluokkaan: kokonaisluvut (ei desimaaliosaa) ja liukuluvut (voi olla desimaaliosa). Tämä ei kuitenkaan tarkoita sitä, että käytössä olisi vain kaksi numeerista tietotyyppiä. Kummassakin luokassa on useita tietotyyppejä, joista jokainen voi sisältää tietyn arvojoukon lukuja. Käsitellään seuraavassa tietotyyppejä rinnakkain laskutoimitusten suorittamisen kanssa. Aloitetaan kokonaislukulaskennasta. 32 Yksinkertaiset laskutoimitukset Käsitellään ensiksi hieman terminologiaa: operaatio (kuten laskutoimitus) määritellään operaattorilla - esimerkiksi + lisäyksessä ja * kertomisessa. Arvot, joiden pohjalta operaattori toimii, ovat operandeja. Esimerkiksi lausekkeessa 2 * 3 operandeja ovat 2 ja 3. Koska kertolaskussa tarvitaan kaksi operandia, sitä kutsutaan binääriseksi operaattoriksi. Jotkut toiset operaattorit tarvitsevat vain yhden operandin ja niitä kutsutaankin unaarisiksi operaattoreiksi. Esimerkkinä unaarisista operaattoreista on miinusmerkki lausekkeessa -2. Miinusmerkillä on tässä yksi operandi - luku 2, jonka merkin se vaihtaa. Miinusmerkillä voi olla kaksikin operandia, kuten lausekkeessa 4-2. Laskutoimituksissa käytetään numeroita, joten katsotaan ensin, miten numeroita määritellään. C++:ssa vakioarvoja, kuten 42, tai Aleksis Kivi, kutsutaan literaalivakioiksi. Luvussa 1 käytimme merkkijonotyyppistä literaalivakiota, joka määriteltiin sijoittamalla joukko merkkejä lainausmerkkien väliin, kuten Aleksis Kivi. Seuraavaksi käsittelemme numeerisia literaalivakioita. Tällaisia ovat tavalliset numerot, joihin törmäät joka päivä: kengän koko, veden kiehumispiste - itse asiassa mikä tahansa määritelty numero. C++:n numeeriset vakiot luokitellaan kahteen luokkaan: Kokonaislukuliteraalit, jotka ovat kokonaislukuja ilman desimaalipistettä. Liukulukuliteraalit (kutsutaan yleensä liukuluvuiksi) ovat numeroita, joihon kuuluu desimaalipiste tai eksponentti tai molemmat (käsittelemme eksponentteja myöhemmin). Käytät kokonaislukuja, kun käsittelet kokonaisia lukuja, kuten joukkueen pelaajien lukumäärä tai kirjan sivujen lukumäärä. Liukulukuja käytät, kun arvot eivät ole kokonaisia: tilanteissa, joissa ympyrä jaetaan sen halkaisijalla tai euron ja dollarin valuuttakurssit. Liukulukuja käytetään myös, kun käsitellään hyvin pieniä tai hyvin suuria lukuja: elektronin paino tai aurinkokunnan halkaisija. Käytämme termiä liukuluku, koska luvut esittävät kiinteän määrän numeroita ja desimaalipiste liukuu molempiin suuntiin. Siirretään desimaalipistettä Molemmissa näissä luvuissa on sama määrä numeroita, mutta ne ovat aivan eri numeroita. Koska desimaalipistettä voidaan joustavasti siirtää, voimme esittää ja tallettaa hyvin suurta joukkoa eri lukuja. Hyvin pienet ja hyvin suuret luvut voidaan näin esittää kohtuullisen pienessä muistimäärässä.

3 Perustietotyypit ja laskutoimitukset Käsittelemme ensin kokonaislukujen käyttöä, koska se on näistä kahdesta yksinkertaisempia. Liukulukuja käsittelemme heti kokonaislukujen jälkeen. Kokonaislukuliteraalit Kokonaislukuliteraaleja voit kirjoittaa varsin suoraviivaisesti. Seuraavassa on joitakin esimerkkejä: Esimerkeissä olleet + ja - -merkit ovat unaarisia operaattoreita. Voit jättää + -merkin pois, koska se on oletusarvona, mutta voit myöskin kirjoittaa sen, jos se selventää asioita. Literaali +123 on sama kuin 123. Viimeisen esimerkin luvun kirjoittaisit normaalisti 22,333, mutta kokonaislukuliteraaleissa ei voi käyttää pilkkuja tuhannen erottimina. Kääntäjä tulkitsisi lukusi tällöin kahtena lukuna. Et voi myöskään kirjoittaa millaista tahansa kokonaislukuarvoa. Esimerkiksi kokonaislukua, jossa on 100 numeroa, ei voi kirjoittaa. Kokonaislukuliteraalilla on arvojen ylä- ja alarajat, jotka määräytyvät sen mukaan, miten paljon muistia varataan kullekin kokonaisluvulle. Palaamme tähän hieman myöhemmin tässä luvussa, kun käsittelemme kokonaislukumuuttujia. Binääriluvut Tutkitaan ensin, mitä tarkoitamme, kun kirjoitamme niinkin jokapäiväisiä lukuja kuin 324 tai 911. Luonnollisestikin tarkoitamme lukuja kolmesataa ja kaksikymmentä neljä ja yhdeksänsataa ja yksitoista. Tarkemmin ottaen tarkoitamme: 324 on: 3* * *10 0, joka on 3*10*10 + 2* on: 9* * *10 0, joka on 9*10*10 + 1* Kutsumme sitä desimaaliseksi esitystavaksi, koska se rakentuu kymmenen potensseista (desimaalinen juontaa juurensa latinankieliseen sanaan decimalis, joka tarkoittaa kymmenesosaa, jolla tarkoitettiin 10 % veroa - voi niitä aikoja...). Numeroiden esittäminen tällä tavalla on erittäin käytännöllistä ihmisille, joilla on kymmenen sormea ja/tai varvasta. Tietokoneesi ei kuitenkaan ole näin käytännönläheinen, se on rakennettu vain kytkimistä, jotka ovat joko päällä tai poissa päältä. Tällöin on kaikki vielä hyvin, kun lasketaan kahteen, mutta kaikkea muuta, kun lasketaan kymmeneen. Tämä onkin perimmäinen syy, miksi tietokoneissa luvut esitetään 2-kantaisina eikä 10-kantaisina. Lukujen esittämistä 2- kantalukujärjestelmässä kutsutaan binäärilukujärjestelmäksi. Luvut voivat olla joko 0 tai 1, mikä on ideaalitilanne, kun niiden esittämiseen voidaan käyttää vain kaksiasentoisia kytkimiä. Tarkastellaan vielä, miten luku 1101 muodostuu: 1*23 + 1*22 + 0*21 + 1*20, joka on 1*2*2*2 + 1*2*2 + 0*

4 C++ Ohjelmoijan käsikirja Tämä on 12 desimaalijärjestelmässä. Seuraavassa taulukossa on kaikki luvut, jotka voit esittää kahdeksalla binäärisellä numerolla (binäärinen numero tunnetaan paremmin bittinä). Binääri Desimaali Binääri Desimaali Huomaa, että seitsemällä ensimmäisellä bitillä voimme esittää luvut 0-127, mikä on 2 7 lukua. Kahdeksalla bitillä saamme 256 eli 2 8 lukua. Yleisesti ottaen, jos käytössä on n bittiä, voimme esittää 2 n kokonaislukua, joiden arvot ovat välillä 2 n -1. Binääristen lukujen yhteenlasku on tietokoneen sisällä hyvin yksinkertaista, koska siirto seuraavalle kymmenelle voi olla vain 0 tai 1. Tämä voidaan suorittaa hyvin yksinkertaisilla piireillä. Binärinen Desimaalinen 29 Viereisessä kuvassa esitetään, miten kahden binäärisen 8-bittisen luvun yhteenlasku toimisi Heksadesimaaliluvut Kun käsittelemme suuria binäärilukuja, kuten huomaamme pian, että binääriluvut eivät ole kovinkaan käyttökelpoisia käytännössä. Ajatellaan esimerkiksi lukua numeroinen desimaaliluku. Binäärisenä tämä luku esitettäisiin seuraavasti: Luvun pituus on kokonaista 24 numeroa. Tämähän on jo hieman liikaa! Tarvitsemme taloudellisemman tavan kirjoittaa tämän, mutta desimaalinen esitysmuoto ei aina ole tarkoituksenmukainen. Joskus (kuten näemme seuraavassa luvussa) voisi olla esimerkiksi tarvetta määritellä, että 10. ja 24. bitti oikealta lukien asetettaisiin ykköseksi. Desimaaliluvun, joka suorittaisi tämän, keksiminen on melko rankkaa, ja siinä tulee Siirto 34

5 Perustietotyypit ja laskutoimitukset helposti virheitä. Huomattavasti helpompi tapa on heksadesimaalilukujen käyttö. Heksadesimaalilukujen kohdalla kantalukuna on 16. Laskutoimitus 16-kantaisena on huomattavasti mukavampaa ja se sopii varsin hyvin yhteen binäärisen kanssa. Jokaisella heksadesimaalinumerolla voi olla arvo 0-15 (numerot esitetään kirjaimilla A - F, kuten alla olevasta taulukosta näkyy) ja arvot 0-15 vastaavat mukavasti arvoja, jotka neljä bittiä voi esittää. Heksadesimaali Desimaali Binääri A B C D E F Koska heksadesimaaliluvun yksi numero vastaa neljää binääriluvun numeroa, voimme esittää suuren binäärilukumme heksadesimaalilukuna yksinkertaisesti ryhmittelemällä binääriluvun oikealta alkaen neljän mittaisiin ryhmiin ja kirjoittamalla kutakin ryhmää vastaavan heksadesimaalinumeron. Binääriluvusta muodostuu siis luku F 5 B 9 E 1 Tässä meillä on kuusi heksadesimaalista numeroa, jotka vastaavat kuutta binääriluvun ryhmää. Varmistetaan vielä, että kaikki toimii kuvatulla tavalla - muunnetaan heksadesimaaliluku suoraan desimaaliluvuksi seuraavasti: F5B9E1 muunnetaan desimaaliluvuksi seuraavasti: 15* * * * * *16 0 Joka on siis: Ja tämähän on sama kuin alkuperäinen binäärinen luku muunnettuna desimaaliluvuksi:

6 C++ Ohjelmoijan käsikirja Negatiiviset binääriluvut Binäärisissä laskutoimituksissa tulee huomioida myöskin toinen puoli: negatiiviset luvut. Tähän saakka olemme olettaneet, että kaikki luvut ovat positiivisia, joten optimistisesti ajatellen olemme jo puolivälissä. Mutta emme voi välttää elämän negatiivista puolta - pessimistisesti ajatellen olemme vasta puolivälissä. Miten negatiiviset luvut esitetään tietokoneessa? No meillähän ei ole käytössä kuin binääriluvut, joten niillähän nekin täytyy esittää. Sellaisten numeroiden kohdalla, joilla haluamme esittää myöskin negatiivisia arvoja (kutsutaan myös termillä etumerkillinen luku), pitää ensin päättää kiinteä pituus (toisin sanoen, bittien lukumäärä) ja määritellä vasemmanpuoleisin bitti merkkibitiksi. Pituus pitää kiinnittää, koska muutoin sekoittaisimme, mikä bitti on merkkibitti. Koska tietokoneesi muisti koostuu 8-bitin tavuista, binääriluvut talletetaan 8-bitin kerrannaisiin (yleensä kaksi potenssiin x). Eli käytössä voi olla 8-bittisiä numeroita, 16-bittisisä numeroita tai minkä mittaisia tahansa, kunhan aina tiedämme pituuden kussakin tapauksessa. Näin löydämme aina merkkibitin - vasemmanpuoleisimman bitin. Jos merkkibitti on 0, luku on positiivinen, ja jos se on 1, luku on negatiivinen. Tämä näyttäisi ratkaisevan ongelmamme, mutta tosiasiassa näin ei vielä aivan ole. Kun suoritamme kahden kokonaisluvun yhteenlaskun, emme halua, että tietokoneen pitää erikseen tarkistaa, onko jompi kumpi tai molemmat luvut negatiivisia. Haluamme yksinkertaisesti käyttää samaa piiriä kaikenlaisten lukujen kohdalla. Jos lisäämme lukuun +12 luvun -8, haluamme saada vastaukseksi +4. Jos kokeilemme tätä yksinkertaistetulla ratkaisutavallamme, jossa positiivisen luvun merkkibitti asetetaan ykköseksi ja näin saadaan negatiivinen luku, ja suoritamme laskutoimituksen normaaleilla siirtymillä, emme saa oikeaa tulosta: 12 binäärisenä on oletamme, että -8 on binäärisenä Kun laskemme nämä yhteen, saamme: Tämä näyttäisi olevan -20, mitä emme todellakaan halunneet vastaukseksi. Se ei todellakaan ole +4, jonka tiedämme olevan Voi voi, emmekö voikaan kohdella merkkibittiä kuten tavallista bittiä. Haluamme kuitenkin näin tehdä, joten tarvitsemme toisenlaisen merkintätavan negatiivisille luvuille. Katsotaan, miten tietokone haluaisi meidän esittävän luvun -8. Yritetään ensin vähentää +12 luvusta +4, koska se antaa meille oikean vastauksen: +4 binäärisenä on binäärisenä on Ja vähennyslaskun lopputuloksena saadaan

7 Perustietotyypit ja laskutoimitukset Neljännestä numerosta oikealta päin laskettuna alkaen meidän piti aina lainata 1 voidaksemme suorittaa vähennyslaskun, kuten meidän olisi pitänyt toimia normaalin desimaalisenkin laskutoimituksen yhteydessä. Tämän tuloksen oletetaan olevan -8, ja vaikka se ei siltä näytäkään, se kuitenkin on -8. Kokeile lisäämällä se esimerkiksi lukuihin +12 ja +15, niin huomaat, että se toimii! Miten saimme tuloksen tarkasti ottaen aikaan, kun vähensimme 12 luvusta 4? Näyttää siltä, että meillä on nyt käytössä negatiivisten binäärilukujen kahden komplementti -esitysmuoto. Älä vielä tässä vaiheessa ihmettele, miten tämä oikein toimii. Käsitellään aivan kohta, miten kahden komplementti muodostetaan positiivisesta luvusta ja voit tällöin todeta, että kaikki toimii. Palataan takaisin edelliseen esimerkkiimme, jossa tarvitsemme kahden komplementtia luvusta -8. Lähdemme liikkeelle luvusta +8 binäärisenä: Muutamme nyt kaikki bitit käänteisiksi, eli ykköset nolliksi ja päinvastoin: Tätä kutsutaan yhden komplementiksi ja jos nyt lisäämme siihen luvun 1, saamme kahden komplementin: Tämähän on aivan sama muoto luvusta -8 kuin saimme vähennyslaskulla Jotta olisimme aivan varmoja, suoritetaan alkuperäinen yhteenlaskumme: +12 binäärisenä on Uusi versiomme luvusta -8 on Ja laskutoimituksen tuloksena saame: Tulos on 4 - hienoa, se toimii! Siirto muuttaa kaikki vasemmanpuoleiset bitit takaisin nolliksi. Viimeisin siirto häviää luvun ulkopuolelle, mutta siitä ei tarvitse välittää. Itse asiassa tässä oletamme, että merkkibitti, 1 tai 0, jatkuu loputtomasti vasemmalle päin. Kokeile muutamaa omaa esimerkkiäsi; huomaat, että tämä toimii aina ja automaattisesti. Todellinen etu tästä on, että se tekee laskutoimitukset tietokoneelle erittäin helpoiksi (ja nopeiksi). Nyt kun olemme käsitelleet binääriset ja heksadesimaaliset luvut, palataan C++:n kokonaislukuliteraalivakioihin. Heksadesimaaliset kokonaislukuliteraalivakiot Edellisissä esimerkeissä kokonaislukuliteraalivakiot olivat desimaalisia, mutta voit myöskin käyttää heksadesimaalisia kokonaislukuja. Ilmoitat, että olet kirjoittamassa heksadesimaalista lukua lisäämällä luvun eteen 0x tai 0X. Eli jos kirjoitat 0x999, olet kirjoittamassa heksadesimaalista lukua. Pelkkä 999 on siis desimaalinen luku. Seuraavassa on joitakin esimerkkejä kokonaislukuliteraalivakioista kirjoitettuna heksadesimaalisina: 37

8 C++ Ohjelmoijan käsikirja Heksadesimaalinen Vastaava desimaalinen Desimaalinen 0x1AF 1* * * x123 1* * * xA 10* xCAD 12* * * xFF 15* * Luvussa 1 käytimme heksadesimaalisia lukuja koodinvaihtomerkkeinä, jotka määrittelivät merkkejä. Se, mitä käsittelemme nyt tässä, on eri asia - määrittelemme kokonaislukuja. Palaamme merkkimuotoisten literaalivakioiden määrittelyyn myöhemmin tässä luvussa. Oktaaliset kokonaislukuliteraalivakiot Voit myöskin kirjoittaa kokonaislukuja oktaalisina, eli käyttäen 8-kantaisia lukuja. Ilmoitat luvun olevan oktaalisen kirjoittamalla luvun eteen nollan. Seuraavassa taulukossa on esimerkkejä oktaalisista luvuista: Oktaaliluku Vastaava desimaalinen Luonnollisesti oktaaliluvun yksi numero voi esittää vain arvot 0-7. Oktaalilukuja käytetään nykyään varsin harvoin ja niiden käyttömahdollisuus on säilytetty C++:ssa pääasiassa historiallisista syistä. Tästä huolimatta on tärkeää tietää niiden olemassaolosta, koska jos vahingossa kirjoitat desimaaliluvun eteen nollan, kääntäjä yrittää tulkita luvun oktaalilukuna. Älä kirjoita desimaalisten kokonaislukujen eteen nollaa. Kääntäjä tulkitsee tällaiset luvut oktaalisiksi (8-kantaisiksi). Eli luku kirjoitettuna 065 tarkoittaa desimaalista lukua 53. Kääntäjä ei millään tavalla välitä siitä, minkälaisena kokonaisluvun kirjoitat - luku talletetaan tietokoneeseen binäärisenä. Eri kirjoitustavat ovat olemassa, jotta voit kirjoittaa luvut haluamallasi tavalla. Voit kirjoittaa kokonaislukuarvon 15 seuraavilla tavoilla: 15, 0xF tai 017. Kaikkien näiden tuloksena on sama binäärinen luku, joten voit vapaasti valita kuhunkin tilanteeseen parhaimmin sopivan esitystavan. 38

9 Kokonaislukulaskenta Peruslaskutoimitukset, jotka voit suorittaa kokonaisluvuille, ovat: Perustietotyypit ja laskutoimitukset Operaattori Operaatio + Yhteenlasku - Vähennyslasku * Kertolasku / Jakolasku % Jakojäännös (jakolaskun jälkeen) Nämä laskutoimitukset toimivat suurelta osin niin kuin odottaa saattaakin. Huomaa, että ne ovat kaikki binäärisiä operaattoreita. Jakolaskuoperaattori on hieman erikoinen, joten käsitellään sitä ensin. Koska kokonaislukuoperaatioiden tuloksena on aina kokonaisluku, lausekkeen kuten 11/4 arvona ei ole 2.75, vaan 2. Kokonaislukujen jakolaskun tuloksen on kuinka monta kertaa jakaja sisältyy jaettavaan. Jakojäännös yksinkertaisesti jätetään huomiotta. Kokonaislukujen jakolasku 11/4 2 kertaa 4, jäännös 3 Tulos = 2 Hylätään Jakojäännös-operaattori 11%4 2 kertaa 4, jäännös 3 Hylätään Tulos = 3 Jakojäännös operaattori % täydentää jakolaskuoperaattoria, koska sen avulla saa selville jakolaskussa syntyvän jakojäännöksen. Lausekkeen 11%4 tuloksena on arvo 3, joka on jakojäännös, kun 11 jaetaan luvulla 4. Tarkastellaan seuraavassa laskutoimituksia esimerkin avulla. Kokeile itse - Kokonaislukulaskenta Seuraavassa on ohjelma, joka tulostaa erilaisten kokonaislukujen laskutoimitusten tuloksen. Tarkoituksena on selventää, miten edellä mainitut operaattorit toimivat. 39

10 C++ Ohjelmoijan käsikirja // Esimerkki Kokonaislukulaskenta #include <iostream> using namespace std; // Tulostusta varten // Nimiavaruus std int main() { cout << << endl; // Tulostaa 30 cout << 10-5 << endl; // Tulostaa 5 cout << << endl; // Tulostaa -10 } cout << 10 * 20 << endl; // Tulostaa 200 cout << 10 / 3 << endl; // Tulostaa 3 cout << 10 % 3 << endl; // Tulostaa 1 cout << / 10-5 << endl; // Tulostaa 7 cout << ( ) / (10-5) << endl; // Tulostaa 6 cout << / (10-5) << endl; // Tulostaa 14 cout << ( ) / 10-5 << endl; // Tulostaa -2 cout << 4 * 5 / 3 % / 3 << endl; // Tulostaa 4 return 0; // Ohjelma päättyy Ohjelman tulostuksena on: Tämä ei näytä kovinkaan hienolta, koska lukujen oikea reuna ei ole tasattu. Tämä johtuu kokonaislukujen oletusarvoisesta tulostustavasta. Palaamme tulostuksen ulkonäön parantamiseen hetken päästä. Kuinka se toimii Kukin lause suorittaa laskutoimituksen ja tulostaa tuloksen näytölle. Tuloksen perään tulostetaan rivinvaihtomerkki, mikä siirtää kohdistimen seuraavan rivin alkuun. Kaikki esimerkin lausekkeet ovat vakiolausekkeita, koska kääntäjä pystyy määrittelemään ne täydellisesti jo ennen ohjelman suoritusta. Ensimmäiset kuusi lausetta ovat varsin selkeitä ja sen miksi ne tuottavat edellä mainitut arvot, pitäisi olla varsin selvä: 40

11 cout << << endl; // Tulostaa 30 cout << 10-5 << endl; // Tulostaa 5 cout << << endl; // Tulostaa -10 Perustietotyypit ja laskutoimitukset cout << 10 * 20 << endl; // Tulostaa 200 cout << 10 / 3 << endl; // Tulostaa 3 cout << 10 % 3 << endl; // Tulostaa 1 Ainoastaan viimeiset kaksi riviä vaativat lisäkäsittelyä. Koska kokonaislukuoperaatioiden tuloksena on kokonaislukuja, lausekkeen 10/3 tuloksena on 3, koska kolme sisältyy lukuun 10 kolme kertaa. Jakojäännös 1 jätetään huomiotta. Viimeinen rivi selventää %-operaattoria, jonka tuloksena on jakojäännös. Seuraavat neljä lausetta näyttävät, kuinka sulkeita käytetään: cout << / 10-5 << endl; // Tulostaa 7 cout << ( ) / (10-5) << endl; // Tulostaa 6 cout << / (10-5) << endl; // Tulostaa 14 cout << ( ) / 10-5 << endl; // Tulostaa -2 Sulkeilla muutetaan operaattoreiden luonnollista suoritusjärjestystä. Sulkeiden sisällä olevien lausekkeiden arvo lasketaan aina ensin, alkaen kaikkein sisimmistä sulkeista kaikkein uloimpiin päin. Lausekkeissa, joissa on useita erilaisia operaattoreita, niiden suoritusjärjestys määritellään siten, että tietyt operaattorit suoritetaan ennen jotain toista operaattoria. Tätä prioriteettia kutsutaan operaattoreiden suoritusjärjestykseksi. Käsittelemiemme kokonaislukuoperaattoreiden kohdalla operaattorit *, / ja % muodostavat ryhmän, joiden prioriteetti on suurempi kuin operaattoreiden + ja -, jotka muodostavat toisen ryhmän. Voidaan sanoa, että operaattorit *, / ja % ovat suoritusjärjestyksessä ennen operaattoreita + ja -. Tietyn ryhmän operaattorit - kuten + ja - - ovat suoritusjärjestyksessä samanarvoiset. Esimerkin viimeinen lause selventää, kuinka operaattoreiden suoritusjärjestys määrää, missä järjestyksessä operaattorit suoritetaan: cout << 4 * 5 / 3 % / 3 << endl; // Tulostaa 4 Operaattori + on suoritusjärjestyksessä kaikkein alimmassa ryhmässä, joten se suoritetaan viimeisenä. Tämä tarkoittaa, että alilausekkeet 4*5/3%4 ja 7/3 lasketaan ensin. Alilausekkeen 4*5/3%4 kaikki operaattorit ovat samanarvoisia, joten niiden suoritusjärjestys määräytyy laskemissuunnan mukaan. Tietyn operaattoriryhmän laskemissuunta voi olla joko vasen tai oikea. Operaattori, joka on vasemmalta laskettava, sidotaan ensin operaattorin vasemmalla puolella olevaan operandiin, joten tällaiset operaattorit suoritetaan vasemmalta oikealle. Havainnollistetaan tätä esimerkkimme avulla. Lausekkeen 4*5/3%4 kaikkien operaattoreiden laskemissuunta on vasen. Tämä tarkoittaa sitä, että kunkin operaattorin vasen operandi on se mikä on operaattorin vasemmalla puolella. Eli kertolaskun vasen operandi on 4, jakolaskun vasen operandi on 4*5 ja jakojäännöksen vasen operandi on 4*5/3. Lausekkeen arvo lasketaan siis ((4*5)/3)%4 - mikä on, kuten sanottu, vasemmalta oikealle. Lausekkeen operaattoreiden suoritusjärjestyksen määrää operaattoreiden laskemissuunta saman ryhmän sisällä. Tämä ei sano mitään operandeista. Esimerkiksi lausekkeessamme 4*5/3%4+7/3 ei ole määritelty, suoritetaanko alilauseke 4*5/3%4 ennen alilauseketta 7/3, tai päinvastoin. Se voi olla kumpi tahansa, kääntäjä määrää tämän järjestyksen. Voit ajatella, että mitä väliä sillä on, 41

12 C++ Ohjelmoijan käsikirja koska se ei vaikuta lopputulokseen. Tässä tapauksessa näin onkin: sillä, kumpi yhteenlaskun operandeista lasketaan ensin, ei ole merkitystä. Mutta saattaa olla tilanteita, joissa sillä on merkitystä. Näemme tällaisia tilanteita jatkossa. Lähes kaikki operaattoriryhmät ovat C++:ssa vasemmalta laskettavia, joten useimmat saman suoritusjärjestystason lausekkeet suoritetaan vasemmalta oikealle. Ainoat oikealta laskettavat operaattorit ovat unaariset operaattorit, joita olemme jo käsitelleetkin, sekä sijoitusoperaattori, jota käsittelemme myöhemmin. Seuraavassa taulukossa on kokonaislukulaskutoimitusten suoritusjärjestys ja laskemissuunta. Taulukosta näet lausekkeiden suoritusjärjestyksen: Operaattori Laskemissuunta unaarinen + - oikea * / % vasen + - vasen Jokainen taulukon rivi on ryhmä operaattoreita, joiden suoritusjärjestys on sama. Ryhmät on järjestetty siten, että ylimmällä rivillä on suoritusjärjestyksessä ensimmäiset operaattorit. Koska taulukossa on vain kolme riviä, se on varsin yksinkertaistettu, mutta lisäämme tähän taulukkoon rivejä, kun käsittelemme uusia operaattoreita. Jos haluat jo nyt tutustua kaikkien C++:n operaattoreiden suoritusjärjestykseen, löydät taulukon liitteestä D. Tulostuksen ulkoasun muotoilu Esimerkkimme tulostus oli oikealle tasattu, vaikka se ei siltä oikein näyttänytkään. Epätasainen oikea reuna johtui kuitenkin siitä, että kukin kokonaisluku tulostetaan kenttään, jonka leveys on tarkalleen luvun merkkien lukumäärä. Voimme muuttaa kentän leveyden kunkin luvun kohdalla seuraavasti: // Esimerkki 2.1A - Tulostuksen ulkoasun muotoilu #include <iostream> // Näytölle tulostusta varten #include <iomanip> // Muokkausfunktioita varten using namespace std; // Nimiavaruus std int main() { cout << setw(10) << << endl; // Tulostaa 30 cout << setw(10) << 10-5 << endl; // Tulostaa 5 cout << setw(10) << << endl; // Tulostaa cout << setw(10) << 10 * 20 << endl; // Tulostaa 200 cout << setw(10) << 10 / 3 << endl; // Tulostaa 3 cout << setw(10) << 10 % 3 << endl; // Tulostaa 1 cout << setw(10) << / 10-5 << endl; // Tulostaa 7 cout << setw(10) << ( ) / (10-5) << endl; // Tulostaa 6

13 Perustietotyypit ja laskutoimitukset } cout << setw(10) << / (10-5) << endl; // Tulostaa 14 cout << setw(10) << ( ) / 10-5 << endl; // Tulostaa - 2 cout << setw(10) << 4 * 5 / 3 % / 3 << endl; // Tulostaa 4 return 0; // Ohjelma päättyy Nyt tulostus näyttää seuraavalta: Kuinka se toimii Tämä näyttää paljon paremmalta vai mitä? Parempi ulkoasu saadaan aikaan muutoksella itse tulostuslauseessa. Kunkin tulostettavan luvun eteen on lisätty setw(10), kuten ensimmäisessä lauseessa: cout << setw(10) << << endl; // Tulostaa 30 Funktion kutsua setw() kutsutaan muokkausfunktioksi, koska sen avulla voit muokata, tai kontrolloida, tulostuksen ulkonäköä. Muokkausfunktio ei tulosta mitään; se vain muokkaa tulostusprosessia. Sen vaikutuksesta seuraavaksi tulostettava arvo tulostetaan sulkeiden sisällä olevan luvun osoittaman levyisessä kentässä. Eli tässä tapauksessa 10. Lisäksi täytyy ohjelman alkuun lisätä #include-esikäsittelijäkomento standardiotsikkotiedostoa iomanip varten. Tämän jälkeen setw()-muokkausfunktio on käytettävissä ohjelmassasi. Käytössäsi on muitakin muokkausfunktioita. Käytämme niitä tulevissa esimerkeissämme. Kokeile edellä ollutta esimerkkiä erilaisilla kentän leveyksillä. Muuttujien käyttö Kokonaislukuvakioiden laskutoimitukset ovat aivan hyödyllisiä, mutta varmastikin odotat C++ -ohjelmiesi olevan hieman kehittyneempiä. Jotta pääsisimme eteenpäin, täytyy jotenkin olla mahdollista tallettaa tietoja ohjelmassa. Tämä on mahdollista muuttujien avulla. Muuttuja on alue muistissa, joka tunnistetaan antamasi nimen perusteella ja johon voit tallettaa tietyntyyppistä tietoa. Muuttujan käyttöönotto vaatii siis kaksi vaihetta: sinun tulee antaa sille nimi sekä kertoa, minkä tyyppistä tietoa haluat siihen tallettaa. Tarkastellaan ensin, millaisia mahdollisuuksia meillä on muuttujien nimeämiseen. 43

14 C++ Ohjelmoijan käsikirja Muuttujien nimet Muuttujan nimi voi koostua vain isoista ja pienistä merkeistä, alaviivasta sekä numeroista 0-9. Ensimmäisen merkin tulee olla kirjain tai alaviiva. Kuten jo luvussa 1 mainittiin, ANSI-standardin mukaan muuttujan nimessä voi olla UCS-merkkejä. Suosituksena on kuitenkin, ettet käyttäisi näitä merkkejä, ellei ole aivan välttämätöntä, koska useimmat kääntäjät eivät tue tätä mahdollisuutta. Näimme joitakin esimerkkejä muuttujan nimistä luvussa 1, mutta seuraavassa on joitakin lisää: arvo kuukausipalkka Kahdeksas_pallo VAKIO_ARVO JukkaJaakko Muuttujan nimi ei voi alkaa numerolla, eli nimiä 8Pallo tai 7UP ei voi käyttää. C++ on myöskin merkkikoosta riippuva kieli, joten JukkaJaakko ja jukkajaakko ovat eri nimiä. Sellaisten muuttujien nimiä tulisi välttää, jotka alkavat alaviivalla ja heti perään isolla merkillä tai joissa on kaksi peräkkäistä alaviivaa. Tällaiset nimet on varattu kirjastojen käyttöön. Yleensä muuttujien nimien tulisi ilmaista minkälaista tietoa ne sisältävät. Esimerkiksi kengan_koko on huomattavasti informatiivisempi kuin kk - olettaen tietysti, että käsittelet tällä muuttujalla aina kengän kokoja. Huomaat pian, että haluat useimmiten käyttää muuttujan nimiä, jotka muodostuvat kahdesta tai useammasta sanasta. Näin ohjelmaasi on helpompi lukea. Yleinen tapa yhdistää kaksi sanaa on käyttää alaviivaa sanojen välissä, kuten: rivien_lukumaara palkan_lisays nykyinen_korko C++:ssa käytetään usein tapaa, jossa isolla kirjaimella alkavat sanat on säästetty luokkien nimille. (Luokat ovat käyttäjän määrittelemiä tietotyyppejä. Käyttäjän määrittelemiä tietotyyppejä käsittelemme luvussa 11.) Näin ollen Piste, Henkilo ja Ohjelma tunnistetaan heti käyttäjän määrittelemiksi tyypeiksi. Luonnollisesti voit itse käyttää millaisia nimiä haluat (kunhan ne eivät ole varattuja sanoja), mutta jos käytät nimiä, jotka todella tarkoittavat jotain ja käytät nimiä samalla tavalla kaikkien muuttujien kohdalla, ohjelmistasi tulee helppolukuisempia ja vähemmän virhealttiita. Luettelo kaikista C++:n varatuista sanoista löytyy liitteestä B. Kokonaislukumuuttujat Oletetaan, että haluamme käyttää muuttujaa pitämään kirjaa hallussamme olevien omenoiden lukumäärästä. Voimme luoda muuttujan omenoita muuttujan esittelylauseella. Muuttujan esittely Muuttujalle antamamme nimi Tämä on kommentti eikä ole osa lausetta int omenoita ; //Muuttujan omenoita esittely Tämä määrittelee minkälaista tietoa muuttuja sisältää - tässä tapauksessa kokonaisluvun Puolipiste päättää lauseen 44

15 Perustietotyypit ja laskutoimitukset Lausetta kutsutaan esittelyksi, koska se esittelee nimen omenoita. Jokainen lause, joka esittelee nimen ohjelmaasi, on tämän nimen esittely. Edellä oleva lause on myöskin määrittely, koska se varaa muistia muuttujalle omenoita. Myöhemmin näemme lauseita, jotka ovat esittelyjä, mutta eivät määrittelyjä. Muuttuja luodaan sen määrittelyllä, joten voit viitata muuttujaan vasta määrittelyn jälkeen. Jos yrität viitata muuttujaan ennen sen määrittelyä, kääntäjä ilmoittaa virheestä. Kun määrittelemme muuttujan, voimme antaa sille myöskin alkuarvon. Esimerkiksi: int omenoita = 10; // Muuttujan omenoita määrittely Tämä määrittelee muuttujan omenoita ja antaa sille alkuarvon 10. Kuvassa olleessa määrittelyssä ei annettu lainkaan alkuarvoa, joten muuttujalle varattu muistialue sisältää mitä tahansa roskaa, jota tässä muistialueessa oli viimeksi säilytetty. Roskien säilyttäminen ohjelman muuttujissa ei ole suotavaa, joten voimme muotoilla ensimmäisen kultaisen sääntömme: Alusta muuttujan arvo määrittelyn yhteydessä. Jos et tiedä, minkä arvon muuttuja tulee saamaan, alusta se määrittelyssä nollaksi. Kokeillaan kokonaislukumuuttujia seuraavassa esimerkkiohjelmassa. Kokeile itse - Kokonaislukumuuttujien käyttö Seuraavassa on ohjelma, joka selventää, kuinka omenamme voidaan jakaa tasan ryhmälle lapsia: // Esimerkki Kokonaislukumuuttujien käyttö #include <iostream> using namespace std; int main() { int omenoita = 10; int lapsia = 3; // Näytölle tulostusta varten // Muuttujan omenoita määrittely // Muuttujan lapsia määrittely // lasketaan omenien lukumäärä kullekin cout << endl // Aloitetaan uusi rivi << "Kukin lapsi saa " // Tulostetaan ensin hieman << omenoita / lapsia // Tulostetaan omenien määrä kullekin << " omenaa."; // Tulostetaan lisää // Lasketaan ylijääneiden lukumäärä cout << endl // Aloitetaan uusi rivi << "Yli jäi " // Tulostetaan ensin hieman << omenoita % lapsia // Tulostetaan ylijääneiden määrä << " omenaa."; // Tulostetaan lisää } cout << endl; return 0; // Ohjelman loppu 45

16 C++ Ohjelmoijan käsikirja Esimerkissä on käytetty varsin runsaasti kommentteja, jotka selventävät kunkin kohdan. Normaalisti et varmastikaan kommentoi näin itsestään selviä asioita. Ohjelma tulostaa seuraavaa: Kukin lapsi saa 3 omenaa. Yli jäi 1 omenaa. Kuinka se toimii Tämä esimerkki ei varmastikaan kuormita aivosolujasi liikaa. Ensimmäiset kaksi lausetta funktiossa main() määrittelee muuttujat omenoita ja lapsia: int omenoita = 10; int lapsia = 3; // Muuttujan omenoita määrittely // Muuttujan lapsia määrittely Muuttujan omenoita alkuarvoksi asetetaan 10 ja muuttujan lapsia alkuarvoksi asetetaan 3. Jos olisimme halunneet, olisimme voineet määritellä molemmat muuttujat yhdessä lauseessa, kuten seuraavassa: int omenoita = 10, lapsia = 3; Tämä lause määrittelee sekä muuttujan omenoita että muuttujan lapsia int-tyyppisiksi ja asettaa niille alkuarvot kuten edelläkin. Pilkulla erotetaan määriteltävät muuttujat ja koko lause päättyy puolipisteeseen. Tähän lauseeseen ei ole kovinkaan helppo lisätä kommentteja, mutta voimme jakaa lauseen kahdelle riville: int omenoita = 10, lapsia = 3; // Muuttujan omenoita määrittely // Muuttujan lapsia määrittely Pilkku erottaa yhä nämä kaksi muuttujaa ja meillä on enemmän tilaa kommenteille. Voit määritellä kuinka monta muuttujaa tahansa yhdessä lauseessa ja voit jakaa lauseen kuinka monelle riville tahansa. On kuitenkin hyvää ohjelmointityyliä pysyä yhdessä määrittelyssä yhdessä lauseessa. Seuraava lause laskee montako omenaa kukin lapsi saa: cout << endl // Aloitetaan uusi rivi << "Kukin lapsi saa " // Tulostetaan ensin hieman << omenoita / lapsia // Tulostetaan omenien määrä kullekin << " omenaa."; // Tulostetaan lisää 46 Huomaa, että tässä neljä riviä muodostaa yhden lauseen ja olemme lisänneet kommentin kunkin rivin perään. Kommentit ovat näin itse asiassa lauseen sisällä. Laskutoimituslausekkeessa käytetään jakolasku-operaattoria, jolla saadaan kunkin lapsen omenamäärä selville. Tässä lausekkeessa käytetään vain kahta määrittelemäämme muuttujaa, mutta voisit yhtä hyvin sekoittaa haluamasi määrän muuttujia ja literaalivakioita lausekkeeseen. Seuraava lause tulostaa yli jääneiden omenien lukumäärän: cout << endl // Aloitetaan uusi rivi << "Yli jäi " // Tulostetaan ensin hieman << omenoita % lapsia // Tulostetaan ylijääneiden määrä << " omenaa."; // Tulostetaan lisää

17 Perustietotyypit ja laskutoimitukset Tässä käytämme jakojäännös-operaattoria yli jääneiden omenoiden laskentaan. Tulos tulostetaan kahden merkkijonon väliin yhdessä tulostuslauseessa. Jos olisimme halunneet, olisimme voineet tulostaa kaiken tulostuksen yhdessä lauseessa. Vastakohtana tälle, olisimme voineet tulostaa kunkin merkkijonon ja lasketun arvon erillisissä lauseissa. Tässä esimerkissä käytimme muuttujiemme tyyppinä tyyppiä int, mutta käytössä on muitakin kokonaislukutyyppejä. Kokonaislukutyypit Kokonaislukumuuttujan tyyppi määrittelee, kuinka paljon muistia sille varataan ja muistimäärästä johtuen myöskin siihen talletettavan pienimmän ja suurimman arvon. Käytössä on neljä kokonaislukumuuttujan tyyppiä: Tyypin nimi char short int long Tyypillinen muistimäärä 1 tavu 2 tavua 4 tavua 4 tai 8 tavua char saattaa kuulostaa oudolta kokonaislukutyyppinä, mutta kuten huomaamme myöhemmin, sen päätarkoituksena on tallettaa merkki. Tyypit short ja long voidaan kirjoittaa myöskin short int ja long int, mutta usein kirjoitetaan vain lyhyempi muoto. Näimme jo aikaisemmin, kuinka määritellään int-tyyppinen muuttuja, ja short ja longtyyppisten muuttujien määrittely tapahtuu aivan samaan tapaan. Voit esimerkiksi määritellä ja alustaa muuttujan siementen_maara short-tyyppiseksi lauseella: short siementen_maara = 5; Kuten mainittua, olisit voinut kirjoittaa tämän myös: short int siementen_maara = 5; Vastaavasti voisit määritellä long-tyyppisen muuttujan lauseella: long maan_halkaisija = L; //Maan halkaisija metreissä Huomaa alkuarvon perässä oleva L. Tämä tarkoittaa, että se on tyyppiä long. Jos et kirjoittaisi merkkiä L alkuarvon perään, se ei haittaisi mitään, mutta on hyvä tapa käyttää samantyyppisiä alkuarvoja kuin on itse muuttujakin. Muuttujat, joiden tyyppi on short, int tai long, voivat tallettaa myöskin negatiivisia arvoja, joten voit kirjoittaa ne myös signed short, signed int ja signed long. Voit käyttää jopa varattua sanaa signed tyyppinä - se tarkoittaa signed int. Tämä ei ole kuitenkaan suositeltavaa, koska se ei ainakaan paranna ohjelmasi luettavuutta; ja onhan int lyhyempi kirjoittaakin! 47

18 C++ Ohjelmoijan käsikirja Kokonaislukumuuttuja, joka on tyyppiä 16-bittiset etumerkilliset kokonaisluvut: signed, voi tallettaa sekä negatiivisia että Minimi = Maksimi = positiivisia kokonaislukuja. unsigned-tyyppinen kokonaislukumuuttuja voi tallettaa vain positiivisia lukuja, ja varmasti hämmästyt kun Merkkibitti Merkkibitti sinulle kerrotaan, että kolme tällaista tyyppiä 16-bittiset etumerkittömät kokonaisluvut: ovat unsigned short, unsigned int ja unsigned Minimi = 0 Maksimi = long. Näitä tyyppejä käytetään yleensä sellaisten arvojen tallettamiseen, joita tarkastellaan bitteinä eikä kokonaisina lukuina. Käsittelemme tätä lisää luvussa 3, kun käsittelemme bittioperaattoreita. Bittioperaattoreilla käsittelet muuttujan yksittäisiä bittejä. Yllä olevassa kuvassa näytetään 16-bittisen etumerkillisen ja etumerkittömän -kokonaisluvun ero. Kuten olemme jo nähneet, etumerkillisten kokonaislukujen kohdalla vasemmanpuoleisin bitti ilmoittaa luvun merkin. Se on 0 positiivisille luvuille ja 1 negatiivisille. Etumerkittömien kokonaislukujen kohdalla kaikki bitit voidaan tulkita varsinaisen luvun biteiksi. Koska etumerkitön kokonaisluku tulkitaan aina positiiviseksi, sillä ei ole merkkibittiä - vasemmanpuoleisin bitti on osa lukua. Jos binäärinen esitysmuoto luvusta näyttää oudolta, palauta mieleen, että negatiiviset arvot esitetään yleensä kahden komplementissa. Kuten näimme aikaisemmin positiivisen binääriluvun muuntaminen negatiiviseksi binääriluvuksi (tai päinvastoin) kahden komplementtimuotoon tapahtuu muuttamalla kaikki bitit vastakkaisiksi ja lisäämällä luku 1. Luonnollisestikaan et voi esittää lukua bittisenä etumerkillisenä kokonaislukuna, koska sallitut arvot ovat vain Tyyppi char voi itse asiassa olla joko etumerkillinen tai etumerkitön, riippuen kääntäjästäsi. Jos haluat yhden tavun tallettavan kokonaislukuarvoja, sinun tulee eksplisiittisesti määritellä muuttuja joko signed char tai unsigned char -tyyppiseksi. Huomaa, että vaikka tyyppi char on sama kuin tyypit signed char ja unsigned char, kaikki kolme tulkitaan kuitenkin eri tyypeiksi. Luonnollisestikin sanat char, short, int, long, signed ja unsigned ovat kaikki varattuja sanoja. 48 Kokonaisluvut muistissa Muistin perusyksikkö C++:ssa on tavu. C++ tulkitsee vain, että tavu on riittävän suuri tallettamaan kaikki merkkijoukon perusmerkit, joita C++-kääntäjä käyttää. Muutoin se on määrittelemätön. Tämä mahdollistaa sen, että C++-kääntäjä voi käyttää jotain muutakin merkkijoukkoa kuin 8-bittistä ASCII-merkkijoukkoa. Mutta voit lähes aina olettaa, että merkit ovat 8-bittisiä. Kullekin kokonaislukumuuttujan tyypille varattua muistimäärää ei ole erikseen määrätty ANSI C++-standardissa. Standardissa sanotaan kuitenkin seuraavaa: char-tyyppinen muuttuja vie yhden tavun. int-tyyppinen muuttuja vie niin paljon tilaa, kuin on luonnollista laitteistoympäristölle, jossa ohjelma käännetään.

19 signed ja unsigned -versiot tyypistä vievät saman määrän tilaa. Perustietotyypit ja laskutoimitukset short-tyyppinen arvo vie vähintään yhtä paljon tilaa kuin tyyppi char; inttyyppinen arvo vie vähintään yhtä paljon tilaa kuin tyyppi short ja long-tyyppinen arvo vie vähintään yhtä paljon tilaa kuin tyyppi int. Yhdellä lauseella sanottuna tyyppi char on yhdellä tavullaan kaikkein pienin ja tyyppi long kaikkein suurin. Tyyppi int on jossain näiden kahden välimaastossa, mutta vie niin monta tavua kuin parhaiten sopii tietokoneesi kokonaislukulaskennalle. Syynä tällaiselle epämääräisyydelle on se, että tyypin int tavujen määrä kullekin tietokoneelle olisi sellainen, joka saa aikaan parhaan mahdollisen kokonaislukulaskennan suorituskyvyn. Kääntäjäsi kullekin kokonaislukutyypille käyttämä muistimäärä määrittelee myöskin talletettavien arvojen arvovälin. Seuraavassa on joitakin tyypillisiä kokonaislukumuuttujien kokoja: Tyyppi Koko (tavua) Arvoväli char unsigned char 1 0U - 255U short unsigned short 2 0U U int unsigned int 4 0U U long L L unsigned long UL Merkki U unsigned-tyyppisten muuttujien arvojen perässä tarkoittaa, että literaalivakiot ovat unsigned-tyyppisiä. Ilman U-merkkiä literaalivakiot määrittelisivät etumerkillisen kokonaisluvun. Voit myöskin käyttää pientä u-merkkiä ilmoittamaan, että kokonaisluku on unsigned-tyyppinen. Samaan tapaan on 8-tavuisen kokonaisluvun arvon perään kirjoitettu L. Tämä ilmoittaa luvun olevan tyyppiä long. Kaikki kokonaisluvut, joiden perässä on iso tai pieni L talletetaan longtyyppisenä. Jos määrittelet kokonaisluvun ilman L-kirjainta, se talletetaan int-tyyppisenä - ellei se ole int-tyypin arvoalueen ulkopuolella, jolloin se talletetaan long-tyyppisenä. Jos sen arvo on long-tyypin arvoalueen ulkopuolella, kääntäjän pitäisi antaa virheilmoitus. Muista, että kunkin kokonaislukutyypin arvoalue riippuu kääntäjästäsi. Taulukossa oli tyypilliset arvoalueet, mutta kääntäjäsi voi aivan hyvin varata jonkin muunkin muistimäärän. Sijoitusoperaattori Voimme tallettaa laskutoimituksen tuloksen muuttujaan käyttämällä sijoitusoperaattoria =. Katsotaan esimerkkiä. Oletetaan, että määrittelemme kolme muuttujaa seuraavilla lauseilla: int hedelmia = 0; 49

20 C++ Ohjelmoijan käsikirja int omenia = 10; int appelsiineja = 6; Voimme laskea hedelmien kokonaismäärän lauseella: hedelmia = omenia + appelsiineja; Tässä lauseessa lasketaan ensin =-operaattorin oikealla puolella olevan lausekkeen arvo, omenien ja appelsiinien summa, joka sitten talletetaan =-operaattorin vasemmalla puolella olevaan muuttujaan hedelmia. Lähes sanomattakin lienee selvää, että sijoitusoperaattorin oikealla puolella oleva lauseke voi olla niin monimutkainen kuin vain tarvitset. Jos olisimme määritelleet muuttujat poikia ja tyttoja, voisimme laskea, kuinka monta hedelmää kukin lapsi saisi jakamalla kokonaismäärän lapsilla lauseella: int hedelmia_per_lapsi = 0; hedelmia_per_lapsi = (omenia + appelsiineja) / (poikia + tyttoja); Huomaa, että olisimme voineet myöskin määritellä muuttujan hedelmia_per_lapsi ja alustaa sen samalla kertaa: int hedelmia_per_lapsi = (omenia + appelsiineja) / (poikia + tyttoja); Muuttujan alkuarvon voi asettaa millaisella tahansa lausekkeella, kunhan kaikki lausekkeessa esiintyvät muuttujat on määritelty. Kokeile itse - Sijoitusoperaattorin käyttö Seuraavassa on yhdistetty edellä esitettyjä koodinpaloja ohjelmaksi: // Esimerkki 2.3 Sijoitusoperaattorin käyttö #include <iostream> using namespace std; // Näytölle tulostusta varten int main() { int omenia = 10; int appelsiineja = 6; int poikia = 3; int tyttoja = 4; int hedelmia_per_lapsi = (omenia + appelsiineja) / (poikia + tyttoja); cout << endl << "Kukin lapsi saa " << hedelmia_per_lapsi << " hedelmää."; 50 } cout << endl; return 0;

811120P Diskreetit rakenteet

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

Lisätiedot

815338A Ohjelmointikielten periaatteet Harjoitus 3 vastaukset

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

Lisätiedot

815338A Ohjelmointikielten periaatteet Harjoitus 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

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

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

Digitaalitekniikan matematiikka Luku 10 Sivu 1 (14) Lukujärjestelmämuunnokset. 2 s s

Digitaalitekniikan matematiikka Luku 10 Sivu 1 (14) Lukujärjestelmämuunnokset. 2 s s Digitaalitekniikan matematiikka Luku 10 Sivu 1 (14) k 10 2 10 2 s 10 10 8 10 16 10 2 10 2 s 2 8 8 2 2 16 16 2 Digitaalitekniikan matematiikka Luku 10 Sivu 2 (14) Johdanto Tässä luvussa perustellaan, miksi

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

Lukujärjestelmät. Digitaalitekniikan matematiikka Luku 9 Sivu 3 (26) Lukujärjestelmät ja lukujen esittäminen Fe

Lukujärjestelmät. Digitaalitekniikan matematiikka Luku 9 Sivu 3 (26) Lukujärjestelmät ja lukujen esittäminen Fe Digitaalitekniikan matematiikka Luku 9 Sivu 3 (26) Lukujärjestelmät ja lukujen esittäminen.9.2 Fe Lukujärjestelmät Kymmen- eli desimaalijärjestelmä: kantaluku perinteisesti käytetty ja tuttu numerot,,

Lisätiedot

Ohjelmoinnin peruskurssi Y1

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

Lisätiedot

Ohjelmoijan binaarialgebra ja heksaluvut

Ohjelmoijan binaarialgebra ja heksaluvut Paavo Räisänen Ohjelmoijan binaarialgebra ja heksaluvut www.ohjelmoinaan.net Tätä opasta saa vapaasti kopioida, tulostaa ja levittää ei kaupallisissa tarkoituksissa. Kuitenkaan omille nettisivuille opasta

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

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

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

Lisätiedot

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

C = P Q S = P Q + P Q = P Q. Laskutoimitukset binaariluvuilla P -- Q = P + (-Q) (-Q) P Q C in. C out

C = P Q S = P Q + P Q = P Q. Laskutoimitukset binaariluvuilla P -- Q = P + (-Q) (-Q) P Q C in. C out Digitaalitekniikan matematiikka Luku ivu (2).9.2 Fe C = Aseta Aseta i i = n i > i i i Ei i < i i i Ei i i = Ei i i = i i -- On On On C in > < = CI CO C out -- = + (-) (-) = + = C + Digitaalitekniikan matematiikka

Lisätiedot

LAUSEKKEET JA NIIDEN MUUNTAMINEN

LAUSEKKEET JA NIIDEN MUUNTAMINEN LAUSEKKEET JA NIIDEN MUUNTAMINEN 1 LUKULAUSEKKEITA Ratkaise seuraava tehtävä: Retkeilijät ajoivat kahden tunnin ajan polkupyörällä maantietä pitkin 16 km/h nopeudella, ja sitten vielä kävelivät metsäpolkua

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

Merkitse kertolasku 3 3 3 3 potenssin avulla ja laske sen arvo.

Merkitse kertolasku 3 3 3 3 potenssin avulla ja laske sen arvo. 13 Luvun potenssi Kertolasku, jonka kaikki tekijät ovat samoja, voidaan merkitä lyhyemmin potenssin avulla. Potenssimerkinnässä eksponentti ilmaisee, kuinka monta kertaa kantaluku esiintyy tulossa. Potenssin

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

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

Moduli 4: Moniulotteiset taulukot & Bittioperaatiot

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

Lisätiedot

Sisällys. 6. Muuttujat ja Java. Muuttujien nimeäminen. Muuttujien nimeäminen. salinovi tai syntymapaiva

Sisällys. 6. Muuttujat ja Java. Muuttujien nimeäminen. Muuttujien nimeäminen. salinovi tai syntymapaiva Sisällys 6. Muuttujat ja Java Muuttujien nimeäminen. Muuttujan tyypin määritys. Javan tietotyypit: Kokonais- ja liukuluvut. boolean- ja char-tyypit. Tyyppien yhteensopivuus. Viitetietotyypit ja merkkijonotietotyyppi

Lisätiedot

6. Muuttujat ja Java 6.1

6. Muuttujat ja Java 6.1 6. Muuttujat ja Java 6.1 Sisällys Muuttujien nimeäminen. Muuttujan tyypin määritys. Javan tietotyypit: Kokonais- ja liukuluvut. boolean- ja char-tyypit. Tyyppien yhteensopivuus. Viitetietotyypit ja merkkijonotietotyyppi

Lisätiedot

ANSI/IEEE Std

ANSI/IEEE Std Digitaalitekniikan matematiikka Luku 9 Sivu 1 (26) Lukujärjestelmät ja lukujen esittäminen ANSI/IEEE Std 754-2008 0 1 0 1 1 0 0 0 B = Σ B i 2 i Digitaalitekniikan matematiikka Luku 9 Sivu 2 (26) Johdanto

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

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python Ohjelmoinnin perusteet Y Python T-106.1208 28.1.2009 T-106.1208 Ohjelmoinnin perusteet Y 28.1.2009 1 / 28 Esimerkki: murtoluvun sieventäminen Kirjoitetaan ohjelma, joka sieventää käyttäjän antaman murtoluvun.

Lisätiedot

finnish BOI 2015, päivä 1. Muistiraja: 256 MB. 30.04.2015

finnish BOI 2015, päivä 1. Muistiraja: 256 MB. 30.04.2015 Tehtävä: BOW Keilaus finnish BOI 0, päivä. Muistiraja: 6 MB. 30.04.0 Jarkka pitää sekä keilauksesta että tilastotieteestä. Hän on merkinnyt muistiin muutaman viimeisimmän keilapelin tulokset. Valitettavasti

Lisätiedot

Luku 8. Aluekyselyt. 8.1 Summataulukko

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

Lisätiedot

Sisällys. 6. Muuttujat ja Java. Muuttujien nimeäminen. Muuttujien nimeäminen. salinovi tai syntymapaiva

Sisällys. 6. Muuttujat ja Java. Muuttujien nimeäminen. Muuttujien nimeäminen. salinovi tai syntymapaiva Sisällys 6. Muuttujat ja Java Muuttujien nimeäminen. Muuttujan tyypin määritys. Javan tietotyypit: Kokonais- ja liukuluvut, merkit, totuusarvot. Tyyppien yhteensopivuus. Viitetietotyypit ja merkkijonotietotyyppi

Lisätiedot

6. Muuttujat ja Java 6.1

6. Muuttujat ja Java 6.1 6. Muuttujat ja Java 6.1 Sisällys Muuttujien nimeäminen. Muuttujan tyypin määritys. Javan tietotyypit: Kokonais- ja liukuluvut, merkit, totuusarvot. Tyyppien yhteensopivuus. Viitetietotyypit ja merkkijonotietotyyppi

Lisätiedot

5. Laskutoimitukset eri lukujärjestelmissä

5. Laskutoimitukset eri lukujärjestelmissä 5. Laskutoimitukset eri lukujärjestelmissä Lukujen esitykset eri lukujärjestelmissä Muunnokset lukujärjestelmien välillä Laskutoimitukset eri lukujärjestelmissä. 5.1. Muunnokset lukujärjestelmien välillä

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

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

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

Lisätiedot

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

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

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

LUKUJÄRJESTELMÄT. Kymmenjärjestelmä eli desimaalijärjestelmä. Binäärilukujärjestelmä

LUKUJÄRJESTELMÄT. Kymmenjärjestelmä eli desimaalijärjestelmä. Binäärilukujärjestelmä Ammatti-Instituutti Lukujärjestelmistä Sivu 1 (5) LUKUJÄRJESTELMÄT Kymmenjärjestelmä eli desimaalijärjestelmä Kymmenjärjestemä on meille se tutuin järjestelmä jonka tunnemme x Siinä on (10) kymmenen numeroa,

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

Ohjelmoinnin peruskurssi Y1

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

Lisätiedot

Ohjelmoinnin perusteet Y Python

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

Lisätiedot

Matematiikan tukikurssi, kurssikerta 3

Matematiikan tukikurssi, kurssikerta 3 Matematiikan tukikurssi, kurssikerta 3 1 Epäyhtälöitä Aivan aluksi lienee syytä esittää luvun itseisarvon määritelmä: { x kun x 0 x = x kun x < 0 Siispä esimerkiksi 10 = 10 ja 10 = 10. Seuraavaksi listaus

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

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

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

PERUSLASKUJA. Kirjoita muuten sama, mutta ota välilyönti 4:n jälkeen 3/4 +5^2 3

PERUSLASKUJA. Kirjoita muuten sama, mutta ota välilyönti 4:n jälkeen 3/4 +5^2 3 PERUSLASKUJA Matemaattisten lausekkeiden syöttäminen: Kirjoita ilman välilyöntejä 3/+^ 3 Kirjoita muuten sama, mutta ota välilyönti :n jälkeen 3/ +^ 3 Liiku matematiikka alueella nuolinäppäimin. Kokeile

Lisätiedot

Metropolia ammattikorkeakoulu TI00AA : Ohjelmointi Kotitehtävät 3 opettaja: Pasi Ranne

Metropolia ammattikorkeakoulu TI00AA : Ohjelmointi Kotitehtävät 3 opettaja: Pasi Ranne Seuraavista tehtävistä saatu yhteispistemäärä (max 7 pistettä) jaetaan luvulla 3.5 ja näin saadaan varsinainen kurssipisteisiin laskettava pistemäärä. Bonustehtävien pisteet jaetaan luvulla 4 eli niistä

Lisätiedot

Tietorakenteet ja algoritmit syksy Laskuharjoitus 1

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

Lisätiedot

Matematiikan tukikurssi

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

Lisätiedot

8.1 Murtoluvun määritelmä - murtoluvulla tarkoitetaan aina osaa (osia) jostakin kokonaisuudesta

8.1 Murtoluvun määritelmä - murtoluvulla tarkoitetaan aina osaa (osia) jostakin kokonaisuudesta 8. Murtoluvun määritelmä - murtoluvulla tarkoitetaan aina osaa (osia) jostakin kokonaisuudesta - oheisessa kuvassa ympyrä on jaettu kolmeen yhtä suureen osaan, joista kukin osa on yksi kolmasosa koko ympyrästä

Lisätiedot

MAB3 - Harjoitustehtävien ratkaisut:

MAB3 - Harjoitustehtävien ratkaisut: MAB - Harjoitustehtävien ratkaisut: Funktio. Piirretään koordinaatistoakselit ja sijoitetaan pisteet:. a) Funktioiden nollakohdat löydetään etsimällä kuvaajien ja - akselin leikkauspisteitä. Funktiolla

Lisätiedot

(1) refleksiivinen, (2) symmetrinen ja (3) transitiivinen.

(1) refleksiivinen, (2) symmetrinen ja (3) transitiivinen. Matematiikassa ja muuallakin joudutaan usein tekemisiin sellaisten relaatioiden kanssa, joiden lakina on tietyn ominaisuuden samuus. Tietyn ominaisuuden samuus -relaatio on ekvivalenssi; se on (1) refleksiivinen,

Lisätiedot

Matematiikassa ja muuallakin joudutaan usein tekemisiin sellaisten relaatioiden kanssa, joiden lakina on tietyn ominaisuuden samuus.

Matematiikassa ja muuallakin joudutaan usein tekemisiin sellaisten relaatioiden kanssa, joiden lakina on tietyn ominaisuuden samuus. Matematiikassa ja muuallakin joudutaan usein tekemisiin sellaisten relaatioiden kanssa, joiden lakina on tietyn ominaisuuden samuus. Matematiikassa ja muuallakin joudutaan usein tekemisiin sellaisten relaatioiden

Lisätiedot

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python Ohjelmoinnin perusteet Y Python T-106.1208 17.2.2010 T-106.1208 Ohjelmoinnin perusteet Y 17.2.2010 1 / 41 Sanakirja Monissa sovelluksissa on tallennettava rakenteeseen avain arvo-pareja. Myöhemmin rakenteesta

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

Ohjelmointi 1 C#, kevät 2014, 2. uusintatentti NIMI:

Ohjelmointi 1 C#, kevät 2014, 2. uusintatentti NIMI: ITKP102 Ohjelmointi 1 C# 13.6.2014 1 / 5 Ohjelmointi 1 C#, kevät 2014, 2. uusintatentti Tentaattori Antti-Jussi Lakanen Valitse neljä tehtävää ja vastaa niihin. Keväällä 2014 kurssin tehneille lasketaan

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

9. Vektorit. 9.1 Skalaarit ja vektorit. 9.2 Vektorit tasossa

9. Vektorit. 9.1 Skalaarit ja vektorit. 9.2 Vektorit tasossa 9. Vektorit 9.1 Skalaarit ja vektorit Skalaari on koon tai määrän mitta. Tyypillinen esimerkki skalaarista on massa. Lukumäärä on toinen hyvä esimerkki skalaarista. Vektorilla on taas suuruus ja suunta.

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

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

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

Lisätiedot

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

1 Määrittelyjä ja aputuloksia

1 Määrittelyjä ja aputuloksia 1 Määrittelyjä ja aputuloksia 1.1 Supremum ja infimum Aluksi kerrataan pienimmän ylärajan (supremum) ja suurimman alarajan (infimum) perusominaisuuksia ja esitetään muutamia myöhemmissä todistuksissa tarvittavia

Lisätiedot

Sinulle on annettu bittijono, ja tehtäväsi on muuttaa jonoa niin, että jokainen bitti on 0.

Sinulle on annettu bittijono, ja tehtäväsi on muuttaa jonoa niin, että jokainen bitti on 0. A Bittien nollaus Sinulle on annettu bittijono, ja tehtäväsi on muuttaa jonoa niin, että jokainen bitti on 0. Saat käyttää seuraavia operaatioita: muuta jokin bitti vastakkaiseksi (0 1 tai 1 0) muuta kaikki

Lisätiedot

LIITE 1 VIRHEEN ARVIOINNISTA

LIITE 1 VIRHEEN ARVIOINNISTA 1 Mihin tarvitset virheen arviointia? Mittaustuloksiin sisältyy aina virhettä, vaikka mittauslaite olisi miten uudenaikainen tai kallis tahansa ja mittaaja olisi alansa huippututkija Tästä johtuen mittaustuloksista

Lisätiedot

Tehtävä 2: Säännölliset lausekkeet

Tehtävä 2: Säännölliset lausekkeet Tehtävä 2: Säännölliset lausekkeet Kun tietokoneohjelmalla luetaan käyttäjän syötettä, olisi syöte aina syytä tarkistaa. Syötteessä voi olla vääriä merkkejä tai merkkejä väärillä paikoilla (syntaktinen

Lisätiedot

Algebralliset tietotyypit ym. TIEA341 Funktio ohjelmointi 1 Syksy 2005

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

Lisätiedot

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

Kohdissa 2 ja 3 jos lukujen valintaan on useita vaihtoehtoja, valitaan sellaiset luvut, jotka ovat mahdollisimman lähellä listan alkua.

Kohdissa 2 ja 3 jos lukujen valintaan on useita vaihtoehtoja, valitaan sellaiset luvut, jotka ovat mahdollisimman lähellä listan alkua. A Lista Aikaraja: 1 s Uolevi sai käsiinsä listan kokonaislukuja. Hän päätti laskea listan luvuista yhden luvun käyttäen seuraavaa algoritmia: 1. Jos listalla on vain yksi luku, pysäytä algoritmi. 2. Jos

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

Ratkaisut Summa on nolla, sillä luvut muodostavat vastalukuparit: ( 10) + 10 = 0, ( 9) + 9 = 0,...

Ratkaisut Summa on nolla, sillä luvut muodostavat vastalukuparit: ( 10) + 10 = 0, ( 9) + 9 = 0,... Ratkaisut 1 1. Summa on nolla, sillä luvut muodostavat vastalukuparit: ( 10) + 10 = 0, ( 9) + 9 = 0,.... Nolla, koska kerrotaan nollalla. 3. 16 15 50 = ( 8) 15 50 = (8 15) ( 50) = 1000 500 = 500 000. 4.

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

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

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

Lisätiedot

Johdatus lukuteoriaan Harjoitus 2 syksy 2008 Eemeli Blåsten. Ratkaisuehdotelma

Johdatus lukuteoriaan Harjoitus 2 syksy 2008 Eemeli Blåsten. Ratkaisuehdotelma Johdatus lukuteoriaan Harjoitus 2 syksy 2008 Eemeli Blåsten Ratkaisuehdotelma Tehtävä 1 1. Etsi lukujen 4655 ja 12075 suurin yhteinen tekijä ja lausu se kyseisten lukujen lineaarikombinaationa ilman laskimen

Lisätiedot

Toisessa kyselyssä alueella on 1 ruudussa A ja 3 ruudussa B, joten suosituin ehdokas on B.

Toisessa kyselyssä alueella on 1 ruudussa A ja 3 ruudussa B, joten suosituin ehdokas on B. A Alueet Bittimaassa järjestetään vaalit, joissa on 26 ehdokasta. Jokaisella ehdokkaalla on kirjaintunnus välillä A...Z. Bittimaa on suorakulmion muotoinen ja jaettu neliöruutuihin. Tehtäväsi on selvittää

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

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

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

Lisätiedot

Matematiikan tukikurssi

Matematiikan tukikurssi Matematiikan tukikurssi Kurssikerta 1 Määrittelyjoukoista Tarkastellaan funktiota, jonka määrittelevä yhtälö on f(x) = x. Jos funktion lähtöjoukoksi määrittelee vaikkapa suljetun välin [0, 1], on funktio

Lisätiedot

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

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

Lisätiedot

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

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

Lisätiedot

Pong-peli, vaihe Aliohjelmakutsu laskureita varten. 2. Laskurin luominen. Muilla kielillä: English Suomi

Pong-peli, vaihe Aliohjelmakutsu laskureita varten. 2. Laskurin luominen. Muilla kielillä: English Suomi Muilla kielillä: English Suomi Pong-peli, vaihe 7 Tässä vaiheessa lisäämme peliin pistelaskun. Pong-pelissä pelaaja saa pisteen kun pallo ohittaa toisen pelaajan mailan. 1. Aliohjelmakutsu laskureita varten

Lisätiedot

S: siirtää listan ensimmäisen luvun viimeiseksi V: vaihtaa keskenään listan kaksi ensimmäistä lukua

S: siirtää listan ensimmäisen luvun viimeiseksi V: vaihtaa keskenään listan kaksi ensimmäistä lukua A Lista Sinulle on annettu lista, joka sisältää kokonaisluvut 1, 2,, n jossakin järjestyksessä. Tehtäväsi on järjestää luvut pienimmästä suurimpaan käyttäen seuraavia operaatioita: S: siirtää listan ensimmäisen

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

Matematiikan tukikurssi, kurssikerta 2

Matematiikan tukikurssi, kurssikerta 2 Matematiikan tukikurssi kurssikerta 1 Relaatioista Oletetaan kaksi alkiota a ja b. Näistä kumpikin kuuluu johonkin tiettyyn joukkoon mahdollisesti ne kuuluvat eri joukkoihin; merkitään a A ja b B. Voidaan

Lisätiedot

niin järjestys on tämä: ensin kerto- ja jakolaskut vasemmalta oikealle, sen jälkeen plus- ja miinuslaskut vasemmalta oikealle.

niin järjestys on tämä: ensin kerto- ja jakolaskut vasemmalta oikealle, sen jälkeen plus- ja miinuslaskut vasemmalta oikealle. Alkeistason matikkaa Plus-, miinus-, kerto- ja jakolaskujen laskujärjestys Esim. jos pitää laskea tällainen lasku:? niin järjestys on tämä: ensin kerto- ja jakolaskut vasemmalta oikealle, sen jälkeen plus-

Lisätiedot

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

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

Lisätiedot

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

Maahan on pudonnut omenoita, ja Uolevi aikoo poimia niitä. Tiedät jokaisesta omenasta, kuinka painava se on.

Maahan on pudonnut omenoita, ja Uolevi aikoo poimia niitä. Tiedät jokaisesta omenasta, kuinka painava se on. Datatähti 2015 A: Omenat Aikaraja: 2 s Maahan on pudonnut omenoita, ja Uolevi aikoo poimia niitä. Tiedät jokaisesta omenasta, kuinka painava se on. Uolevi haluaa saada mahdollisimman monta omenaa, mutta

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

Valmistelut: Aseta kartiot numerojärjestykseen pienimmästä suurimpaan (alkeisopiskelu) tai sekalaiseen järjestykseen (pidemmälle edenneet oppilaat).

Valmistelut: Aseta kartiot numerojärjestykseen pienimmästä suurimpaan (alkeisopiskelu) tai sekalaiseen järjestykseen (pidemmälle edenneet oppilaat). Laske kymmeneen Tavoite: Oppilaat osaavat laskea yhdestä kymmeneen ja kymmenestä yhteen. Osallistujamäärä: Vähintään 10 oppilasta kartioita, joissa on numerot yhdestä kymmeneen. (Käytä 0-numeroidun kartion

Lisätiedot

Ohjelmoinnin perusteet Y Python

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

Lisätiedot

Matematiikan peruskurssi 2

Matematiikan peruskurssi 2 Matematiikan peruskurssi Tentti, 9..06 Tentin kesto: h. Sallitut apuvälineet: kaavakokoelma ja laskin, joka ei kykene graaseen/symboliseen laskentaan Vastaa seuraavista viidestä tehtävästä neljään. Saat

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

Sisällys. 3. Muuttujat ja operaatiot. Muuttujat ja operaatiot. Muuttujat ja operaatiot

Sisällys. 3. Muuttujat ja operaatiot. Muuttujat ja operaatiot. Muuttujat ja operaatiot 3. Muuttujat ja operaatiot Sisällys Muuttujat. Nimi ja arvo. Algoritmin tila. Muuttujan nimeäminen. Muuttujan tyyppi. Muuttuja ja tietokone. Operaattorit. Operandit. Arvon sijoitus muuttujaan. Aritmeetiikka.

Lisätiedot

Aiemmin opittu. Jakson tavoitteet. Ajankäyttö. Tutustu kirjaan!

Aiemmin opittu. Jakson tavoitteet. Ajankäyttö. Tutustu kirjaan! Aiemmin opittu Perusopetuksen opetussuunnitelman mukaan seuraavat lukuihin ja laskutoimituksiin liittyvät sisällöt on käsitelty vuosiluokilla 3 5: kymmenjärjestelmä-käsitteen varmentaminen, tutustuminen

Lisätiedot

NELIÖJUURI. Neliöjuuren laskusääntöjä

NELIÖJUURI. Neliöjuuren laskusääntöjä NELIÖJUURI POLYNOMIFUNKTIOT JA -YHTÄLÖT, MAA2 Tarkoittaa positiivista tai nollaa Määritelmä, neliöjuuri: Luvun a R neliöjuuri, merkitään a, on se ei-negatiivinen luku, jonka neliö (eli toiseen potenssiin

Lisätiedot

16. Ohjelmoinnin tekniikkaa 16.1

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

Lisätiedot

Tässä riisinjyvien määrät jokaisessa ruudussa on laskettava yhteen. Tällöin tuloksena on

Tässä riisinjyvien määrät jokaisessa ruudussa on laskettava yhteen. Tällöin tuloksena on 8. Luvut 8.1 Suuret luvut, summa ja kertoma Aloittakaamme shakkipelin keksimiseen liittyvällä tunnetulla tarinalla. Intian hallitsija innostui kovasti shakkipelistä, jonka yksi palatsin viisaista miehistä

Lisätiedot

Tietokonearitmetiikka

Tietokonearitmetiikka Tietokoneen rakenne Luento 6 Tietokonearitmetiikka Stallings: Ch 9 Kokonaislukuesitys Kokonaislukuaritmetiikka Liukulukuesitys Liukulukuaritmetiikka Luento 6-1 ALU: Aritmeettis-Looginen Yksikkö ALU = Aritmetic

Lisätiedot