OHJ-1100 Ohjelmointi I

Koko: px
Aloita esitys sivulta:

Download "OHJ-1100 Ohjelmointi I"

Transkriptio

1 OHJ-1100 Ohjelmointi I lukuvuosi Luentomoniste Ari Suntioinen Sisällysluettelo Sisältö OHJ-1100 Ohjelmointi I Mitä on ohjelmointi? Tietokoneen ohjelmointi Harhaluulo ohjelmoinnista Oikea malli ohjelmoinnista Algoritmit Algoritmien muodostaminen Ohjelmointikielistä Lausekielet Ohjelman tulkkaaminen Ohjelman kääntäminen Kääntäjän toiminta Ensimmäinen C++-ohjelma Lähdekoodista suoritettavaksi ohjelmaksi Editointi Emacs-editorin käytöstä Kääntäminen Virhetilanteet Varatut sanat C++-kielen varatut sanat Vastusesimerkki Perustietotyypit Lausekeet Operaattorit i Sisällysluettelo ii Laskujärjestys eli presedenssi Sitomisjärjestys eli assosioituminen Yli- ja alivuoto Celsius Fahrenheit-esimerkki while-silmukka Vertailuoperaattorit Muuttujat Painoindeksiesimerkki if-rakenne Loogiset operaattorit Kertotauluesimerkki Tulostuksen muotoilu Aliohjelmat eli proseduurit Kertotauluesimerkki hiukan toisin Määrittely vs. esittely Mistä aliohjelmat tulevat? Miksi aliohjelma on ystävä? Toisen asteen yhtälon ratkaisu-esimerkki Funktiot Mistä funktiot tulevat? Matematiikkakirjasto Miksi reaalilukuja ei saa vertailla ==- ja!=-operaattoreilla? Arvo- ja viiteparametrit Viikonpäiväesimerkki Merkkijonotietotyyppi (string) Merkkijonokirjaston funktioita Osoitelappuohjelma Lokalisaatio Sisällysluettelo iii Sanojenerotteluohjelma Merkkien käsittely locale-kirjaston avulla Lämpötilagraafiesimerkki Taulukot Taulukkoparametrit Tenttitulosesimerkki unsigned, short ja long Perustietotyyppien ääriarvot: limits-kirjasto Tietue- eli struct-tietotyypit Ohjelmointityyli Tiedon lajittelu Tiedon etsintä Tuotekoodiesimerkki Tietovirrat Tietovirrat C++:ssa Tietovirtaongelmien havaitseminen Standardivirrat cin, cout ja cerr Tietovirta funktion parametrina Salasanatiedostoesimerkki Luettelo- eli enum-tyypit switch-rakenne for-silmukka do while-silmukka break, continue ja silmukat Käskyt vs. tieto ja tieto-ohjattu ohjelmointi

2 OHJ-1100 Ohjelmointi I 1 Mitä on ohjelmointi? Ohjelmointi tarkoittaa yleisellä tasolla sitä, kun jokin systeemi, laite, ihminen tms. saadaan suorittamaan jonkun toisen antamat toimenpiteet/käskyt. Ohjelmointia on tämän määritelmän mukaan esim: tallentavan digiboksin ajastaminen, lennonjohto antaa lentäjälle lento-ohjeet, ajo-ohjeiden selittäminen pizza-taxille ja aivopesu (propaganda, mainonta?), Ohjelmoinnin kohteelta (videot, lentokapteeni jne) ohjelmointi vaatii kykyä: 1. vastaanottaa ja ymmärtää annetut ohjeet/käskyt ja 2. suorittaa ne (oikeassa) järjestyksessä. Systeemi on ohjelmoitava, jos sillä on nämä kyvyt. Usein ohjelmoitava systeemi tarvitsee käskyt erittäin tarkasti määritellyssä muodossa, jotta se pystyisi niitä noudattamaan. OHJ-1100 Ohjelmointi I 2 Käytännössä ohjelmointi koostuu vaiheista: 1. ongelman/halutun lopputuloksen ymmärtäminen, 2. ongelman ratkaisun kehittäminen ja 3. ratkaisun yksityiskohtainen selittäminen ohjelmoitavalle systeemille sen ymmärtämässä muodossa. Vaihe 2 on usein hankalin, koska se vaatii näkemystä ja tietämystä siitä, kuinka kyseinen ongelma yleensä ottaen ratkaistaan. Kuten ongelmanratkaisu yleensäkin, vaihe 2 vaatii luovuutta. Vaihe 3 taas vaatii erityistietämystä ongelman ratkaisuun käytettävästä ohjelmoitavasta systeemistä (esimerkiksi sen ymmärtämistä käskyistä jne). OHJ-1100 Ohjelmointi I 3 Tietokoneen ohjelmointi Kurssin nimessä ja tästä eteenpäin sanalla»ohjelmointi» tarkoitetaan tietokoneen ohjelmointia eli sitä prosessia, jolla tietokone saadaan suorittamaan käyttäjän (lue ohjelmoijan) haluamat toiminnot. Tietokone on ohjelmoitava systeemi (vrt. kalvo 1). Käskyt, joita nykyiset tietokoneet suoraan ymmärtävät, ovat erittäin alkeellisia (konekieli). Tyypilliset konekieliset käskyt ovat monimutkaisuudeltaan verrattavissa seuraaviin: aritmeettiset operaatiot (l. peruslaskutoimitukset), lukujen vertailu (pienempi, suurempi, yhtäsuuri), seuraavien suoritettavien käskyjen valinta riippuen vertailun tuloksesta ja luvun siirtäminen paikasta toiseen OHJ-1100 Ohjelmointi I 4 Ennen kuin mitään ongelmaa voi tietokoneella ratkaista, ratkaisu täytyy tavalla tai toisella pukea joukoksi konekielen käskyjä kaikkia ongelmia tietokoneella ei voi ratkaista. Konekieli on erittäin alkeellista hiukankin isomman ongelman selittäminen tietokoneelle pelkästään konekielellä on kohtuuttoman työlästä. On olemassa ns. korkean tason ohjelmointikieliä, joiden käskyt»tekevät enemmän» sama ongelma saadaan esitettyä pienemmässä tilassa ja vähemmällä vaivalla. Tietokoneet ymmärtävät vain omaa konekieltään ennen korkean tason kielisen ohjelman suorittamista se on ensin muutettava konekielelle. Kurssin opetuskieli C++ on korkean tason kieli. Ohjelmointikielistä lisää myöhemmin. Muunkin tyyppisiä käskyjä toki on, mutta niiden suorittamat toiminnot eivät ole merkittävästi noita monimutkaisempia.

3 OHJ-1100 Ohjelmointi I 5 Harhaluulo ohjelmoinnista Asiaan perehtymättömillä on sellainen käsitys, että ohjelmointi on sitä, kun istutaan tietokoneen ääressä ja syötetään näppäimistöltä koneelle ohjelmaa. Kun naputtelu on ohi, kone suorittaa ohjelman ongelmitta ja näyttää tarvittavan oikean tuloksen. Kun tätä käsitystä ohjelmoinnista vertaa kalvolla 2 esitettyyn yleiseen malliin, niin jotain puuttuu. Harhaluuloinen käsitys koostuu pelkästään yleisen mallin viimeisestä vaiheesta ongelmaa ei välttämättä ole ymmärretty kunnolla eikä sen ratkaisua mietitty loppuun saakka. Tämä väärä lähestymistapa johtaa ikävyyksiin: ongelmaa ei ole ymmärretty ratkaistaan väärä ongelma, ratkaisutapa virheellinen ohjelman antama lopputulos on väärä ja ohjelmaa pitää korjata hukataan aikaa ja rahaa. OHJ-1100 Ohjelmointi I 6 Tämä virheellinen käsitys on lähes kaikilla ohjelmointia aloittelevilla ja siitä kannattaa hankkiutua eroon välittömästi. Harhaluulo on erikoinen myös siksi, että se tuntuu esiintyvän vain ohjelmoinnin yhteydessä. Kaikilla muilla elämänaloilla tuottavaan työhön sisältyy aina paljon suunnittelua ja valmistelua ennen varsinaiseen työhön ryhtymistä suurempi varmuus lopputuloksen kelvollisuudesta ja hukatut resurssit (aika, raha, hermot) minimoidaan. Vaikka virheellinen lähestymistapa saattaakin toimia pienissä ohjelmointiprojekteissa, ongelman koon kasvaessa homma karkaa käsistä, jos sitä ei ole suunniteltu kunnolla. OHJ-1100 Ohjelmointi I 7 Oikea malli ohjelmoinnista Kokemus osoittaa, että seuraava kalvon 2 mallista hiukan kehittyneempi versio kuvaa onnistuneen ohjelmointiprojektin vaiheita: 1. Ongelman ratkaisuvaihe a. Analysointi ja määrittely: ymmärrä ongelma ja selvitä, mitä ratkaisun on tarkoitus tehdä. b. Yleinen ratkaisu (algoritmi): kehitä looginen sarja ohjeita, joita noudattamalla ongelmalle saadaan haluttu lopputulos. c. Tarkistus: testaa kynällä ja paperilla, että kehittämäsi algoritmi todella toimii. 2. Ratkaisun toteutusvaihe a. Konkreettinen ratkaisu: toteuta algoritmi sopivalla ohjelmointikielellä. b. Testaus: suorita ohjelmaa eri syötteillä ja vertaile tuloksia tunnettuihin oikeisiin ratkaisuihin: jos virheitä löytyy, mieti»miksi?» ja korjaa ne. OHJ-1100 Ohjelmointi I 8 3. Ylläpitovaihe a. Käyttö: käytä ohjelmaa suunniteltuun tarkoitukseen. b. Ylläpito: korjaa löytyviä virheitä ja lisää mahdollisia uusia tarvittavia ominaisuuksia. Karkea sääntö: ratkaisuvaihe/toteutusvaihe tulisi olla 50%/50%, kun vertaillaan käytettyä aikaa ja resursseja.»väärää lähestymistapaa» käyttävillä suhde on usein 10%/90% tai huonompi: ongelmaa pohdittu kahvikupin verran ja rynnätty suoraan toteuttamaan.

4 OHJ-1100 Ohjelmointi I 9 Algoritmit Algoritmi: sarja toimenpiteitä tehtävän/ongelman suorittamiseksi/ratkaisemiseksi. Esimerkiksi seuraava algoritmi esittää, kuinka neliönmuotoisesta paperiarkista taitellaan origami-pulu: OHJ-1100 Ohjelmointi I 10 Seuraava algoritmi taas kertoo, kuinka saadaan keitettyjä perunoita: Algoritmi: Keitetyt perunat 1. pese perunat 2. etsi kattila 3. laita pestyt perunat kattilaan 4. lisää kattilaan vettä kunnes perunat peittyvät 5. laita kattila levylle 6. käännä levy päälle 7. anna kiehua kunnes perunat ovat kypsiä 8. käännä levy pois päältä 9. kaada keitinvesi viemäriin Algoritmilta vaaditaan seuraavat ominaisuudet (ainakin hyvältä algoritmilta): 1. yksikäsitteinen (ei tulkittavissa väärin), 2. yksityiskohtainen (tyhmäkin osaa seurata), 3. saavuttaa tavoitteensa (eli toimii oikein), 4. määrää toimenpiteiden suoritusjärjestyksen (seuraus kohdasta 1) ja 5. sisältää äärellisen määrän toimenpiteitä (muuten tehtävä ei tulisi suoritetuksi). OHJ-1100 Ohjelmointi I 11 Kohdat 1 ja 2 ovat jossain mielessä tulkinnanvaraisia: milloin algoritmi on riittävän yksikäsitteinen ja yksityiskohtainen? Perunoidenkeittoalgoritmin yksikäsitteisyydessä on parantamisen varaa: nykyistä algoritmia joku»tyhmä» tai ilkeämielinen voisi tulkita väärin. Yksikäsitteisempi versio olisi (muutokset lihavoitu): Algoritmi: Keitetyt perunat 1. pese perunat 2. etsi riittävän suuri kattila 3. laita em. pestyt perunat em. kattilaan 4. lisää em. kattilaan vettä kunnes siellä olevat perunat juuri peittyvät 5. laita em. kattila hellan levylle 6. käännä em. levyn maksimiteho päälle 7. anna em. kattilassa olevan veden kiehua kunnes siellä olevat perunat ovat kypsiä 8. käännä em. levy pois päältä 9. kaada keitinvesi em. kattilasta viemäriin OHJ-1100 Ohjelmointi I 12 Yksityiskohtaisuuden suhteen molemmat algoritmit ovat puutteellisia. Esimerkiksi pulun nokan taittelu on sen verran hankala operaatio, että sitä kannattaisi tarkentaa:

5 OHJ-1100 Ohjelmointi I 13 Henkilö, joka ei ole koskaan kokannut, saattaisi tarvita tarkemmat ohjeet perunoiden keittämiseen: Algoritmi: Keitetyt perunat 1. pese perunat 1.1. laita tulppa tiskialtaaseen 1.2. laita perunat em. tiskialtaaseen 1.3. laske vettä em. tiskialtaaseen kunnes em. perunat peittyvät 1.4. ota juuresharja 1.5. harjaa em. perunat yksitellen \ em. juuresharjalla kunnes puhtaita 1.6. palauta em. juuresharja paikalleen 1.7. avaa em. tulppa ja laske vesi pois 2. etsi riittävän suuri kattila 2.1. avaa kattilakaapin ovi 2.2. valitse sopiva kattila 2.3. ota em. kattila 2.4. sulje em. ovi 2.5. aseta em. kattila tiskipöydälle Algoritmin loppuja kohtia 3 9 voitaisiin tarkentaa samaan tapaan. OHJ-1100 Ohjelmointi I 14 Jos algoritmi ei vieläkään ole riittävän yksityiskohtainen, niin tarkennetaan lisää: Algoritmi: Keitetyt perunat 1. pese perunat 1.1. laita tulppa tiskialtaaseen etsi tiskialtaan tulppa ota em. tulppa käteen paina em. tulppa tiiviisti em. altaan pohjassa olevaan reikään laske irti em. tulpasta Koko loppualgoritmi voitaisiin tietysti tarkentaa samaan tapaan ja niin edelleen aina vain yksityiskohtaisemmin, kunnes haluttu taso saavutetaan. OHJ-1100 Ohjelmointi I 15 Riittävä yksikäsitteisyys ja yksityiskohtaisuus ovat tulkinnanvaraisia suureita ja riippuvat tilanteesta. Aikuiselle alkuperäinen peruna-algoritmi olisi ollut riittävä, pikkulapselle luultavasti ei. Tietokoneet ovat»rajoittuneita» suunniteltaessa tietokonealgoritmeja niiden on oltava äärimmäisen yksikäsitteisiä ja yksityiskohtaisia. Usein algoritmiin liittyy ehdollisuutta ja toistoa: 1. Jonkin algoritmin osan suorittaminen saattaa riippua olosuhteista (ehdollisuus). 2. Jotain algoritmin osaa saatetaan tarvittaessa suorittaa useita kertoja peräkkäin (toisto). Peruna-algoritmissa on sekä ehdollisuutta että toistoa, joihin törmätään, jos joitain kohtia yritetään vielä entisestään yksityiskohtaistaa. OHJ-1100 Ohjelmointi I 16 Esimerkiksi haluttaessa tarkentaa algoritmin kohtaa»2. etsi kattila» törmätään ehdollisuuteen: Algoritmi: Etsi kattila 2. etsi riittävän suuri kattila 2.1. avaa kattilakaapin ovi JOS kaapin ovi on kiinni NIIN tartu kaapin kahvaan vedä ovi auki laske irti kahvasta 2.2. valitse sopiva kattila 2.3. ota kattila 2.4. sulje ovi 2.5. aseta kattila tiskipöydälle JOS tiskipöydällä on tilaa NIIN aseta kattila vapaaseen paikkaan MUUTEN raivaa tilaa kattilan verran aseta kattila raivattuun paikkaan

6 OHJ-1100 Ohjelmointi I 17 Algoritmissa ehdollisuus on siis esitetty muodossa JOS väite NIIN toimenpiteet 1 MUUTEN toimenpiteet 2 Tätä tulkitaan siten, että mikäli väite on tosi, on algoritmin toteuttamiseksi suoritettava toimenpiteet 1. Mikäli väite taas ei pidä paikkaansa, suoritetaan toimenpiteet 2. Väite voi siis periaatteessa olla mikä tahansa toteamus, kunhan siitä tavalla tai toisella voidaan päätellä, pitääkö se paikkansa vai ei. OHJ-1100 Ohjelmointi I 18 Toistoa peruna-algoritmista löytyy tarkentamalla esimerkiksi kohtaa»7. anna veden kiehua kunnes perunat ovat kypsiä»: Algoritmi: perunoiden keittäminen kypsiksi 7. anna kattilassa olevan veden kiehua kunnes siellä olevat perunat ovat kypsiä 7.1. NIIN KAUAN KUIN vesi ei kiehu odota hetki tarkasta joko vesi kiehuu 7.2. NIIN KAUAN KUIN perunat eivät ole kypsiä odota hetki ota haarukka työnnä haarukka johonkin perunaan JOS ei tuntunut vastusta NIIN totea perunat kypsiksi MUUTEN totea perunat raaoiksi laita haarukka pöydälle OHJ-1100 Ohjelmointi I 19 Eli toisto voidaan esittää algoritmissa seuraavasti: NIIN KAUAN KUIN väite toimenpiteet jota tulkitaan suoraviivaisesti siten, että toimenpiteitä toistetaan yhä uudelleen niin kauan kuin esitetty väite on tosi. Kuten aiemminkin väite saa olla mitä tahansa, jos siitä vain voidaan päätellä, onko se tosi vai epätosi. Algoritmikielessä»JOS-NIIN-MUUTEN» ja»niin KAUAN KUIN» ovat syntaktisia (l. kieliopillisia) rakenteita, joiden semantiikka (l. merkitys) on ehdollisuus ja toisto. Monista ohjelmointikielistä löytyy vastaavankaltaiset rakenteet»if-then-else» ja»while» jatkon kannalta on selvempää, jos käytämme niitä suomenkielisten rakenteiden sijaan. Tällaista ohjelmointikielen ja puhutun kielen yhdistelmää kutsutaan pseudokoodiksi ja se on erittäin hyödyllinen työkalu. OHJ-1100 Ohjelmointi I 20 Selvyyden vuoksi vielä koko perunankeittoalgoritmi (Huom! Edelleen puutteellinen): Algoritmi: Keitetyt perunat 1. pese perunat 1.1. laita tulppa tiskialtaaseen etsi tiskialtaan tulppa ota tulppa käteen paina tulppa tiiviisti altaan pohjassa olevaan reikään laske irti tulpasta 1.2. laita perunat tiskialtaaseen 1.3. laske vettä tiskialtaaseen kunnes perunat peittyvät 1.4. ota juuresharja 1.5. harjaa perunat yksitellen juuresharjalla kunnes puhtaita 1.6. palauta juuresharja paikalleen 1.7. avaa tulppa ja laske vesi pois

7 OHJ-1100 Ohjelmointi I etsi riittävän suuri kattila 2.1. avaa kattilakaapin ovi IF kaapin ovi on kiinni THEN tartu kaapin kahvaan vedä ovi auki laske irti kahvasta 2.2. valitse sopiva kattila 2.3. ota kattila 2.4. sulje ovi 2.5. aseta kattila tiskipöydälle IF tiskipöydällä on tilaa THEN aseta kattila vapaaseen paikkaan ELSE raivaa tilaa kattilan verran aseta kattila raivattuun paikkaan 3. laita pestyt perunat kattilaan 4. lisää kattilaan vettä kunnes siellä olevat perunat juuri peittyvät 5. laita kattila levylle OHJ-1100 Ohjelmointi I käännä levyn maksimiteho päälle 7. anna kattilassa olevan veden kiehua kunnes siellä olevat perunat ovat kypsiä 7.1. WHILE vesi ei kiehu odota hetki tarkasta joko vesi kiehuu 7.2. WHILE perunat eivät ole kypsiä odota hetki ota haarukka työnnä haarukka johonkin perunaan IF ei tuntunut vastusta THEN totea perunat kypsiksi ELSE totea perunat raaoiksi laita haarukka pöydälle 8. käännä levy pois päältä 9. kaada keitinvesi kattilasta viemäriin OHJ-1100 Ohjelmointi I 23 Algoritmien muodostaminen Hyväksi havaittu tapa algoritmien muodostamiseen on jäsentää kokonaisuutta pienempiin osiin pieniä kokonaisuuksia on helpompi hallita ja kokonaisuus saadaan pienistä osista yhdistämällä, kunhan osien algoritmit ovat oikein muodostettu ja liitetty toisiinsa.»hajoita ja hallitse» Idea on siis jokseenkin sama, joka esiintyi perunankeittoalgoritmia kehiteltäessä. Jäsentämistä jatketaan, kunnes osatoiminnot ovat riittävän yksinkertaisia algoritmin toiminnot ovat monimutkaisuudeltaan samalla tasolla kuin mitä algoritmin suorittava systeemi ymmärtää käskyinään. OHJ-1100 Ohjelmointi I 24 Tietämystä algoritmin suorittavasta systeemistä siis tarvitaan jo algoritmia suunniteltaessa tiedetään, milloin algoritmi on jäsennelty riittävän pitkälle, ja jäsennystä osataan ohjata oikeaan suuntaan niin, että se sopii hyvin halutun systeemin suoritettavaksi. Tietokoneelle algoritmia muodostettaessa ratkaisun kuvaus on kirjoitettava täsmällisesti ja täydellisesti, koska tietokoneelta puuttuu maalaisjärki se ei osaa päätellä epätäsmällisten ohjeiden tarkoitusta Puhuttuun kieleen verrattuna ohjelmointikielet ovat yksinkertaisia ja koska tietokoneelle tarkoitetut algoritmit täytyy aina lopulta pukea ohjelmointikieleksi, jotta ne saadaan suoritettua algoritmin oltava riittävän yksinkertaisessa muodossa, niin että se on helposti esitettävissä ohjelmointikielellä. Algoritmien muodostaminen ei ole helppoa ja sen oppiminen vaatii harjoittelua.

8 OHJ-1100 Ohjelmointi I 25 Ohjelmointikielistä OHJ-1100 Ohjelmointi I 26 Lausekielet Ohjelmointikieli on se kieli, jolla tietokoneen kanssa voidaan kommunikoida (l. kuvata algoritmit koneelle sen ymmärtämässä muodossa). Se on selkeästi analoginen puhutun kielen kanssa, mutta sangen yksinkertainen. Kaikki tietokoneet ymmärtävät pohjimmiltaan vain omaa konekieltään: sopivassa järjestyksessä koneen muistiin tallennettuja lukuja 0 ja 1 (tosiasiassa jännitetasoja). Tietyssä järjestyksessä esiintyvät nollat ja ykköset tietokone osaa tulkita alkeellisiksi käskyiksi, konekäskyiksi. Lausekielet ovat konekieltä ilmaisuvoimaisempia: niillä halutun tehtävän selittäminen tietokoneelle on helpompaa ja lopputulos ymmärrettävämpää ihmiselle. Yksi lausekielellä kirjoitettu käsky vastaa useita, jopa tuhansia, konekäskyjä. Ennen kuin tietokone voi suorittaa jollain muulla kuin sen omalla konekielellä kirjoitetun ohjelman, se täytyy tavalla tai toisella muuntaa konekieleksi: kääntäminen (compiling) tulkkaaminen (interpreting) Alunperin kaikki ohjelmointi oli puhtaasti konekielellä ohjelmointia: johtoja ja vipuja. Konekieli on kovin hankalakäyttöistä symbolinen konekieli korkean tason ohjelmointikielet (esim. lausekielet). OHJ-1100 Ohjelmointi I 27 Ohjelman tulkkaaminen OHJ-1100 Ohjelmointi I 28 Ohjelman kääntäminen Ohjelman tulkkaaminen perustuu siihen, että ohjelmointikielen tulkki suorittaa ohjelmaa käsky (lause/lauseke) kerrallaan. Etuja: ohjelma voidaan testata pala kerrallaan ja tulkki huolehtii virheilmoituksista ja auttaa virheiden etsinnässä. Ohjelman kääntäminen perustuu siihen, että ohjelmakoodi käännetään kokonaisuudessaan konekielelle erityisellä kääntäjäohjelmalla (kääntäjällä) ennen kuin se voidaan suorittaa. Etuja: syntaksi- ja semanttiset virheet havaitaan aina ja kääntäjää ei enää tarvita uudelleen. Haittoja: ohjelman suoritus vaatii aina tulkin ja ohjelmaan saattaa jäädä virheitä, jos testaus ei ole täydellinen. Haittoja: ajonaikaiset virheet jäävät yleensä ohjelmoijan hoidettavaksi, ohjelman oltava kokonaan valmis ja testaus on hankalampaa.

9 OHJ-1100 Ohjelmointi I 29 Kääntäjän toiminta OHJ-1100 Ohjelmointi I 30 Ensimmäinen C++-ohjelma Lähdekoodi Kääntäjä Käydään yksityiskohtaisesti läpi pikkuruinen C++-kielinen ohjelma: // Lähdekooditiedosto: forever.cc // // Ohjelma tulostaa näytölle lausahduksen: // " I plan to live forever // or die trying." Konekieli Kirjastot #include <iostream> using namespace std; Linkkeri Suoritettava ohjelma int main( ) { cout << " I plan to live forever" << endl; cout << " or die trying." << endl; OHJ-1100 Ohjelmointi I 31 OHJ-1100 Ohjelmointi I 32 Pienessä ohjelmassa on monta tärkeää asiaa: Teksti //-kirjainyhdistelmästä rivin loppuun on kommentti, joka ei vaikuta ohjelman toimintaan. Lähdekoodista suoritettavaksi ohjelmaksi Varsinaiset ohjelman suorittamat toiminnot ovat main:ia seuraavien aaltosulkeiden sisällä. Käskyt (lauseet) tuntuvat päättyvän ";":een. Jos C++-ohjelmassa halutaan lukea syötteitä tai kirjoittaa tulosteita, sen alkuun on lisättävä #include <iostream> ja using namespace std. cout on C++:ssa olio, johon voidaan <<-operaattorilla ohjata tulosteita, jotka sitten ilmestyvät ohjelmaa suoritettaessa näytölle. Lainausmerkkien väliin kirjoitettua tekstiä kutsutaan merkkijonoksi, mikä tarkoittaa selkokielellä tekstimuotoista tietoa. endl tulostaa rivinvaihdon: seuraavat tulostukset alkavat uudelta riviltä (sen vasemmasta laidasta). C++-ohjelman tekeminen etenee yleensä seuraavasti: 1. suunnitellun algoritmin C++-version kirjoittaminen jollain editorilla 2. tallentaminen tiedostoon, jonka nimi päättyy.cc 3. tiedoston kääntäminen C++-kääntäjällä konekielelle 4. jos tuli käännösvirheitä, niin takaisin editoriin korjaamaan ne 5. käännetyn ohjelman testaaminen, jotta nähdään, toimiiko se oikein 6. jos ei toimi oikein, niin mieti miksi ei ja palaa takaisin editoriin korjaamaan viat 7. muuten ohjelma on valmis

10 OHJ-1100 Ohjelmointi I 33 Editointi OHJ-1100 Ohjelmointi I 34 Emacs-editorin käytöstä C++-ohjelmia voi kirjoittaa millä tahansa editoriohjelmalla. Ohjelmien editointiin kannattaa kuitenkin, jos mahdollista, käyttää emacs-editoria. Kun emacs:illa käsittelee tiedostoa, jonka nimi päättyy.cc:hen, emacs menee automaattisesti C++-tilaan, joka osaa esimerkiksi sisentää ohjelmakoodin automaattisesti, kun vain painaa tabulaattorinäppäintä. Periaatteessa tällä kurssilla ei ole tarkoitus uppoutua editoriohjelman käyttöön: jonkin editorin tuntemus pitäisi jokaisella olla TiTePk:sta. Seuraavassa kuitenkin pikaopas emacs:in tärkeimpiin ominaisuuksiin. Emacsin saa käyntiin kirjoittamalla: proffa> emacs tiedosto.cc jolloin käsiteltäväksi otetaan tiedosto tiedosto.cc. Jos tiedostoa ei ennestään ole olemassa, se luodaan ensimmäisen talletuksen yhteydessä. C++-lähdekooditiedostojen nimen pitää päättyä.cc:hen, jonka myös emacs tajuaa ja menee sen seurauksena C++-tilaan, jossa on ohjelmien kirjoittamisen avuksi monenlaisia ominaisuuksia. Käynnistyttyään emacs näyttää käsiteltävän tiedoston, jota sitten voidaan muuttaa joko suoraan tekstiä kirjoittamalla tai eri näppäinyhdistelmiin sidotuilla komennoilla. Seuraavaan kerätty pikku lista hyödyllisiä emacsin näppäinyhdistelmiin sidottuja komentoja. OHJ-1100 Ohjelmointi I 35 ZYQR Nuolinäppäimillä kursorin voi liikuttaa tekstin seassa haluamaansa paikkaan. C+x C+s Tallettaa tiedoston levylle. Muista aina tallettaa tiedosto ennen kääntämistä. C+z Keskeyttää emacsin suorituksen ja hyppää proffan komentotulkkiin, jolle voi syöttää UNIXkomentoja, esimerkiksi käännöskomennon. Kun komennot on annettu, pääsee emacsiin takaisin komennolla fg: proffa> fg jolloin emacs palaa samaan tilanteeseen, missä se olic+z:aa painettaessa. C+x C+c Tappaa emacsin lopullisesti: fg-komennolla ei pääse takaisin. OHJ-1100 Ohjelmointi I 36 lineennne Kursori hyppää tiedoston riville nnn. Hyödyllinen Xxgoto..- kun halutaan päästä riville, jolla kääntäjä väitti virheen sijaitsevan. XxcompileE Mahdollistaa käännöskomennon antamisen emacsista. Ehdottaa aluksi komentoa make k, josta pääsee eroon painamalla =-näppäintä riittävän monta kertaa, jonka jälkeen voi naputella haluamansa käännöskomennon aivan, kuten UNIXkomentoriviltä. E :in painalluksen jälkeen emacs avaa uuden ikkunan ja suorittaa annetun komennon siten, että kaikki virheilmoitukset ilmestyvät uuteen ikkunaan. C+xo Siirtää kursorin emacsin ikkunasta toiseen: tällä komennolla pääsee lähdekoodi-ikkunasta virheilmoitusikkunaan ja takaisin.

11 OHJ-1100 Ohjelmointi I 37 C+c C+c Siirtymällä C+x o:lla virheilmoitusikkunaan, siellä nuolinäppäimillä virheilmoitusrivin päälle ja suorittamalla tämän komennon hyppää emacs siihen kohtaan lähdekooditiedostossa, jolla virhe sijaitsi. C+x1 Emacs sulkee kaikki muut ikkunat, paitsi, sen jossa kursori on. Tällä tavoin pääsee eroon virheilmoitusikkunasta, kunhan muistaa ensin siirtää kursorin lähdekoodi-ikkunaan. C+x b tiedostonnimi E Jos vahingossa tulee sulkeneeksi ikkunan, jossa lähdekoodi oli, saa sen haettua takaisin tällä komennolla: antaa vain tiedostonnimeksi lähdekooditiedoston nimen. T Painamalla tabulaattoria lähdekoodirivillä emacs yrittää sisentää sen siististi parhaan kykynsä mukaan. Vastuu on kuitenkin kirjoittajalla! OHJ-1100 Ohjelmointi I 38 Kääntäminen Ohjelman kääntämiseen käytämme tällä kurssilla ohj1c++-nimistä kääntäjää. ohj1c++:lle luetellaan komentorivillä kaikki C++-kieliset lähdekooditiedostot, ja se kääntää niistä suoritettavan konekielisen ohjelman: proffa> ohj1c++ forever.cc Jos ohjelma on virheetön, tuloksena syntyy ajokelpoinen ohjelma a.out, joka voidaan suorittaa kirjoittamalla sen nimi komentotulkille: proffa>./a.out I plan to live forever or die trying. a.out ei ole kuvaava nimi, mutta ohj1c++:lle voi kertoa, minkä nimisen ohjelman haluaa tuloksena: proffa> ohj1c++ o plan forever.cc proffa>./plan I plan to live forever or die trying. OHJ-1100 Ohjelmointi I 39 Virhetilanteet Periaatteessa ohjelmissa on kolmenlaisia virheitä: kielioppi- eli syntaksivirheitä, semanttisia eli»merkitysvirheitä» ja loogisia eli»ajatusvirheitä». Syntaksivirheet Syntaksivirheet ovat virheitä, jotka syntyvät, kun lähdekoodi ei ole käytetyn ohjelmointikielen kielioppisääntöjen mukaista. Esimerkiksi cout- tai return-komennon (lauseen) lopusta puuttuva ";"-merkki olisi C++:ssa syntaksivirhe. Kääntäjä löytää aina syntaksivirheet. Virheen löydyttyä kääntäjä tulostaa ilmoituksen, joka kertoo virheen syyn ja (suuntaa-antavan) rivinumeron, jolla virhe lähdekooditiedostossa sen mielestä sijaitsi. Tyypillisesti virheilmoitus alkaa sanoilla»syntax error» tai»parse error». OHJ-1100 Ohjelmointi I 40 Semanttiset virheet Semanttiset virheet syntyvät, kun ohjelmakoodi on syntaktisesti oikein, mutta kääntäjä ei silti pysty ymmärtämään sitä. Jos esimerkkiohjelmassa olisi vahingossa kirjoitettu ndl, kun oikea vaihtoehto on endl, olisi tuloksena semanttinen virhe. Semanttiset virheetkin kääntäjä löytää aina. Semanttisesta virheestä tulostuu virheilmoitus, jonka jälkeen kääntäjä tyypillisesti sekoaa ja väittää löytävänsä koodista samalta ja myöhemmiltä riveiltä kaikennäköisiä virheitä korjaa virheet aina kääntäjän ilmoittamassa järjestyksessä.

12 OHJ-1100 Ohjelmointi I 41 Loogiset virheet Loogiset virheet syntyvät, kun ohjelman kirjoittaja ajattelee jotain väärin tai unohtaa ottaa huomioon jonkun joskus hyvinkin vähäpätöisen seikan. Loogiset virheet ovat tavallisesti kirjoitusvirheitä tai algoritmin suunnittelussa tapahtuneita virheitä. Loogiset virheet ilmenevät siten, että ohjelma toimii väärin. Kääntäjällä ei ole mahdollisuuksia havaita loogisia virheitä, koska se vaatisi ohjelmoijan ajatuksenjuoksun ymmärtämistä. Ainoa tapa välttää loogisia virheitä on ohjelman huolellinen suunnittelu ja kirjoittaminen. OHJ-1100 Ohjelmointi I 42 Varatut sanat Kuten puhutuissa kielissä, on ohjelmointikielissäkin sanoja, joilla on jokin kiinteä merkitys. Ohjelmointikielistä puhuttaessa tällaisia sanoja kutsutaan varatuiksi sanoiksi. Varatuille sanoille on siis ohjelmointikielessä määritelty merkitys, eikä ohjelmoija yleensä voi muuttaa tätä merkitystä, koska tällöin kyseisen sanan alkuperäinen tarkoitus hukkuisi. Joskus kielen varattuja sanoja kutsutaan myös käskyiksi. Sanaa»käsky» käytetään kuitenkin usein hiukan vapaammin, esimerkiksi tarkoittamaan yhtä ohjelman lausetta. Varatut sanat luovat perustan koneen ja ohjelmoijan kommunikoinnille käytettäessä korkean tason ohjelmointikieltä. OHJ-1100 Ohjelmointi I 43 C++-kielen varatut sanat OHJ-1100 Ohjelmointi I 44 Esimerkki Seuraavassa on lueteltu C++-kielen varatut sanat: and dynamic_cast not_eq throw and_eq else operator true asm enum or try bitand explicit or_eq typedef bitor export private typeid bool false protected typename break float public union case for register unsigned catch friend reinterpret_cast using char goto return virtual class if short void compl inline signed volatile const int sizeof wchar_t const_cast long static while continue main static_cast xor default mutable struct xor_eq delete namespace switch do new template double not this Osaan kurssilla tutustutaan, muttei läheskään kaikkiin. // Lähdekooditiedosto: vastukset.cc // // Kommentointi on tärkeä osa ohjelman // kirjoittamista, mutta kalvoilla se vie lii // kaa tilaa, joten vastaisuudessa esimerkit // ovat kommentoituja vain tositarpeessa! #include <iostream> using namespace std; int main( ) { cout << " Sarjaan: " << << endl; cout << "Rinnan: " << / ( ) << endl; Luentomateriaalin ohjelmaesimerkeissä varatut sanat on lihavoitu.

13 OHJ-1100 Ohjelmointi I 45 Kun ohjelma käännetään ja suoritetaan: proffa> ohj1c++ o vastukset vastukset.cc proffa>./vastukset Sarjaan: 15 Rinnan: Siitä opittua: C++-kieli selvästikin ymmärtää lukuja ja sallii niillä laskemisen. cout:in avulla voidaan tulostaa myös lukuja (laskulausekkeen arvoja). C++ ei ole kovin tarkka siitä, kuinka jaamme ohjelmamme riveille. Kuinka sisennetään siististi useamman rivin kokoinen C++-lause. OHJ-1100 Ohjelmointi I 46 Perustietotyypit Tietokoneohjelmat koostuvat kahdenlaisista olioista: tiedosta ja toimenpiteistä, jotka käsittelevät sitä. Jotta ohjelmointikielellä voisi tehdä tietoa käsitteleviä ohjelmia, on oltava joku tapa tiedon esittämiseen ja käsittelyyn perustietotyypit (alkeistietotyypit) tiedon esittämiseen ja varatut sanat ja operaattorit sen käsittelyyn. Yleisesti ottaen tietotyypillä käsitetään joukkoa alkioita, joilla on samat ominaisuudet, eli niitä voidaan käsitellä samoilla operaattoreilla. Perustietotyypit ovat sellaisia tiedon esitysmuotoja, jotka ohjelmointikieli tuntee automaattisesti. Tavallisesti perustietotyyppien alkioiden käsittelyyn on valmiit käskyt konekielessä. OHJ-1100 Ohjelmointi I 47 Kaikella tiedolla on joku tyyppi. Alussa riittää tutustua perustietotyyppeihin, joita C++-kielessä kutsutaan aritmeettisiksi tyypeiksi, eli tyypeiksi, joille voidaan suorittaa normaaleja laskuoperaatioita (kuten yhteen- ja kertolasku). Tälläisia tyyppejä ovat C++:ssä: int kokonaisluvuille ( 2, ), double (float) reaaliluvuille (3.1415, 1E10) ja char kirjainmerkeille ( a, \n ). Todellisuudessa C++ käsittelee kirjainmerkkejäkin pieninä kokonaislukuina (vrt. ASCII-koodi ja ISO-8859). Myös merkkijonot (string, tekstimuotoinen tieto, lainausmerkkien sisällä oleva teksti) on käytännössä tässä vaiheessa perustietotyyppi, vaikka todellisuudessa se ei sitä olekaan. OHJ-1100 Ohjelmointi I 48 Lausekeet Lauseke on tietokoneohjelmassa pohjimmiltaan sama kuin se on matematiikassa: jokin kokonaisuus jolle voidaan laskea (eli evaluoida) arvo. Esimerkiksi ( ) / 2 on lauseke, jolle evaluoituu arvo 36. Ohjelmointikielissä lauseke on kuitenkin huomattavasti laajempi käsite kuin mihin perusmatematiikassa on totuttu. Lausekkeen lähtöarvoina käsitelty tieto ei välttämättä muodostu luvuista, eikä lopputuloksenkaan tarvitse olla luku. Pidetään mielessä, että ohjelmointikielissä lausekkeella tämä erityisen laaja tulkinta.

14 OHJ-1100 Ohjelmointi I 49 Operaattorit OHJ-1100 Ohjelmointi I 50 Laskujärjestys (presedenssi) Seuraava taulukko on esittelee lähes kaikki C++-kielen operaattorit, niiden laskujärjestyksen (presedenssin) ja sitomisjärjestyksen (assosioitumisen): ::. > [ ] ( ) muuttuja++ muuttuja ~! lauseke +lauseke ++muuttuja muuttuja &muuttuja lauseke sizeof new delete /% + << >> < <= > >= ==!= & ^ && = = /= %= += = <<= >>= &= = ^= lauseke? lauseke : lauseke lauseke, lauseke Operaattori lasketaan (evaluoidaan) sitä aikaisemmin, mitä ylemmässä lokerossa se on taulukossa. Suluilla evaluointijärjestys voidaan määrätä halutuksi. Jotkut operaattorit (+,, ja &) esiintyvät taulukossa kahteen kertaan: korkeammalla olevat unaari-operaattorit tarvitsevat yhden operandin ja alemmat binääri-operaattorit tarvitsevat kaksi. Esimerkiksi lauseke: a = / 4; evaluoituu samoin kuin jos olisi kirjoitettu: (a = ( (1 2) + ( ( 3) / 4) ) ); Kyseessä siis on aivan sama asia kuin matematiikasta tutuissa laskujärjestyssäännöissä, paitsi että C++:ssa operaattoreita on paljon enemmän. OHJ-1100 Ohjelmointi I 51 OHJ-1100 Ohjelmointi I 52 C++:ssa (lähes) kaikkien operaattorien tuloksena evaluoituu arvo, jota voidaan käyttää operandina muille operaattoreille. Aritmeettisten operaatioiden tulos on samaa tyyppiä kuin niiden operandien tyypit kannattaa olla erityisen varovainen jakolaskuoperaation kanssa, esimerkiksi 1 / 2 tarkoittaa kokonaislukujakolaskua, eli tulos onkin nolla! Jos kokonaislukujen jakolaskusta on tarve saada»tarkka» reaalilukutulos, täytyy toinen operandi muuttaa reaaliluvuksi käsin käyttämällä tyyppimuunnosoperaattoria: static_cast<double>( 1) / 2 jolloin suoritettava laskutoimitus on: 1.0 / 2 eli myös tulos tulee olemaan reaaliluku 0.5. Nyrkkisääntönä: jos operandit ovat eri tyyppiä, tuloksena on esitysalueeltaan laajempi tyyppi. Sitomisjärjestys (assosioituminen) Presedenssisäännöt eivät kerro kaikkea lausekkeen evaluointijärjestyksestä: jos samassa lausekkeessa on peräkkäin useita samalla tasolla olevia operaattoreita. Tällaiset tilanteet ratkaisee operaattorin sitomisjärjestys, joka voi olla: vasemmalta oikealle, jolloin operaatiot suoritetaan vasemmalta oikealle tai oikealta vasemmalle vastaavasti. Taulukossa sitomisjärjestys on merkitty nuolella vasempaan sarakkeeseen. Esimerkiksi: evaluoidaan C++:ssa siis: ( ( (1 2) 3) 4) Sitomisjärjestyksellä on merkitystä esimerkiksi yli- ja alivuototilanteissa ja pyöristysvirheiden kanssa.

15 OHJ-1100 Ohjelmointi I 53 Yli- ja alivuoto OHJ-1100 Ohjelmointi I 54 Esimerkki Sisäisesti tietokone esittää luvut kaksikantaisina (binäärilukuina) jollain äärellisellä määrällä nollia ja ykkösiä (bittejä) lukualueet, joita se voi esittää, ovat rajallisia. Esimerkiksi useat tietokoneet nykyään esittävät kokonaisluvut (int) 32:lla bitillä, jolloin niiden suurin mahdollinen arvo (= ). Tosiasiassa suurin arvo on (= ), koska yksi bitti käytetään etumerkin esittämiseen. Tilannetta, jossa laskutoimituksen tuloksena syntyy niin iso luku, ettei tietokone voi sitä esittää, kutsutaan ylivuodoksi. Vastaavasti alivuoto on tilanne, jossa reaaliluvuilla laskettaessa syntyy itseisarvoltaan niin pieni tulos, ettei esitystarkkuus riitä. Eri tietokoneissa on erilaiset lukualueet ja laskentatarkkuudet. Ratkaistava ongelma Tulosta yhden Celsius-asteen välein käyttäjän antaman alarajan ja ylärajan väliltä Celsiuslämpötiloja vastaavat Fahrenheit-lämpötilat. Tulostuksen selkeyttämiseksi numeroi tulostetut rivit. Ratkaisualgoritmi Algoritmi: Celsius Fahrenheit -taulukko kysy käyttäjältä alin tulostettava Celsius-lämpötila alin celsius käyttäjältä luettu syöte kysy käyttäjältä ylin tulostettava Celsius-lämpötila ylin celsius käyttäjältä luettu syöte rivinumero 1 tulostettava celsius alin celsius WHILE tulostettava celsius ylin celsius fahrenheit 1.8 tulostettava celsius + 32; tulosta rivinumero, tulostettava celsius ja fahrenheit rivinumero rivinumero + 1 tulostettava celsius tulostettava celsius + 1 OHJ-1100 Ohjelmointi I 55 Algoritmin toteutus C++:lla #include <iostream> using namespace std; int main( ) { int alin_celsius; int ylin_celsius; cout << "Anna alin tulostettava Celsius lämpötila: "; cin >> alin_celsius; cout << "Anna ylin tulostettava Celsius lämpötila: "; cin >> ylin_celsius; int rivinumero = 1; int tulostettava_celsius = alin_celsius; while (tulostettava_celsius <= ylin_celsius) { double fahrenheit = 1.8 tulostettava_celsius + 32; cout << rivinumero << ": " << tulostettava_celsius << " C = " << fahrenheit << " F" << endl; rivinumero = rivinumero + 1; ++tulostettava_celsius; OHJ-1100 Ohjelmointi I 56 Käännös ja suoritus proffa> ohj1c++ o celsius celsius.cc proffa>./celsius Anna alin tulostettava Celsius-lämpötila: 10 Anna ylin tulostettava Celsius-lämpötila: 10 1: 10 C = 14 F 2: 9 C = 15.8 F 3: 8 C = 17.6 F 4: 7 C = 19.4 F 5: 6 C = 21.2 F 6: 5 C = 23 F 7: 4 C = 24.8 F 8: 3 C = 26.6 F 9: 2 C = 28.4 F 10: 1 C = 30.2 F 11: 0 C = 32 F 12: 1 C = 33.8 F 13: 2 C = 35.6 F 14: 3 C = 37.4 F 15: 4 C = 39.2 F 16: 5 C = 41 F 17: 6 C = 42.8 F 18: 7 C = 44.6 F 19: 8 C = 46.4 F 20: 9 C = 48.2 F 21: 10 C = 50 F

16 OHJ-1100 Ohjelmointi I 57 Mitä siitä opittiin Ohjelman käyttöön voidaan määritellä»tiedon tallennuspaikkoja» eli muuttujia (esimerkiksi: alin_celsius, rivinumero ja fahrenheit). Muuttujaan voidaan tallettaa arvo sijoitusoperaattorilla (=) tai lukemalla käyttäjän näppäimistösyötettä (cin >>). Myöhemmin ohjelmassa esiintyvä muuttujan nimi korvataan siihen kaikkein viimeisimpänä sijoitetulla arvolla (poikkeuksia on: =-operaattorin vasen operandi ja ++). while-silmukkarakenteella voidaan toistaa joitain käskyjä halutun monta kertaa. ++-operaattori kasvattaa kokonaislukuoperandinsa arvoa yhdellä (tämä on vain osatotuus asiasta). +-operaattori toimii oikein vaikka toinen operandi olisikin double- ja toinen int-tyyppinen. OHJ-1100 Ohjelmointi I 58 while-silmukka while-silmukan yleinen muoto on: while ( ehto ) { suoritettava_lause 1 ; suoritettava_lause n ; tai jos suoritettavia lauseita on vain yksi: while ( ehto ) suoritettava_lause; tässäkin tapauksessa saa käyttää aaltosulkuja. while toistaa rungossaan olevia lauseita niin kauan kuin ehto evaluoituu ennen uutta kierrosta todeksi. Heti, kun ehdosta evaluoituu ennen uutta kierrosta epätosi, ohjelman suoritus jatkuu while-rakennetta seuraavasta käskystä. OHJ-1100 Ohjelmointi I 59 Ehto evaluoidaan aina ensimmäisenä ennen uuden kierroksen aloittamista jos se on heti aluksi epätosi, silmukan runkoa ei suoriteta kertaakaan. Ehto voi olla mikä tahansa lauseke, jolle evaluoituu arvo tosi tai epätosi lauseke, jossa käytetään vertailu- tai loogisia operaattoreita (==,!=, <, <=, >, >=,!, &&, ). C++:ssa on erillinen perustietotyyppi bool, jonka lailliset arvot ovat true (tosi) tai false (epätosi) edellä lueteltuja operaattoreita sisältävistä lausekkeista evaluoituu arvo, joka on tyypiltään bool. Myös bool-tyyppistä muuttujaa voi käyttää ehtona. Historiallisena jäänteenä C-kielestä kokonaisluvut tulkitaan totuusarvoiksi luku 0 on epätosi ja kaikki muut luvut tosia. Jatkossa opitaan myös, että joissain tilanteissa muitakin tietotyyppejä voi käyttää ehtona. OHJ-1100 Ohjelmointi I 60 Vertailuoperaattorit C++-kielessä on perustietotyyppien vertailuun käytettävissä seuraavat vertailuoperaattorit: Operaattori Merkitys == yhtäsuuri kuin!= erisuuri kuin < pienempi kuin <= pienempi tai yhtäsuuri kuin > suurempi kuin >= suurempi tai yhtäsuuri kuin Kaikki vertailuoperaattorit ovat binäärioperaattoreita: ne vertailevat kahta tietoalkiota. Vertailun tuloksena evaluoituu bool-tyyppinen arvo true (tosi) tai false (epätosi) riippuen siitä, pitikö vertailulausekkeessa esitetty väite paikkansa vai ei.

17 OHJ-1100 Ohjelmointi I 61 Muuttujat Muuttujia voi ajatella tiedon tallennuspaikkoina. Toisaalta ne ovat myös jollekin tietoalkiolle annettuja nimiä. Kolmanneksi niitä voi ajatella muistipaikan sisällölle annettuna symbolisena nimenä. Muuttujilla on kolme ominaisuutta: tyyppi ja nimi, jotka kerrotaan muuttujaa määriteltäessä, esimerkiksi: int rivinumero; ja arvo, joka yleensä asetetaan =-operaattorilla, esimerkiksi: rivinumero = 1; Muuttujat pitää aina määritellä (ja vain kerran), ennen kuin niitä voi käyttää. Pääsääntöisesti muuttujiin voi tallettaa vain tietoa, joka on saman tyyppistä kuin muuttujan oma tyyppi. OHJ-1100 Ohjelmointi I 62 Poikkeus: aritmeettisia tietotyyppejä C++ osaa automaattisesti muuntaa toisikseen, jos se on mahdollista. On oikein sanoa: int i = 5.5; huomaa kuitenkin pyöristysvirheet ja ylivuodot. Määrittelyn jälkeen ohjelmassa esiintyvän muuttujan nimen paikalle evaluoituu siihen viimeisimpänä sijoitettu arvo (muutamia poikkeuksia on, kuten aiemmin todettiin). Muuttujia voi C++:ssa määritellä kahdessa paikassa: Minkä tahansa lohkon (eli aaltosulkuparin { ) sisällä sellaisessa kohdassa, jossa voisi olla lause. Tällaista muuttujaa kutsutaan paikalliseksi muuttujaksi ja se on käytettävissä vain sen lohkon sisällä (sulkevaan -merkkiin saakka), jossa se on määritelty. Kaikkien lohkojen ulkopuolella, jolloin kyseessä globaali muuttuja. Älä käytä globaaleja muuttujia! OHJ-1100 Ohjelmointi I 63 Muuttujan nimen pitää alkaa merkillä A Z tai a z, mutta loput merkit voivat olla myös numeroita tai alaviivoja (_). Muuttuja voi olla myös vakiomuuttuja, joka käyttäytyy aivan kuin normaali muuttuja, mutta sen arvoa ei määrittelyn jälkeen voi muuttaa. Vakiomuuttujia määritellään lisäämällä varattu sana const määrittelyn eteen: const int paino = 115; Tällaisille vakioille pitää alustaa arvo määrittelyn yhteydessä, sillä se ei myöhemmin ole mahdollista. Muista aina muuttujaa määritellessäsi pysähtyä miettimään, minkälaista tietoa siihen on tarkoitus tallentaa tiedon tyyppi määrää muuttujan tyypin. Literaalit ovat tietoalkioita, joilla on vain tyyppi ja arvo mutta ei nimeä. Literaaleja voi kutsua myös nimettömiksi vakioiksi. Esimerkiksi literaaleja ovat seuraavat: x, 12345, ja "DFW". OHJ-1100 Ohjelmointi I 64 Esimerkki Ratkaistava ongelma Tee ohjelma, joka laskee (miespuolisen) käyttäjän painoindeksin ja kertoo, onko henkilöllä yli-, ali- tms painoa. Ohjelman toiminta näytää seuraavalta: proffa>./painoindeksi Mies, anna painosi kiloina: 115 Pituutesi metreinä: 1.92 Painoindeksi on: eli paljon ylipainoa Taustatietoa Painoindeksi lasketaan seuraavalla kaavalla: painoindeksi = paino kg pituus 2 m ja miehille sen arvoa tulkitaan seuraavasti: Painoindeksi indeksi 20.7 Tulkinta alipainoa 20.7 < indeksi 26.4 normaali 26.4 < indeksi 27.8 lievää ylipainoa 27.8 < indeksi 31.1 ylipainoa 31.1 < indeksi paljon ylipainoa

18 OHJ-1100 Ohjelmointi I 65 Ratkaisualgoritmi Algoritmi: Painoindeksi kysy käyttäjän paino kiloina paino käyttäjän syöte kysy käyttäjän pituus metreinä pituus käyttäjän syöte painoindeksi paino / (pituus pituus) tulosta painoindeksin arvo IF painoindeksi 20.7 THEN tulosta "alipainoa" ELSE IF 20.7 < painoindeksi 26.4 THEN tulosta "normaali" ELSE IF 26.4 < painoindeksi 27.8 THEN tulosta "lievää ylipainoa" ELSE IF 27.8 < painoindeksi 31.1 THEN ELSE tulosta "ylipainoa" tulosta "paljon ylipainoa" OHJ-1100 Ohjelmointi I 66 Algoritmin toteutus C++:lla #include <iostream> using namespace std; int main( ) { double paino; double pituus; cout << "Mies, anna painosi kiloina: "; cin >> paino; cout << "Pituutesi metreinä: "; cin >> pituus; double indeksi = paino / (pituus pituus); cout << "Painoindeksi on: " << indeksi << " eli "; if ( indeksi <= 20.7 ) { cout << "alipainoa" << endl; else if ( 20.7 < indeksi && indeksi <= 26.4 ) { cout << "normaali" << endl; else if ( 26.4 < indeksi && indeksi <= 27.8 ) { cout << "lievää ylipainoa" << endl; else if ( 27.8 < indeksi && indeksi <= 31.1 ) { cout << "ylipainoa" << endl; else { cout << "paljon ylipainoa" << endl; OHJ-1100 Ohjelmointi I 67 Mitä siitä opittiin C++-kielen if-rakenteella saadaan aikaan ehdollista suoritusta: joidenkin käskyjen suorittaminen riippuu ohjelmoijan määräämästä ehdosta. Looginen operaattori && (ja-operaattori) saa operandeinaan kaksi totuusarvoa ja evaluoituu todeksi vain, jos molemmat operandit olivat tosia. OHJ-1100 Ohjelmointi I 68 if-rakenne If-rakenne on monipuolisin tapa toteuttaa ehdollista suoritusta (haarautumista) C++-kielessä. If-rakenteen yleinen muoto on: if ( ehto 1 ) { suoritettava_lause 1.1 ;... suoritettava_lause 1.i ; else if ( ehto 2 ) { suoritettava_lause 2.1 ;... suoritettava_lause 2.j ; //... tarvittava määrä else-if:ejä tähän... else { suoritettava_lause n.1 ;... suoritettava_lause n.k ;

19 OHJ-1100 Ohjelmointi I 69 Ehtoja lähdetään tutkimaan ylhäältä alas, ja kun löytyy ehto, joka evaluoituu todeksi, suoritetaan siihen liittyvät lauseet ja jatketaan if-rakennetta seuraavasta lauseesta. Else-haaran lauseet suoritetaan vain, jos mikään edeltävä ehto ei evaluoitunut todeksi. Else if- ja else-haarat eivät ole pakollisia. If ei välttämättä suorita mitään haaraa, jos else puuttuu, eikä mikään ehto evaluoidu todeksi. Aaltosulut eivät ole pakollisia, jos haarassa on vain yksi suoritettava lause. OHJ-1100 Ohjelmointi I 70 Loogiset operaattorit Usein silmukan ehto tai if-rakenteen haaran valitsemiseen käytetty ehto on monimutkaisempi kuin yhden vertailuoperaattorin tulos. Mielivaltaisia ehtorakennelmia saadaan aikaan yhdistelemällä sopivasti loogisia operaattoreita:! ei-operaattori (unaarinen), tosi jos operandi on epätosi. && ja-operaattori (binäärinen), tosi jos molemmat operandit ovat tosia. tai-operaattori (binäärinen), tosi jos edes toinen operandi on tosi. Edellä kuvatun kolmen operaattorin sijaan voi käyttää myös varattuja sanoja not, and ja or. Ja- ja tai-operaattoreita voi olla monta perätysten presedenssi edellisen taulukon mukaan laskeva ja sitomisjärjestys &&- ja -operaattoreilla ja!-operaattorilla OHJ-1100 Ohjelmointi I 71 Ja- ja tai-operaattorit ovat oikosulkuoperaattoreita: toisin kuin aritmeettiset operaattorit, ne eivät aluksi evaluoi molempia operandejaan, vaan suorittavat evaluoinnin operandi kerrallaan vasemmalta oikealle ja lopettavat heti, kun tulos on pääteltävissä. Tällä on merkitystä tilanteissa, joissa halutaan pukea ehdoksi lauseke, jonka evaluointi ei kaikissa tilanteissa ole laillista. Jos esimerkiksi halutaan testata onko muuttujan luku arvo tasan jaollinen muuttujan jakaja arvolla: int luku; int jakaja; // if ( jakaja!= 0 && luku % jakaja == 0 ) { // OHJ-1100 Ohjelmointi I 72 Esimerkki Ratkaistava ongelma Tee ohjelma, joka tulostaa seuraavan söötin kertotaululunttilapun: jossa &&-operaattorin oikosulkuominaisuus takaa sen, ettei ehtolausekkeessa koskaan yritetä ottaa jakojäännöstä nollan kanssa.

20 OHJ-1100 Ohjelmointi I 73 Ratkaisualgoritmi Algoritmi: Kertotaulun tulostus tulosta erotinvaakarivi tulosta sarakkeiden otsikkorivi tulosta erotinvaakarivi luku 1 WHILE luku 9 tulosta luvun kertotaulurivi luku luku + 1 tulosta erotinvaakarivi Joitain algoritmin kohtia voisi yksityiskohtaistaa, mutta se ei ole esimerkin opetuksellinen pointti, joten tyydytään yllä esitettyyn. OHJ-1100 Ohjelmointi I 74 Algoritmin toteutus C++:lla #include <iostream> #include <iomanip> using namespace std; void TulostaErotinVaakarivi( ) { cout << "+ " << "+ +" << endl; void TulostaOtsikkorivi( ) { cout << " x " << endl; void TulostaKertotaulurivi( int kertoja) { cout << " " << kertoja << " "; int kerrottava = 1; while (kerrottava <= 9) { cout << setw(3) << kertoja kerrottava; ++kerrottava; cout << " " << endl; OHJ-1100 Ohjelmointi I 75 int main( ) { TulostaErotinVaakarivi( ); TulostaOtsikkorivi( ); TulostaErotinVaakarivi( ); int luku = 1; while (luku <= 9) { TulostaKertotaulurivi( luku); ++luku; TulostaErotinVaakarivi( ); OHJ-1100 Ohjelmointi I 76 Mitä siitä opittiin Lisäämällä ohjelman alkuun rivi #include <iomanip> saadaan käyttöön valmiita työkaluja, joilla tulostuksen ulkoasua voidaan ohjailla. Esimerkiksi tulostuskentän leveys saadaan asetettua setw ohjauskomennolla. Ohjelman monimutkaisuutta voidaan helpommin hallita jakamalla sen toiminnot osiin aliohjelmien (proseduurien) avulla: jokainen aliohjelma toteuttaa jonkun ohjelman osatoiminnon, joka saadaan suoritettua aliohjelmaa kutsumalla. Aliohjelmalle voidaan tarvittaessa välittää myös parametreja, jotka»hienosäätävät» sen toimintaa.

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

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

Lisätiedot

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

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

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

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

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

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

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

12 Mallit (Templates)

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

Lisätiedot

Ohjelmoinnin perusteet Y Python

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

Lisätiedot

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

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

OHJ-1101 Ohjelmointi 1e

OHJ-1101 Ohjelmointi 1e OHJ-1101 Ohjelmointi 1e Essi Lahtinen 2008-2009 OHJ-1101 Ohjelmointi 1e 2008-09 1 Kurssin järjestelyt 20082009 Kurssin vastuuhenkilö Essi Lahtinen (essi.lahtinen@tut., huone: TE210, puh. 040 8490717) vastaa

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

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

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

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

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

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

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

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

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

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

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

Luento 5. Timo Savola. 28. huhtikuuta 2006

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

Lisätiedot

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python Ohjelmoinnin perusteet Y Python T-106.1208 27.1.2010 T-106.1208 Ohjelmoinnin perusteet Y 27.1.2010 1 / 37 If-käsky toistokäskyn sisällä def main(): HELLERAJA = 25.0 print "Anna lampotiloja, lopeta -300:lla."

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

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

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

4. Lausekielinen ohjelmointi 4.1

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

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

Pythonin alkeet Syksy 2010 Pythonin perusteet: Ohjelmointi, skriptaus ja Python

Pythonin alkeet Syksy 2010 Pythonin perusteet: Ohjelmointi, skriptaus ja Python Pythonin alkeet Syksy 2010 Pythonin perusteet: Ohjelmointi, skriptaus ja Python 8. marraskuuta 2010 Ohjelmointi Perusteet Peruskäsitteitä Olio-ohjelmointi Pythonin alkeet Esittely Esimerkkejä Muuttujat

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

Tähtitieteen käytännön menetelmiä Kevät 2009 Luento 4: Ohjelmointi, skriptaus ja Python

Tähtitieteen käytännön menetelmiä Kevät 2009 Luento 4: Ohjelmointi, skriptaus ja Python Tähtitieteen käytännön menetelmiä Kevät 2009 Luento 4: Ohjelmointi, skriptaus ja Python 31. tammikuuta 2009 Ohjelmointi Perusteet Pythonin alkeet Esittely Esimerkkejä Muuttujat Peruskäsitteitä Käsittely

Lisätiedot

Ohjelmoinnin perusteet Y Python

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

Lisätiedot

Sisällys. 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

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

4. Lausekielinen ohjelmointi 4.1

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

Lisätiedot

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

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

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

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

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

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

Lisätiedot

Ohjelmoinnin perusteet Y Python

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

Lisätiedot

Sisällys. 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 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

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

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

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

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

Lisätiedot

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

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

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

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

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

Lisätiedot

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

5.6. C-kielen perusteet, osa 6/8, Taulukko 6.1.2008, pva, kuvat jma

5.6. C-kielen perusteet, osa 6/8, Taulukko 6.1.2008, pva, kuvat jma 5.6. C-kielen perusteet, osa 6/8, Taulukko 6.1.2008, pva, kuvat jma Every cloud has a silver line. - englantilainen sananlasku Tässä osiossa tärkeää: yksi- ja moniulotteinen taulukko Sisältö Yleistä Yksiulotteinen

Lisätiedot

MITÄ JAVASCRIPT ON?...3

MITÄ JAVASCRIPT ON?...3 JavaScript MITÄ JAVASCRIPT ON?...3 YLEISTÄ JAVASCRIPTIN SYNTAKSISTA...3 KÄSKYSANAT JA MUUT VARATUT SANAT...3 MUUTTUJIEN, FUNKTIOIDEN JA LUOKKIEN NIMISSÄ...3 HTML-TAGEIHIN VIITTAAVISSA METODINIMISSÄ...3

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

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

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

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

Table of Contents. T740103 Olio-ohjelmointi C/C++ perusteita Jukka Jauhiainen OAMK Tekniikan yksikkö 2010, 2011

Table of Contents. T740103 Olio-ohjelmointi C/C++ perusteita Jukka Jauhiainen OAMK Tekniikan yksikkö 2010, 2011 Tämän materiaalin lähteenä on käytetty osoitteesta http://www.cplusplus.com/doc/tutorial löytyvää C+ + Language Tutorial. Tämän osan tarkoituksena on pääasiassa kerrata C-kielestä tuttuja perusasioita

Lisätiedot

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

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

Lisätiedot

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

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

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

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

Ongelma(t): Miten tietokoneen komponentteja voi ohjata siten, että ne tekevät yhdessä jotakin järkevää? Voiko tietokonetta ohjata (ohjelmoida) siten,

Ongelma(t): Miten tietokoneen komponentteja voi ohjata siten, että ne tekevät yhdessä jotakin järkevää? Voiko tietokonetta ohjata (ohjelmoida) siten, Ongelma(t): Miten tietokoneen komponentteja voi ohjata siten, että ne tekevät yhdessä jotakin järkevää? Voiko tietokonetta ohjata (ohjelmoida) siten, että se pystyy suorittamaan kaikki mahdolliset algoritmit?

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

Ongelma(t): Miten jollakin korkeamman tason ohjelmointikielellä esitetty algoritmi saadaan suoritettua mikro-ohjelmoitavalla tietokoneella ja siinä

Ongelma(t): Miten jollakin korkeamman tason ohjelmointikielellä esitetty algoritmi saadaan suoritettua mikro-ohjelmoitavalla tietokoneella ja siinä Ongelma(t): Miten jollakin korkeamman tason ohjelmointikielellä esitetty algoritmi saadaan suoritettua mikro-ohjelmoitavalla tietokoneella ja siinä olevilla komponenteilla? Voisiko jollakin ohjelmointikielellä

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

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

Pythonin Kertaus. Cse-a1130. Tietotekniikka Sovelluksissa. Versio 0.01b

Pythonin Kertaus. Cse-a1130. Tietotekniikka Sovelluksissa. Versio 0.01b Pythonin Kertaus Cse-a1130 Tietotekniikka Sovelluksissa Versio 0.01b Listat 1/2 esimerkkejä listan peruskäytöstä. > lista=['kala','kukko','kissa','koira'] ['kala','kukko','kissa','koira'] >lista.append('kana')

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

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

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

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

Ohjausjärjestelmien jatkokurssi. Visual Basic vinkkejä ohjelmointiin

Ohjausjärjestelmien jatkokurssi. Visual Basic vinkkejä ohjelmointiin Ohjausjärjestelmien jatkokurssi Visual Basic vinkkejä ohjelmointiin http://www.techsoft.fi/oskillaattoripiirit.htm http://www.mol.fi/paikat/job.do?lang=fi&jobid=7852109&index=240&anchor=7852109 Yksiköt

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

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

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

Maastotietokannan torrent-jakelun shapefile-tiedostojen purkaminen zip-arkistoista Windows-komentojonoilla

Maastotietokannan torrent-jakelun shapefile-tiedostojen purkaminen zip-arkistoista Windows-komentojonoilla Maastotietokannan torrent-jakelun shapefile-tiedostojen purkaminen zip-arkistoista Windows-komentojonoilla Viimeksi muokattu 5. toukokuuta 2012 Maastotietokannan torrent-jakeluun sisältyy yli 5000 zip-arkistoa,

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

2 Konekieli, aliohjelmat, keskeytykset

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

Lisätiedot

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

Kääreluokat (oppikirjan luku 9.4) (Wrapper-classes)

Kääreluokat (oppikirjan luku 9.4) (Wrapper-classes) Kääreluokat (oppikirjan luku 9.4) (Wrapper-classes) Kääreluokista Javan alkeistietotyypit ja vastaavat kääreluokat Autoboxing Integer-luokka Double-luokka Kääreluokista Alkeistietotyyppiset muuttujat (esimerkiksi

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

Tietorakenteet ja algoritmit - syksy 2015 1

Tietorakenteet ja algoritmit - syksy 2015 1 Tietorakenteet ja algoritmit - syksy 2015 1 Tietorakenteet ja algoritmit - syksy 2015 2 Tietorakenteet ja algoritmit Johdanto Ari Korhonen Tietorakenteet ja algoritmit - syksy 2015 1. JOHDANTO 1.1 Määritelmiä

Lisätiedot

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

T106.1208 Ohjelmoinnin perusteet Y (Python) Opetusmoniste kevät 2010

T106.1208 Ohjelmoinnin perusteet Y (Python) Opetusmoniste kevät 2010 T106.1208 Ohjelmoinnin perusteet Y (Python) Opetusmoniste kevät 2010 Kerttu Pollari-Malmi c Kerttu Pollari-Malmi Sisältö 1 Tietokoneista ja ohjelmista 1 1.1 Lyhyesti tietokoneen rakenteesta....................

Lisätiedot

Tietorakenteet ja algoritmit Johdanto Lauri Malmi / Ari Korhonen

Tietorakenteet ja algoritmit Johdanto Lauri Malmi / Ari Korhonen Tietorakenteet ja algoritmit Johdanto Lauri Malmi / Ari 1 1. JOHDANTO 1.1 Määritelmiä 1.2 Tietorakenteen ja algoritmin valinta 1.3 Algoritmit ja tiedon määrä 1.4 Tietorakenteet ja toiminnot 1.5 Esimerkki:

Lisätiedot

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

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

Lisätiedot

Olio-ohjelmointi Javalla

Olio-ohjelmointi Javalla 1 Olio-ohjelmointi Javalla Olio-ohjelmointi Luokka Attribuutit Konstruktori Olion luominen Metodit Olion kopiointi Staattinen attribuutti ja metodi Yksinkertainen ohjelmaluokka Ohjelmaluokka 1 Olio-ohjelmointi

Lisätiedot

Operaattorin ylikuormitus ja käyttäjän muunnokset

Operaattorin ylikuormitus ja käyttäjän muunnokset 13 Operaattorin ylikuormitus ja käyttäjän muunnokset Luvussa 7, "Ominaisuudet, taulukot ja indeksoijat," opit, miten luokan yhteydessä käytetään ohjelmallisesti []-operaattoria, jolloin objektia voidaan

Lisätiedot

TIE 02100 Johdatus ohjelmointiin

TIE 02100 Johdatus ohjelmointiin TIE 02100 Johdatus ohjelmointiin syksy 2015 Kerttu Pollari-Malmi Copyright c Kerttu Pollari-Malmi Johdanto Tämä on opintojaksolla TIE 02100 Johdatus ohjelmointiin käytetty luentomoniste. Moniste on alunperin

Lisätiedot