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

Koko: px
Aloita esitys sivulta:

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

Transkriptio

1 Perusasiat 1 Perusasiat Tässä ensimmäisessä luvussa käsittelemme C++:n perusominaisuuksia. Kaikkiin tässä käsiteltäviin asioihin palataan tarkemmin myöhemmissä luvuissa - tarkoituksena on nyt vain hieman raottaa esirippua ennen kuin siirrymme C++-ohjelmien kirjoittamisen saloihin. Näytämme miltä yksinkertainen C++-ohjelma näyttää ja miten kaikki oikein rakennetaan yhteen. Käsittelemme myöskin yleisesti ohjelmointia C++:n avulla sekä miten teet kirjoittamastasi lähdetekstistä suoritettavan ohjelman. Älä yritä muistaa kaikkea tässä kappaleessa esitettyä. Keskity vain esitettyihin ideoihin. Kaikki tässä kappaleessa mainittu tulee vastaan myöhemmissä kappaleissa, ja opit parhaiten kokeilemalla itse, ei pelkästään lukemalla. Tässä kappaleessa käsittelemme seuraavaa: Mitkä C++:n ominaisuudet tekevät siitä niin suositun Mitkä ovat C++-ohjelman perusosat Miten lähdeteksti kommentoidaan Miten lähdetekstistä tulee suoritettava ohjelma Miten olio-ohjelmointi eroaa proseduraalisesta ohjelmoinnista Ohjelmointikielet Tunnet jo ehkä ohjelmoinnin perusasiat sekä joitakin ohjelmointikieliä, mutta haluamme varmistaa, että seisomme tukevasti samalla maaperällä käymällä ensiksi läpi kirjassa käytettyjä termejä. Vertailemme C++ -kieltä myös muihin ohjelmointikieliin, joista olet saattanut kuulla jo aiemmin. Ohjelmointikielestä riippumatta kirjoittamasi ohjelmat muodostuvat yksittäisistä käskyistä, jotka muodostavat lähdetekstin. Lähdetekstit talletetaan lähdetekstitiedostoon. Erilaisia ohjelmointikieliä on olemassa runsaasti. Niissä on kussakin omat hyvät ja huonot puolensa. C++:n lisäksi olet saattanut kuulla kielistä kuten BASIC, COBOL, FORTRAN, Pascal ja C. FORTRAN on kieli, joka on ollut olemassa jo lähes 40 vuotta ja käytetään edelleen laajasti tieteellisessä laskennassa, vaikka C++ ja muut kielet ovatkin korvanneet sen käyttöä. COBOL on erityisesti liike-elämän tietojenkäsittelyyn tarkoitettu kieli ja on lähes yhtä vanha kuin FORTRAN. Vaikka hyvin vähän uudesta koodista kirjoitetaan COBOLilla, käytössä on runsaasti 7

2 C++ Ohjelmoijan käsikirja koo dia, joka on kirjoitettu vuosia sitten. C++-kielestä on tullut kuitenkin varsin suosittu myöskin COBOLin vahvoilla alueilla. Koska C-kieli on C++:n edeltäjä, näiden kielien syntaksi ja toiminnallisuus on osittain samanlaista. Tarkemmin sanottuna, C on C++:n alijoukko. C++:n laajennukset ja parannukset C- kieleen nähden ovat parantuneet kielen kehityksen aikana ja kuten saamme nähdä, C++ on huomattavasti rikkaampi ja monipuolisempi kuin esi-isänsä. Tulkattu vs. käännetty ohjelman suoritus Ohjelmointikielet on suunniteltu siten, että sinun olisi helpompi kuvata toimenpiteet, jotka tietokoneen tulisi suorittaa, verrattuna ohjelmaan, jonka tietokone voi varsinaisesti suorittaa. Tietokoneesi voi ainoastaan suorittaa ohjelmia, jotka koostuvat konekielisistä käskyistä (puhutaan myöskin konekielestä). Eli se ei pysty suorittamaan kirjoittamiasi ohjelmia suoraan. Ohjelman Lähdeteksti Ohjelman Lähdeteksti Läheteksti on syötteenä Tulkille Lähdeteksti on syötteenä kääntäjälle Lähdetekstin tulkki Lähdetekstin Kääntäjä Kääntäjä generoi lähdetekstiä vastaavan konekielisen ohjelman Tulkki suorittaa lähdetekstissä määritellyt toimenpiteet. Tämä on hidasta verrattuna käännettyyn ohjelmaan. Tulkattu ohjelman suoritus Konekieli Konekielen suoritus suorittaa lähdetekstissä määritellyt toimenpiteet. Käännetty ohjelman suoritus 8 Periaatteessa on olemassa kaksi tapaa, jolla edellä mainituilla kielillä kirjoitetut ohjelmat voidaan suorittaa. Yleensä myöskin itse kielen kohdalla on määritelty jompi kumpi suoritustapa. Esimerkiksi BASIC-kielellä kirjoitetut ohjelmat suoritetaan yleensä tulkattuna - tämä tarkoittaa, että toinen ohjelma, tulkki, tutkii BASIC-lähdetekstiä ja päättelee, mitä ohjelman pitäisi tehdä ja sitten tekee sen. C++ on puolestaan käännettävä kieli. Ennen kuin voit suorittaa C++-ohjelmaasi, se täytyy muuttaa konekieliseksi toisen ohjelman, kääntäjän, avulla. Kääntäjä tutkii C++-ohjelman ja generoi konekielisiä käskyjä, jotka suorittavat lähdetekstissä määrätyt toimenpiteet. Tulkkaaminen ja kääntäminen ei luonnollisestikaan ole niin yksinkertaista kuin edellä kuvasimme, mutta periaatteessa kaikki toimii näin. Tulkattavan kielen kohdalla ohjelman suoritus on epäsuoraa. Tällä tarkoitamme sitä, että lähdekoodin sisältö tulee päätellä jokaisella ohjelman suorituskerralla. Tästä syystä tulkkaus on huomattavasti hitaampaa - joskus jopa 100 kertaa hitaampaa - kuin vastaava ohjelma käännetyllä kielellä. Yksi ohjelmointikieli on usein joko tulkattava tai käännettävä, ja valinnan ratkaisee

3 Perusasiat kielen suunnittelu ja ajateltu käyttötarkoitus. Jonkinlainen poikkeus tähän sääntöön on Java, joka on varsin uusi kieli ja sisältää suuren osan C++:n ominaisuuksista. Koska sen tarkoituksena on olla siirrettävä eri tietokoneiden välillä sekä Internetissä, se on pohjimmiltaan tulkattava kieli. Olemassa on kuitenkin JIT-kääntäjiä (just in time), jotka suorituksen aikana tuottavat alkuperäisestä Java-lähdetekstistä konekielisiä ohjelmia. Tällöin ohjelman suoritusnopeus kasvaa suuresti. Kirjastot Jos sinun tarvitsisi joka ohjelmointikerralla aloittaa aivan tyhjältä pöydältä, ohjelmointi olisi ikävystyttävää. Useat ohjelmat tarvitsevat samanlaisia ominaisuuksia - esimerkiksi tiedon lukua näppäimistöltä ja tiedon näyttämistä näytöllä. Tästä syystä ohjelmointikielet sisältävät yleensä huomattavan määrän valmista koodia, joka tarjoaa esimerkiksi edellä mainitut palvelut. Eli sinun ei tarvitse kirjoittaa tätä kaikkea itse. Standardi koodi, jota on tarkoitus käyttää useammassa ohjelmassa, sijoitetaan kirjastoon. Kielen mukana tulevat kirjastot ovat yhtä tärkeitä kuin itse kielikin, koska kirjastojen laadulla ja laajuudella on suuri merkitys siihen, miten nopeasti pystyt suoriutumaan annetusta ohjelmointitehtävästä. Miksi C++ on niin suosittu kieli? C++-kieli on huomattavan suosittu lähes kaikissa tietokoneympäristöissä: henkilökohtaisissa tietokoneissa, Unix-työasemissa ja keskustietokoneissa. Tämä on vieläkin merkittävämpää, jos otat huomioon, miten vastahakoisesti on aina kohdeltu uutta ohjelmointikieltä, vaikka se olisi kuinka hyvä. Koska olemassa on runsaasti aikaisemmilla ohjelmointikielillä kirjoitettuja ohjelmia, uuden ohjelmointikielen hyväksyntä on luonnollisestikin hidasta. Lisäksi useimmilla ammattilaisilla on tapana pitäytyä siinä mitä he osaavat ja missä he ovat tehokkaita ennen kuin siirtyvät johonkin uuteen ja epävarmaan, jossa sujuva työskentely ei heti onnistu. Luonnollisesti se, että C++ on kehitetty C-kielestä (joka on ollut oletuskielenä monissa laitealustoissa ennen kuin C++ oli olemassa), auttaa C++:n leviämisessä, mutta C++ tarjoaa muutakin kuin vain tämän: C++ on tehokas uskomattoman laajassa sovellusjoukossa. Voit käyttää C++kieltä lähes mihin tahansa, tekstinkäsittelyohjelmasta tieteellisiin ohjelmiin ja käyttöjärjestelmistä peleihin. C++ yhdistää tehokkaat C-kielestä perityt proseduraalisen ohjelmoinnin osat tehokkaisiin olio-ohjelmoinnin mahdollisuuksiin. C++:n standardikirjasto sisältää laajan joukon valmiita toimintoja. On olemassa monia C++-kirjastoja, jotka tukevat suurta joukkoa käyttöjärjestelmäympäristöjä ja tiettyjä erikoisohjelmia. 9

4 C++ Ohjelmoijan käsikirja Huomaat myöskin, että lähes jokaista tietokonetta voi ohjelmoida C++:n avulla. Eli kieli on levinnyt lähes kaikille laitteistoalustoille. Tämä tarkoittaa sitä, että pitäisi olla mahdollista siirtää jossain tietokoneessa kirjoitettu C++-ohjelma toiseen tietokoneeseen varsin pienellä vaivalla. Sinun täytyy luonnollisesti ottaa ohjelmaa kirjoittaessasi huomioon, jos haluat suorittaa ohjelmaa toisessa laitteistossa. C++:n ANSI-standardi Standardointi on kaiken perustana, kun halutaan siirtää ohjelmia tietokoneesta toiseen. Standardien luominen mahdollistaa kielen ristiriidattoman toteutuksen eri laitealustoille. Täydellinen joukko standarditoimintoja standardinmukaisissa kääntäjissä mahdollistaa sen, että tiedät lopputuloksen aina tarkalleen. C++:n ANSI-standardin käyttäminen helpottaa sovellusten siirtämistä laitealustasta toiseen sekä helpottaa useissa laitealustoissa suoritettavien sovellusten ylläpitoa. Luonnollisesti muitakin asioita täytyy ottaa huomioon. Jos ohjelmasi tulee olla siirrettävä, et saa käyttää standardoimattomien kirjastojen rutiineja ohjelmakoodissa ja sinun tulee minimoida ohjelman riippuvuus ohjelmointiympäristönä toimivasta laitteesta. Jos et näin tee, ohjelman siirtäminen on varsin hankalaa. Lisäksi C++:n ANSI-standardista on se hyöty, että se standardoi sen, mitä sinun tulee opetella voidaksesi ohjelmoida C++:lla. Standardin olemassaolo pakottaa yhdenmukaisuuteen, koska se tarjoaa ainoan tarkan määrittelyn siitä, mitä C++-kääntäjän ja kirjastojen tulisi sisältää. Se poistaa kääntäjien tekijöiden tavan olla joustavia. Jos et vielä ole ostanut C++-kääntäjääsi, vaadi että sen tulee olla ANSI-standardin mukainen. Yksinkertainen C++-ohjelma Katsotaanpa hyvin yksinkertaista C++-ohjelmaa ja erityisesti, mitkä ovat sen perusosat. Älä kirjoita tätä ohjelmaa kääntäjääsi; sen tarkoituksena on vain kuvata, mitkä osat muodostavat ohjelman. Emme myöskään tässä kohtaa paneudu yksityiskohtiin - kaikki tässä esitetty käsitel- Tämä on kommentti, jota kääntäjä ei huomioi. // Esimerkki 1.1 A yksinkertainen C++ -ohjelma #include <iostream> using namespace std; int main() { Tämä sisällyttää otsikkotiedoston iostream ohjelmaan cout << "Paras paikka aloittaa on alkukohta ; return 0; Tämä kertoo, että tästä eteenpäin voimme käyttää nimiavaruuteen std kuuluvia nimiä.. Tämä nimeää funktion nimeksi main(), joka palauttaa int-tyyppisen paluuarvon. Tämä lause tulostaa viestin näytölle. Lauseet päättyvät puolipisteeseen. 10 } Aaltosulkeet rajaavat lohkon, joka tässä tapauksessa on funktion runko. Tämä on funktion main() runko. Se sisältää funktion suoritettavan osan.. Tämä lause päättää main() -funktion ja palauttaa kontrollin käyttöjärjestelmälle.

5 Perusasiat lään tarkemmin myöhemmissä luvuissa. Edellä esitetty ohjelma tulostaa viestin: Paras paikka aloittaa on alkukohta Ohjelma koostuu yhdestä funktiosta, main(). Funktion ensimmäinen rivi on: int main() Funktio on itsenäinen ohjelmalohko, johon viitataan funktion nimellä, tässä tapauksessa main. Ohjelmassa voi olla runsaasti muutakin koodia, mutta jokaisessa C++-ohjelmassa täytyy olla ainakin main()-funktio ja main()-funktiota voi olla ohjelmassa vain yksi kappale. C++ohjelman suoritus alkaa aina main()-funktion ensimmäisestä lauseesta. main()-funktiomme muodostuu kahdesta suoritettavasta lauseesta: cout << Paras paikka aloittaa on alkukohta ; return 0; Nämä lauseet suoritetaan järjestyksessä, alkaen ensimmäisestä. Yleisesti ottaen funktion lauseet suoritetaan peräkkäin, ellei funktiossa ole lausetta, joka erityisesti määrää suoritusjärjestyksen. Luvussa 4 näemme millaisia ovat nämä suoritusjärjestystä muuttavat lauseet. C++:ssa syöttö ja tulostus tapahtuvat virtojen avulla. Jos haluat tulostaa jotain, sijoitat tulostettavan tulostusvirtaan ja jos haluat jotain syötettävän ohjelmaan, luet syötteen syöttövirrasta. C++:n standarditulostus- ja standardisyöttövirtoja kutsutaan nimillä cout ja cin ja ne käyttävät tietokoneesi näyttöä ja näppäimistöä. Edellä oleva koodi tulostaa näytöllesi merkkijonon Paras paikka aloittaa on alkukohta. Tämä tapahtuu sijoittamalla merkkijono tulostusvirtaan siirto-vasemmalle -operaattorilla <<. Kun kirjoitamme ohjelmia, jotka tarvitsevat syötteitä, törmäämme siirto-oikealle -operaattoriin >>. Nimi cout on määritelty otsikkotiedostossa iostream. Se on standardi otsikkotiedosto, joka sisältää tarvittavat määrittelyt, jotta voit käyttää C++:n syöttö- ja tulostusominaisuuksia. Jos ohjelmassasi ei olisi riviä #include <iostream> se ei kääntyisi, koska otsikkotiedosto iostream sisältää cout:n määrittelyn ja ilman otsikkotiedostoa kääntäjä ei tiedä mitä cout tarkoittaa. Huomaa, että kulmasulkeiden < ja > sekä otsikkotiedoston nimen välissä ei ole välilyöntejä. Useiden kääntäjien kohdalla välilyönnit ovat merkitseviä kulmasulkeiden yhteydessä; jos kirjoitat välilyönnin näihin kohtiin, voi olla että ohjelmasi ei käänny. Toinen ja samalla viimeinen lause funktion rungossa on: return 0; Tämä lause lopettaa ohjelman suorituksen ja palauttaa kontrollin käyttöjärjestelmälle. Se myöskin palauttaa arvon nolla käyttöjärjestelmälle. Muita paluuarvoja voidaan käyttää ilmoittamaan ohjelman eri päättymistilanteita. Käyttöjärjestelmä voi sitten käyttää näitä arvoja päättelemään onnistuiko ohjelman suoritus. Käyttöjärjestelmä kuitenkin määrittelee, miten näihin paluuarvoihin reagoidaan. 11

6 C++ Ohjelmoijan käsikirja Nimet Suurella osalla asioista C++:ssa on nimet (kutsutaan myös termillä tunniste), joita käytetään viitattaessa niihin. C++-ohjelmassasi annat nimiä viidelle eri asialle: funktiot ovat itsenäisiä, nimettyjä lohkoja suoritettavaa koodia. Funktioiden määrittelyyn palaamme luvussa 8. muuttujat ovat nimettyjä muistipaikkoja, joihin voidaan tallettaa arvoja. Muuttujien käsittelyn aloitamme luvusta 2. tyypit ovat nimiä sille, minkälaista tietoa voidaan tallettaa muuttujiin. Esimerkiksi tyyppi int tarkoittaa kokonaislukuja. Joitakin tyyppejä käsittelemme luvussa 2 ja lisää sitä seuraavissa luvuissa - erityisesti luvuissa 11 ja 12. nimiöiden avulla voidaan viitata tiettyyn lauseeseen. Nimiöitä käytetään varsin harvoin, mutta tutustumme niihin luvussa 4. nimiavaruuksien avulla voidaan tunnistaa joukko nimettyjä asioita ohjelmassasi. Jos tämä kuulostaa sekavalta, älä välitä: tähän palataan aivan kohta sekä luvussa 10. Useimmissa uusimmissa C++-kääntäjissä nimi voi koostua pelkästään isoista ja pienistä kirjaimista, alaviivasta (_) ja numeroista 0-9. ANSI-standardi sallii myöskin Universal Character Setin merkkien käytön (tähän palaamme hetken päästä) nimissä, mutta on epätodennäköistä, että tarvitset tätä ominaisuutta. Koska nimet voivat koostua vain sallituista merkeistä, et voi kirjoittaa tyhjiä merkkejä (välilyöntejä, sarkainmerkkejä jne) nimen keskelle. Jos kuitenkin kirjoitat, kääntäjä tunnistaa sen kahdeksi nimeksi, eli nimeä ei käsitellä oikein. Lisärajoituksena on, että nimi ei voi alkaa numerolla. Seuraavassa on joitakin sallittuja nimiä: arvo2 Turkulainen JuhaniNiemi Kokonais_paino PI sekä muutamia virheellisiä nimiä: 8Pallo Juha-Matti Juhani Niemi Kokonais-paino 2PI Huomaa, että nimet, jotka sisältävät tupla-alaviivan ( ) tai alkavat alaviivalla, jonka perässä on iso kirjain, ovat C++:n standardikirjaston varattuja sanoja, joten sinun ei tulisi käyttää tällaisia nimiä ohjelmissasi. Kääntäjäsi ei todennäköisesti tarkista tätä, joten huomaat päällekkäisen nimen vasta kun asiat alkavat mennä väärin! Käsittelemme nimiä lisää siinä yhteydessä kun niitä käytetään. 12 Nimiavaruudet Huomasit varmaankin, ettemme käyneet läpi esimerkkiohjelmassa ollutta yhtä riviä. Jotta ymmärrät sen, sinun täytyy ensin tietää, mitä nimiavaruudet ovat ja jotta voisit ymmärtää

7 Perusasiat nimiavaruudet, nimet pitää ymmärtää ensin. Kysymyksessä ollut rivi oli: using namespace std; Nimiavaruuden nimi on vähän kuin perheen sukunimi. Jokaisella perheenjäsenellä on oma nimensä ja useimmiten jokaisella on eri nimi. Niemen perheessä saattaa olla Juhani, Jouni, Jaana ja Ritva. Perheenjäsenet kutsuvat toisiaan näillä nimillä. Toisilla perheillä saattaa kuitenkin olla samoja nimiä kuin Niemen perheellä. Esimerkiksi Anttilan perheessä saattaa olla Jukka, Jaana ja Pirkko. Kun Jukka Anttila viittaa Jaanaan, on selvää, että hän tarkoittaa Jaana Anttilaa. Jos hän haluaa viitata Niemen perheen Jaanaan, hän käyttää koko nimeä: Jaana Niemi. Jos et kuuluisi kumpaankaan näistä perheistä, voisit olla varma kenestä milloinkin on puhe vain, jos ihmiset käyttävät koko nimiä, kuten Juhani Niemi ja Pirkko Anttila. Nimiavaruudet toimivat aivan samalla periaatteella - nimiavaruuden nimi vastaa sukunimeä. Nimiavaruuden sisällä voit käyttää yksittäisiä nimiä nimiavaruuden asioista. Nimiavaruuden ulkopuolelta voit viitata johonkin nimiavaruuden sisällä ainoastaan itse asian nimellä ja nimiavaruuden nimellä. Nimiavaruuksien tarkoitus on vähentää samojen nimien käytön aiheuttamaa sekaannusvaaraa laajoissa ohjelmissa. Yleensä yhdessä ohjelmassa voi olla useita eri nimiavaruuksia. C++:n standardikirjastossa olevat oliot on määritelty nimiavaruuteen std, joten standardikirjaston kaikkiin nimiin voidaan viitata std:llä. Näin ollen cout-olion koko nimi on std::cout. Noilla kahdella kaksoispisteellä on varsin mielikuvituksellinen nimi: näkyvyysalue-operaattori. Sitä käsittelemme lisää myöhemmin. Tässä esimerkissä sen tarkoituksena on erottaa nimiavaruuden nimi, std, virran nimestä, cout. Käyttämällä using-esittelyä yksinkertaisenkin C++-ohjelman alussa ilmoitamme, että haluamme viitata nimiavaruuteen std ilman, että meidän tarvitsisi käyttää nimiavaruuden nimeä joka kerta. Jos jatkamme kuvaavaa esimerkkiämme, tällä tarkoitamme sitä, että std-perhettä käsitellään ohjelmassa siten, että voimme viitata kaikkiin perheen jäseniin pelkällä etunimellä. Tästä seuraa se, että meidän ei tarvitse viitata olioon cout käyttämällä std::cout. Ohjelmakoodista tulee näin hieman yksinkertaisempaa. Jos emme käyttäisi using-esittelyä, olisi tulostuslause kirjoitettava seuraavasti: std::cout << Paras paikka aloittaa on alkukohta ; Varatut sanat C++:ssa on varattuja sanoja, joilla on kielessä erityismerkitys. Jo näkemämme ja käsittelemämme return ja namespace ovat esimerkkejä varatuista sanoista. Näet monia muitakin varattuja sanoja tässä kirjassa. Sinun tulee varmistaa, että valitsemasi nimet eivät ole samoja kuin C++:n varatut sanat. C++:n kaikki varatut sanat on lueteltu liitteessä B. Varatut sanat, kuten kaikki muukin C++:ssa, ovat merkkikoosta riippuvia. Eli esimerkiksi heikki ja Heikki ovat eri nimiä. 13

8 C++ Ohjelmoijan käsikirja C++:n lauseet ja lohkot Lauseet ovat peruselementtejä sekä ohjelmasi suoritukselle että ohjelmasi käsittelemälle tiedolle. Useimmat C++-lauseet päättyvät puolipisteeseen. Käytössä on varsin monta erilaista lausetta, mutta ehkä kaikkein yksinkertaisin on lause, jolla otetaan ohjelmassa käyttöön uusi nimi. Lausetta, jolla otetaan ohjelmassa käyttöön uusi nimi, on esittely. Esittely vain ottaa nimen käyttöön ja ilmoittaa, millaiseen asiaan nimellä viitataan. Vastaavasti voidaan käyttää määrittelyä, joka myöskin luo sen, mihin nimellä viitataan. Yleensä useimmat esittelyt ovat myös määrittelyjä. Seuraavassa on esimerkki lauseesta, joka esittelee muuttujan nimen ja määrittelee sekä alustaa muuttujan: double tulos = 0.0; Tämä esittelee nimen tulos, joka viittaa double-tyyppiseen muuttujaan (esittely), varaa muistia muuttujan tietoa varten (määrittely) ja asettaa sen alkuarvoksi 0.0 (alkuarvon asetus). Seuraavassa on esimerkki toisenlaisesta lauseesta, valintalauseesta: if (oituus > 25) laatikonpituus = koko + 2; Tämä lause testaa ehtolausekkeen Onko muuttujan laatikonpituus suurempi kuin 25 ja tekee jotain, jos ehtolauseke on tosi. Tässä tapauksessa suoritetaan seuraavalla rivillä oleva lause, joka lisää muuttujan koko arvoon luvun kaksi ja sijoittaa tuloksen muuttujaan laatikonpituus. Voimme sijoittaa useita lauseita aaltosulkeiden sisään, jolloin sitä kutsutaan lohkoksi. Ensimmäisessä esimerkissä näkemämme funktion runko on esimerkki lohkosta. Lohkoa kutsutaan myöskin nimellä yhdistetty lause, koska sen voidaan monessa tapauksessa käsittää olevan yksi lause. Tähän palaamme luvussa 4, kun käsittelemme valintojen tekemistä C++:ssa. Itse asiassa, aina kun voit C++:ssa sijoittaa lauseen, voit sijoittaa lauseen sijaan myöskin lohkon. Tästä johtuen lohkoja voi olla myös toisten lohkojen sisällä - tätä kutsutaan sisäkkäisyydeksi. Lohkoja voidaan sijoittaa sisäkkäin kuinka monta tahansa. Lohkolla on myös tärkeä merkitys muuttujien yhteydessä. Tähän palaamme kuitenkin vasta seuraavassa luvussa, kun käsittelemme muuttujien näkyvyysaluetta. 14 Ohjelman rakenne Jokainen C++-ohjelmasi koostuu yhdestä tai useammasta tiedostosta. Käytössäsi on kaksi erityyppistä tiedostoa, joihin voit sijoittaa lähdetekstiäsi: otsikkotiedostot ja lähdetekstitiedostot. Otsikkotiedostot sisältävät koodia, joka kertoo, minkä tyyppistä tietoa ohjelmasi tarvitsee sekä joitakin muita määrittelyjä. Tällaista tiedostoa kutsutaan otsikkotiedostoksi, koska yleensä ne sisällytetään muiden lähdetekstitiedostojen alkuun ( otsikoksi ). Otsikkotiedostot erotetaan muista tiedostoista käyttämällä tiedostoliitettä.h. Tämä on kuitenkin vapaaehtoista, ja joissakin järjestelmissä käytetäänkin muita merkintätapoja, kuten.hxx.

9 Perusasiat Lähdetekstitiedostot, joiden tiedostoliitteenä on.cpp, sisältävät funktioiden määrittelyjä - ohjelmasi suoritettavaa koodia. Kaikki sellaisten tyyppien ja muuttujien esittelyt ja määrittelyt, joita tarvitset.cpp-tiedostossa olevassa koodissa, tulee sisällyttää yhdestä tai useammasta otsikkotiedostosta.cpp-tiedoston alussa. Ohjelmatiedostot Ohjelma1.cpp #include <iostream> #Include eka.h #Include toka.h Funktioiden määrittelyt Globalien muuttujien määrittelyt jne. Ohjelma2.cpp #include "toka.h #Include vika.h Funktioiden määrittelyt Globalien muuttujien määrittelyt jne. Lisää standardin otsikkotiedoston sisällön Määriteltyjen otsikkotiedostojen sisältö sisällytetään.cpp - tiedostoon Otsikkotiedostot Eka.h Luokan (käyttäjän tyypin) määrittelyt Funktioiden määrittelyt Jne. Toka.h Luokan (käyttäjän tyypin) määrittelyt Funktioiden määrittelyt Jne. Vika.h Luokan (käyttäjän tyypin) määrittelyt Funktioiden määrittelyt Jne. Yllä oleva kuva esittää ohjelmaa, jossa lähdeteksti on kahdessa.cpp-tiedostossa ja kolmessa otsikkotiedostossa. Ensimmäinen.cpp-tiedosto käyttää kahta ensimmäistä otsikkotiedostoa ja toinen.cpp-tiedosto tarvitsee tietoa kahdesta jälkimmäisestä otsikkotiedostosta. Luvussa 10 käsittelemme lisää #include-komentoa. Kääntäjäsi mukana toimitetaan joukko standardiotsikkotiedostoja, jotka sisältävät standardikirjastojen tarvitsemia esittelyjä. Ne sisältävät esimerkiksi standardikirjaston funktioiden esittelyt. Yllä olevan kuvan ensimmäiseen.cpp-tiedostoon sisällytetään iostream-otsikkotiedosto, johon törmäsimme jo esimerkkiohjelmassakin. Kuten huomaat, tässä tiedoston nimellä ei ole lainkaan tiedostoliitettä. Jotta ANSI-standardiotsikkotiedostot erotettaisiin tavallisista otsikkotiedostoista, niiden tiedostonimissä ei ole lainkaan tiedostoliitettä. Kirjan kirjoitushetkellä tämä on varsin uusi lisäys ANSI-standardiin, joten törmäät varmastikin kääntäjiin, jotka yhä käyttävät.h -tiedostoliitettä standardiotsikkotiedostojen yhteydessä. Liitteessä C kuvataan ANSIstandardiotsikkotiedostot. Kääntäjäsi saattaa sisältää koko joukon muitakin otsikkotiedostoja, jotka ovat tarpeellisia esimerkiksi käyttöjärjestelmän kutsuissa tai muuten vain ohjelmointia helpottavia funktioita. Esimerkissämme käytettiin vain muutamia otsikkotiedostoja, mutta useimmissa C++sovelluksissa käytetään runsaasti muitakin. 15

10 C++ Ohjelmoijan käsikirja Suoritettavan tiedoston tekeminen lähdetekstitiedostoista Suoritettavan ohjelman teko C++-lähdetekstistä on perusteiltaan kaksivaiheinen prosessi. Ensimmäisessä vaiheessa kääntäjä muodostaa jokaisesta.cpp-tiedostosta objektitiedoston, joka sisältää konekielisen version lähdetekstistä. Toisessa vaiheessa linkkeri yhdistää kääntäjän tuottamat objektitiedostot tiedostoksi, joka sisältää täydellisen suoritettavan ohjelman. Otsikkotiedostojen sisältö sisällytetään ennen käännöstä. Lähdeteksti Lähdeteksti Lähdeteksti Jokaisesta.cpp - tiedostosta tulee yksi objektitiedosto. Kääntäjä Kääntäjä Kääntäjä Objektitiedosto Objektitiedosto Objektitiedosto Linkkeri yhdistää kaikki objektitiedostot ja tarvittavat kirjastot suoritettavaksi ohjelmaksi. Kirjasto Linkkeri Suoritettava.exe -tiedosto 16 Kuvassa on kolme lähdetekstitiedostoa, jotka käännetään kolmeksi vastaavaksi objektitiedostoksi. Näiden tiedostojen yhteydessä käytettävät tiedostoliitteet eroavat laitteistoympäristöstä toiseen, joten niitä ei tässä näytetä. Ohjelman muodostavat lähdetekstitiedostot voidaan kääntää riippumatta toisistaan joko erikseen tai yhdellä kääntäjän ajokerralla. Kääntäjä kuitenkin käsittelee jokaista lähdetekstitiedostoa erillisenä, ja muodostaa jokaisesta.cpptiedostosta oman objektitiedoston. Linkittäminen sitten yhdistää objektitiedostot ja muut tarpeelliset kirjastofunktiot yhdeksi suoritettavaksi tiedostoksi. Käytännössä kääntäminen on prosessi, jossa sama vaihe toistetaan useamman kerran, koska mitä todennäköisemmin olet tehnyt lähdetekstiin kirjoitusvirheitä tai muita virheitä. Kun olet poistanut virheet kaikista lähdetekstitiedostoista, voi siirtyä linkittämisvaiheeseen, jolloin saatat huomata, että uusia virheitä on ilmaantunut! Vaikka linkitysvaihe tuottaisi suoritettavan ohjelman, ohjelmassa saattaa silti olla loogisia virheitä; tämä tarkoittaa sitä, että ohjelma ei tee sitä mitä sen pitäisi tehdä. Korjataksesi tällaiset virheet, sinun täytyy palata muokkaamaan lähdetekstiä ja yrittää kääntää lähdeteksti uudelleen... Tarkastellaan seuraavaksi tarkemmin, mitä tapahtuu edellä mainituissa kahdessa vaiheessa, kääntämisessä ja linkittämisessä. Niissä tapahtuu taustalla mielenkiintoisia asioita.

11 Kääntäminen Kääntämisessä on kaksi päävaihetta, mutta siirtyminen vaiheesta toiseen on automaattinen. Ensimmäinen vaihe on esikääntäminen, joka suoritetaan ennen kääntämisvaihetta. Esikääntäminen muokkaa lähdetekstiä siihen sijoitettujen esikääntäjäkomentojen mukaan. Esimerkkinä on #include-esikäsittelijäkomento, joka lisää otsikkotiedoston sisällön.cpptiedostoon. Esikäsittelijäkomentoja on monia muitakin (kuten näemme luvussa 10). Perusasiat Otsikkotiedostojen sisältö sisällytetään ennen käännöstä. Muut esikääntäjäkomennot saattavat muokata tai ehdollisesti poistaa osan koodista. Kääntäjälle menevä lähdetekstitiedostoa on muokattu siten, että se ei sisällä enää esikäsittelijäkomentoja. Lähdeteksti Esikääntäjä Muokattu Lähdeteksti Kääntäjä Otsikkotiedosto Otsikkotiedosto Objektitiedosto (Konekieli) Tämä lähdetekstin muokkausmahdollisuus ennen käännöstä mahdollistaa joustavan, eri tietokoneiden ja käyttöjärjestelmien huomioon ottamisen. Koodi, jonka tarvitset jossain ympäristössä, saattaa olla eri kuin minkä tarvitset jossain toisessa ympäristössä, koska käytössä saattaa olla eri laitteisto tai käyttöjärjestelmä. Monissa tapauksissa voit kirjoittaa koodin eri ympäristöjä varten samaan lähdetekstitiedostoon. Tällöin koodi muokataan esikäännösvaiheessa käytössä olevan ympäristön mukaan. Vaikka esikääntäminen esitetäänkin edellä erillisenä vaiheena, sitä ei tavallisesti suoriteta kääntäjästä erillään. Kääntäjän käynnistäminen suorittaa esikääntämisen automaattisesti ennen varsinaista lähdetekstin kääntämistä. Linkittäminen Vaikka kääntäjä tuottaa lähdetekstitiedostosta konekieltä, se on vielä kaukana suoritettavasta ohjelmasta. Ensinnäkin eri objektitiedostojen välillä ei ole mitään liitoksia. Yhden lähdetekstitiedoston objektitiedostossa voi olla viittauksia funktioihin tai muihin nimettyihin asioihin toisissa lähdetekstitiedostoissa. Näitä viittauksia ei ole vielä tässä vaiheessa ratkaistu. Itse 17

12 C++ Ohjelmoijan käsikirja asiassa näiden funktioiden koodi ei ole edes vielä osana tiedostoa. Näiden kaikkien asioiden kanssa työskentelee linkkeri. Tarvittaessa Kirjastorutiinit Suoritettava tiedosto Objektitiedosto 1 Objektitiedosto 1 Objektitiedosto 2 Linkkeri Objektitiedosto 2 Viittaukset Objektitiedosto n Objektitiedosto n Kuten kuvasta näkyy, linkkeri yhdistää kaikkien objektitiedostojen koodin ja ratkaisee kaikki viittaukset niiden välillä. Se myöskin yhdistää koodiin kaikkien objektitiedostojen tarvitsemat kirjastofunktiot. Tämä on varsin yksinkertaistettu esitys linkkerin toiminnasta, koska oletamme, että kaikki viittaukset objektitiedostojen välillä tehdään suoritettavassa ohjelmassa staattisesti. Jotkut viittaukset voivat olla myöskin dynaamisia, mikä tarkoittaa, että viittaukset muodostetaan vasta suoritusaikana. Linkkeri liittää lähdetekstitiedostojen funktioiden väliset viittaukset toisiinsa staattisesti - eli ennen ohjelman suoritusta. Funktiot, jotka liitetään dynaamisesti - eli ohjelman suorituksen aikana - käännetään ja linkitetään suoritettavaan moduuliin, jota kutsutaan dynaamiseksi kirjastoksi tai jaetuksi kirjastoksi. Viittaukset dynaamisen kirjaston funktioihin ratkaistaan, kun ohjelma kutsuu funktiota, ei aikaisemmin. Dynaamisilla kirjastoilla on joitakin tärkeitä etuja. Tärkein on se, että dynaamisen kirjaston funktioita voidaan käyttää samanaikaisesti kaikista suorituksessa olevista ohjelmista. Tämä säästää muistia, koska yhdestä funktiosta tarvitaan vain yksi kopio. Toinen etu on se, että dynaamista kirjastoa ei tuoda muistiin ennen kuin jotain sen sisältämää funktiota kutsutaan. Tämä tarkoittaa sitä, että jos et käytä dynaamisen kirjaston yhtäkään funktiota, kirjasto ei varaa yhtään muistia. Dynaamisten kirjastojen käyttö riippuu suuresti käyttöjärjestelmästä, joten emme käsittele niitä tässä kirjassa enempää. 18

13 Merkit ja merkkijoukot Perusasiat Merkit, joita voit käyttää C++:ssa, ovat isot ja pienet kirjaimet A-Z ja a-z, numerot 0-9, välilyönti ja rivinvaihto, sarkainmerkki, sivunvaihto ja kellon koodinvaihtomerkki sekä seuraavat erikoismerkit: _ { } [ ] # ( ) < > % : ;.? * + - / ^ & ~! =, \ Näitä merkkejä kutsutaan myös symboleiksi (verrattuna numeroihin ja aakkosmerkkeihin sekä koodinvaihtomerkkeihin, joita ei varsinaisesti näytetä). Merkkien koodaus Huomaa, että edellä esitetty määritelmä C++:ssa käytettävissä olevista merkeistä ei kerro mitään varsinaisesta merkkien koodauksesta. Kääntäjäsi päättää, miten C++-lähdetekstissäsi käyttämäsi merkit esitetään tietokoneessa. PC-maailmassa merkit esitetään yleensä 8-bittisinä laajennettuina ASCII-koodeina (kuten ISO Latin-1), mutta muitakin koodaustapoja voitaisiin käyttää. ASCII-koodaukselle onkin useita erilaisia laajennuksia, jotka tukevat eri kieliä (kuten suomi). Suurtietokoneissa käytetään usein EBCDIC (Extended Binary Coded Decimal Interchange Code) -koodausta. Tämä on 8-bittinen koodaustapa, joka eroaa suuresti ASCIIkoodauksesta. Termillä Laajennettu ASCII-koodi tarkoitetaan 8-bittistä koodausta, jossa 128 ensimmäistä merkkiä ovat samat kuin normaalissa 7-bittisessä ASCII-koodissa. Liitteessä A luetellaan nämä merkit. Koodinvaihtomerkit Kun haluat käyttää merkkivakioita ohjelmissasi, tietyt merkit ovat ongelmallisia. Merkkivakio on ohjelmasi käyttämä tieto, joka voi olla joko yksittäinen merkki tai merkkijono, kuten esimerkissämme oli. Luonnollisestikaan et voi kirjoittaa esimerkiksi rivinvaihtoa tai sarkainmerkkiä, koska ne vain tekevät nimensä mukaan: siirtävät kontrollin seuraavalle riville tai seuraavaan sarkainkohtaan. Tällaisten merkkien kohdalla sinun tulee kirjoittaa merkin koodinvaihtomerkki. Koodinvaihtomerkit kirjoitetaan käyttämällä koodinvaihtomerkkiä, joka alkaa aina vinoviivalla \. Koodinvaihtomerkkejä ovat: Koodinvaihtomerkki Tarkoitus \n rivinvaihto \t sarake \v rivi 19

14 C++ Ohjelmoijan käsikirja Koodinvaihtomerkki Tarkoitus \b askelpalautin \r rivinpalautin \f sivunvaihto \a hälytys kello Näiden lisäksi on joitakin muita merkkejä, joita on vaikea esittää suoraan. Vinoviiva on luonnollisesti vaikea esittää, koska se aloittaa varsinaisen koodinvaihtomerkin. Ja vastaavia on muitakin: Koodinvaihtomerkki Tarkoitus \\ vinoviiva \' heittomerkki \" lainausmerkki \? kysymysmerkki Koska vinoviiva aloittaa koodinvaihtomerkin, ainoa tapa kirjoittaa vinoviiva merkkivakioon on kirjoittaa se kaksi kertaa. Koodinvaihtomerkkejä voidaan käyttää myös muiden kuin näppäimistösi tukeman kansallisen kielen merkkien kirjoituksessa. Tällöin voit kirjoittaa merkin heksadesimaali- (kantaluku 16) tai oktaaliarvon (kantaluku 8) vinoviivan perään. Tällä tavoin voit esittää kaikki merkit, koska käytät merkin numeroarvoa. C++:ssa heksadesimaaliluvut alkavat merkeillä x tai X, kuten esimerkiksi \x99a ja \XE3. Voit myös määritellä merkkejä käyttämällä korkeintaan kolmea oktaalilukua kenoviivan perässä, kuten \165. Koska tässä ei käytetä x tai X -merkkejä, koodi tulkitaan oktaaliluvuiksi. Kokeile itse - Koodinvaihtomerkkien käyttö Seuraavassa on esimerkki, jossa käytetään koodinvaihtomerkkejä näytölle tulostettavan viestin määrittelyssä. Nähdäksesi tuloksen itse, käännä, linkitä ja suorita alla oleva ohjelma. Kuten johdannossa kerrottiin, näiden vaiheiden suorittaminen riippuu kääntäjästäsi; lue lisätietoja kääntäjäsi ohjekirjoista. Jos löydät komennot edit, compile ja link (ja joissain kääntäjissä build ), onnistut kääntämisessä, linkittämisessä ja itse ohjelman suorituksessa. // Esimerkki 1.2 Koodinvaihtomerkkien käyttö #include <iostream> using namespace std; 20

15 Perusasiat int main() { cout << "\n\"vähiten sanottu\n\t\teniten tarkoitettu.\"\n\a"; return 0; } Kun käännät, linkität ja suoritat tämän ohjelman, näet seuraavanlaisen tulostuksen: Vähiten sanottu eniten tarkoitettu. Lisäksi sinun tulisi kuulla kellon ääni tai vastaava merkkiääni riippuen tietokoneesi ominaisuuksista. Kuinka se toimii Tulostettava merkkijono muodostuu niistä merkeistä, jotka ovat lauseen uloimpien lainausmerkkien sisäpuolella: cout << "\n\"vähiten sanottu\n\t\teniten tarkoitettu.\"\n\a"; Kaikki uloimpien lainausmerkkien sisäpuolella oleva lähetetään cout-oliolle. Merkkijonoa lainausmerkkien sisällä kutsutaan merkkijonovakioksi. Lainausmerkit kertovat, mistä merkkijonovakio alkaa ja mihin se päättyy; ne eivät kuulu itse merkkijonoon. Merkkijonovakiossa oleva vinoviiva tarkoittaa aina koodinvaihtomerkin alkamista, joten ensimmäinen cout-oliolle lähetettävä merkki on \n - rivinvaihto. Tämä sijoittaa näytön kursorin seuraavalle riville. Seuraava cout-oliolle lähetettävä merkki on koodinvaihtomerkki \, jolloin näytölle tulostuu lainausmerkki. Tämän perään tulostuu merkkijono: Vähiten sanottu. Seuraavaksi on jälleen rivinvaihto, \n, joten kohdistin siirtyy seuraavalle riville. Tämän jälkeen cout-oliolle lähetetään kaksi sarakemerkkiä \t\t, jolloin kohdistin siirtyy kaksi sarkainkohtaa oikealle. Tästä kohdasta eteenpäin tulostetaan merkkijono eniten tarkoitettu. ja perään tulostetaan vielä lainausmerkki (\ ). Lopuksi on vielä yksi rivinvaihto, joka siirtää kohdistimen jälleen seuraavalle riville, sekä \a, joka saa aikaan merkkiäänen. Sisempiä lainausmerkkejä ei tulkita merkkijonovakion alku- ja päätekohdiksi, koska niiden edellä on vinoviiva, eli ne tulkitaan koodinvaihtomerkeiksi. Jos käytössämme ei olisi koodinvaihtomerkkiä \, emme voisi mitenkään tulostaa lainausmerkkiä, koska se tulkittaisiin merkkijonon päättäväksi lainausmerkiksi. C++:ssa käytetään myös endl-nimeä, joka tarkoittaa tulostuslauseessa rivinvaihtomerkkiä. Käyttämällä endl-nimeä, edellä olevan esimerkin tulostuslause voitaisiin kirjoittaa seuraavasti: cout << endl << "\"Vähiten sanottu << endl 21

16 C++ Ohjelmoijan käsikirja << \t\teniten tarkoitettu.\ \a" << endl; Tämä lause lähettää peräkkäin viisi erillistä merkkijonovakiota cout-oliolle - endl, \ Vähiten sanottu, endl, \t\teniten tarkoitettu.\ \a ja endl. Tämä saa aikaan aivan saman tulostuksen kuin alkuperäinen lausekin. Huomaa, että viimeinen merkki sanassa endl on kirjain l, ei numero 1. Joskus saattaa olla vaikea erottaa nämä toisistaan. Sinun ei tarvitse valita käytätkö endl-sanaa vai vastaavaa koodinvaihtomerkkiä, kun haluat uuden rivin. Ne eivät ole toisiaan poissulkevia, joten voit käyttää niitä sekaisin miten haluat. Voimme esimerkiksi edelleen muokata tulostuslausetta ja saamme silti aivan saman lopputuloksen: cout << endl << "\"Vähiten sanottu\n\t\teniten tarkoitettu.\ \a" << endl; Tässä olemme käyttäneet endl-sanaa ensimmäisen ja viimeisen rivinvaihdon kohdalla. Keskimmäinen rivinvaihto on saatu aikaan koodinvaihtomerkillä. Merkit UCS-merkkijoukossa UCS (Universal Character Set) on ISO:n (International Standards Organization) standardi merkkien esittämiseksi 32-bittisinä. UCS on määritelty standardidokumentissa ISO/IEC UCS:n ideana on se, että voidaan kuvata kaikki kansallisten kielten merkit (kuten suomi, ranska, englanti, venäjä jne) sekä kaikki mahdolliset tarpeelliset symbolit yhdellä ja samalla merkkijoukolla. Et kuitenkaan tarvitse UCS-koodausta kovinkaan usein, mutta jos tarvitset, C++:ssa voidaan tämäkin tehdä. Kirjoittaaksesi UCS-merkin, kirjoitat yksinkertaisesti \unnnnnnnn, jossa NNNNNNNN on UCS-merkin heksadesimaalinen esitysmuoto. Latin-merkkijoukolla on UCS:ssä koodit, joissa neljä ensimmäistä numeroa ovat nollia, \u0000nnnn. Voit kirjoittaa tällaiset koodit jättämällä nollat pois, esimerkiksi \unnnn. 22 Tyhjät merkit Tyhjä merkki on C++:ssa termi, jolla tarkoitetaan välilyöntejä, pysty- ja vaakasuuntaisia sarkainmerkkejä sekä rivinvaihtomerkkejä. Monissa tapauksissa tyhjät merkit erottavat lauseen yhden osan toisesta osasta. Tällä tavoin kääntäjä pystyy erottamaan mihin yksi osa päättyy ja mistä toinen osa alkaa. Tutkitaan esimerkiksi seuraavaa koodia: int hedelma;

17 Perusasiat Tässä lauseessa on sana int, joka on tyypin nimi ja hedelma, joka on muuttujan nimi. Sanojen int ja hedelma välissä tulee olla vähintään yksi tyhjä merkki (yleensä välilyönti), jotta kääntäjä pystyy erottelemaan ne. Tämä siksi, että inthedelma olisi aivan kelvollinen muuttujan tai minkä tahansa muun asian nimi. Kääntäjä myös tulkitsisi sen tällaiseksi. Toisaalta, tutkitaan seuraavaa lausetta: hedelma = omenia + appelsiineja; Tyhjiä merkkejä ei tarvita hedelma ja = välissä, tai = ja omenia välissä, mutta voit kirjoittaa tyhjän merkin halutessasi. Tämä siitä syystä, että = ei ole kirjain eikä numero, joten kääntäjä pystyy erottamaan sen ympäristöstään. Samaten + -merkin ympärillä ei tarvita tyhjiä merkkejä. Olisit voinut kirjoittaa lauseen myös seuraavasti: hedelma = omenia + appelsiineja; Jos kirjoitat lauseen tällä tavalla, sinua tuskin kiitellään hyvästä ohjelmointityylistä, mutta kääntäjähän ei tästä välitä. Vaikka kääntäjä käyttääkin tyhjiä merkkejä erottamaan lauseen osia, se jättää ne muutoin huomioimatta. Tästä syystä voit lisätä lähdetekstiin niin paljon tyhjiä merkkejä kuin haluat saadaksesi sen esimerkiksi helpommin luettavaksi. Joissain ohjelmointikielissä lause päättyy rivin loppuun, mutta C++:ssa lause päättyy puolipisteeseen. Tämä mahdollistaa lauseen jakamisen useammalle riville, joten voit kirjoittaa lauseen seuraavasti: cout << endl << "\"Vähiten sanottu << endl << \t\teniten tarkoitettu.\ \a" << endl; Tai seuraavasti: cout << endl << "\"Vähiten sanottu << endl << \t\teniten tarkoitettu.\ \a" << endl; Ohjelmien kommentointi Ohjelmiesi kommentointi on erittäin tärkeää. Koodi, joka näyttää erittäin selkeältä kirjoitushetkellä, voi näyttää erittäin sekavalta, kun luet sitä kuukauden päästä. Ohjelmat kommentoidaan käyttämällä kommentteja. C++:ssa on kahdenlaisia kommentteja: yhden ja useamman rivin mittaiset kommentit. Yhden rivin kommentti aloitetaan kahdella kauttaviivalla: // Ohjelma, joka ennustaa pörssikursseja 23

18 C++ Ohjelmoijan käsikirja Kääntäjä ei huomioi riviltä mitään kahden kauttaviivan jälkeen. Tämä ei kuitenkaan tarkoita sitä, että rivillä voisi olla pelkästään kommentti. Voit käyttää tätä kommentointitapaa lauseen kommentoimiseen: pituus = kutista(pituus, lampotila); // huomioidaan lämpötila pituudessa Voit myös tilapäisesti poistaa rivin lähdetekstistä lisäämällä rivin alkuun kaksi jakomerkkiä: // pituus = kutista(pituus, lampotila); // huomioidaan lämpötila pituudessa Tämä muuttaa lauseen kommentiksi. Tällaista tapaa tarvitset esimerkiksi testatessasi ohjelmaa. Kaikki ensimmäisistä // -merkeistä rivin loppuun saakka jätetään huomioimatta, mukaan lukien seuraavat //-merkit. Monirivistä kommenttia käytetään, kun halutaan kirjoittaa runsaammin - esimerkiksi kun halutaan selittää algoritmin toimintaa. Tällainen kommentti alkaa /*-merkeillä ja päättyy */- merkkeihin. Kaikki näiden merkkien välillä oleva jätetään huomioimatta. Näin voidaan kirjoittaa selkeästi erottuvia kommentteja: /***************************************** * Tämä funktio ennustaa pörssikursseja * * käyttämälää tealeaf-simulaatiota * ******************************************/ Voit käyttää tätä kommentointitapaa myös poistaaksesi lähdetekstistä lohkon koodia. Lisää /* lohkon alkuun ja */ lohkon loppuun. Huomioi kuitenkin, että /*... */ -kommentteja ei voi kirjoittaa sisäkkäin. Tämä siitä syystä, että sisempi */ kohdistetaan ulompaan kommenttiin: // Monirivisiä kommentteja ei voi kirjoittaa sisäkkäin /* Tämä aloittaa ulomman kommentin /* Tämä on sisempi kommentti, mutta sen alkukohtaa ei huomata, koska ulompi kommentti on voimassa. Päinvastoin, sisemmän kommentin päättäminen tulkitaan ulomman kommentin loppumiseksi. */ Tämä saa aikaan kääntäjän virheilmoituksen, koska kääntäjä yrittää kääntää tätä ulomman kommentin osaa C++ -koodina. */ Ulomman kommentin loppuosa jätetään tässä roikkumaan ja kääntäjä yrittää kääntää sitä, mikä luonnollisesti johtaa virheeseen. Tästä syystä //-tyyppisen kommentin käyttö on C++-ohjelmissa eniten käytetty.! Saatat myös kuulla monirivistä kommentointia kutsuttavan C-tyyliseksi kommentoinniksi. Tämä siitä syystä, että /*... */ -kommentit ovat ainoat mahdolliset C-kielessä. 24

19 Standardikirjasto Perusasiat Standardikirjasto sisältää suuren joukon funktioita sekä muita asioita, jotka tukevat ja laajentavat C++ -kielen peruskielen ominaisuuksia. Standardikirjaston sisältö on yhtä paljon osa C++kieltä kuin on itse kielen syntaksi ja semantiikkakin. C++:n standardikirjasto määrittelee molemmat ja jokaisen standardinmukaisen kääntäjän mukana tulee täydellinen standardikirjasto. Täten standardikirjaston laajuus on varsin huomattava. Saat käyttöösi suuren joukon toiminnallisuutta alkaen välttämättömistä osista, kuten peruskielen tuki, syöttö- ja tulostusfunktiot ja poikkeusten käsittely (poikkeus on epätavallinen tapahtuma ohjelman suorituksessa - yleensä jonkinlainen virhetilanne) ja loppuen hyötyfunktioihin, matemaattisiin funktioihin sekä suureen joukkoon testattuja toimintoja, joilla voit tallettaa ja käsitellä tietoa ohjelman suorituksen aikana. Jotta voisit käyttää C++-kieltä mahdollisimman tehokkaasti, sinun tulisi tuntea standardikirjasto mahdollisimman hyvin. Moniin standardikirjaston ominaisuuksiin palataan myöhemmin, kun käsittelemme lisää C++-kieltä. Luonnollisestikaan emme käy läpi kaikkia standardikirjaston ominaisuuksia emmekä kovinkaan syvällisesti. Tarvittaisiin toinen tämänkokoinen kirja, jos standardikirjasto käytäisiin läpi perusteellisesti. Standardikirjaston käytön vaatimat esittelyt ja määrittelyt ovat standardiotsikkotiedostoissa. Joissakin tapauksissa standardiotsikkotiedosto sisällytetään automaattisesti lähdetekstiisi, mutta useimmiten sinun tulee tehdä se itse #include-esikäsittelijäkomennolla. Liitteessä C on täydellinen lista otsikkotiedostoista sekä kuvaus, millaisia toimintoja mikäkin tukee. Lähes kaikki C++:n standardikirjastossa on määritelty nimiavaruuteen std. Tämä tarkoittaa sitä, että kaikki käyttämäsi nimet alkavat std-etuliitteellä. Kuten jo aikaisemmin näimme, kun viittaat johonkin standardikirjastossa, sinun tulee kirjoittaa nimen eteen std, kuten seuraavassa: std::cout << Paras paikka aloittaa on alkukohta ; Vaihtoehtoisesti voit sijoittaa using-komennon lähdetekstin alkuun: using namespace std; Tällöin voit jättää std-etuliitteen kirjoittamatta, koska std on automaattisesti käytössä: cout << Paras paikka aloittaa on alkukohta ; C++-ohjelmointi Koska C++ on perinyt alkuperäisen C-kielen tehokkuuden ja joustavuuden, ja jota on edelleen laajennettu, voit kirjoittaa suoritusajaltaan kriittisiä, koneläheisiä ohjelmia sekä ratkaista ongelmia, jotka ovat perinteisellä proseduraalisella lähestymistavalla mielekkäämpiä. C++:n suurin vahvuus on kuitenkin sen tehokkuus ja olio-ominaisuudet. Tämä mahdollistaa sellaisten ohjelmien kirjoittamisen, jotka ovat vähemmän virhealttiita, helpompia ylläpitää, yksinkertaisempia laajentaa ja helpompia ymmärtää kuin vastaavat proseduraaliset ratkaisut. 25

20 C++ Ohjelmoijan käsikirja Näiden kahden ohjelmointimetodologian välillä on perustavanlaatuisia eroja, joten katsotaan seuraavaksi, miten ne eroavat toisistaan sekä joitakin syitä, miksi oliopohjainen ratkaisutapa on niin kiehtova. Proseduraalinen ja oliopohjainen ohjelmointi Kun tarkastellaan historiaa, lähes kaikki ohjelmat ovat rakenteeltaan proseduraalisia. Jos haluat ratkaista ongelman proseduraalisella ohjelmoinnilla, keskityt prosessiin, jonka ohjelmasi täytyy toteuttaa ongelman ratkaisemiseksi. Karkeana hahmotelmana vaiheista voidaan pitää seuraavaa (olettaen, että tarpeet on määritelty tarkasti): Teet selkeän korkean tason määrittelyn koko prosessista, jonka ohjelmasi täytyy toteuttaa. Jaat kokonaisprosessin osiin, jotka ovat sekä käsiteltäviä että itsenäisiä. Nämä osat vastaavat tavallisesti funktioita. Jaat kunkin osan edelleen yksityiskohtaisiin, järjestyksessä suoritettaviin toimenpiteisiin. Nämä toimenpiteet vastaavat kutakuinkin ohjelmointikielen lauseita. 26 Ohjelmoit funktiot, jotka käsittelevät perustietotyyppejä: numeroita, merkkejä ja merkkijonoja. Oliopohjainen ratkaisutapa on varsin erilainen, vaikka kaiken perusteena oleva ongelman tarkka määrittely onkin samankaltainen: Ongelman määrittelyn jälkeen ratkaiset, millaisia olioita ongelma sisältää. Jos ohjelmasi käsittelee esimerkiksi jääkiekon pelaajia, varmastikin yksi tällainen olio on JaakiekonPelaaja. Jos ohjelmasi on kirjanpidon sovellus, tarvitset varmastikin oliota kuten Tili ja Siirto. Tässä yhteydessä määrittelet myöskin operaatiot, jotka ohjelman tulee pystyä suorittamaan kunkin olion kohdalla. Tuloksena on joukko sovellukseen kuuluvia tietotyyppejä, joita sitten käytät ohjelmaa kirjoittaessasi. Teet yksityiskohtaisen suunnitelman kustakin uudesta ongelman ratkaisemiseen tarvittavasta tietotyypistä. Tähän kuuluvat operaatiot, jotka tulee pystyä suorittamaan kunkin tietotyypin kohdalla. Ilmaiset ohjelman logiikan uusien tietotyyppien avulla sekä niille sallituilla operaatioilla. Oliopohjaisen ratkaisun lähdeteksti on aivan erilainen kuin vastaavan proseduraalisen, ja aivan varmasti helppotajuisempi. Oletetaan, että olet toteuttamassa ohjelmaa, joka käsittelee erilaisia laatikoita. Yhtenä mahdollisena vaatimuksena tällaiselle ohjelmalle voisi olla, että useista pienemmistä laatikoista voidaan muodostaa suurempia laatikoita. Proseduraalisessa ratkaisussa sinun tulisi tallettaa kunkin laatikon leveys, korkeus ja syvyys joukkoon erillisiä muuttujia. Uuden laatikon, joka muodostuu useista pienemmistä laatikoista, mitat täytyy laskea erikseen kunkin laatikon ulkomittojen mukaan. Lisäksi täytyisi huomioida mahdolliset säännöt laatikoiden muodostamiseksi.

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

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

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

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

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

5. HelloWorld-ohjelma 5.1

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

Lisätiedot

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

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

Lisätiedot

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

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

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, literaalivakio, nimetty vakio Tiedon merkkipohjainen tulostaminen 1 Tunnus Java tunnus Java-kirjain Java-numero

Lisätiedot

5. HelloWorld-ohjelma 5.1

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

Lisätiedot

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

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

C-ohjelmoinnin peruskurssi. Pasi Sarolahti

C-ohjelmoinnin peruskurssi. Pasi Sarolahti C! C-ohjelmoinnin peruskurssi Pasi Sarolahti Mitä haluan oppia C-kurssilla? ja miksi? Tutustu lähimpään naapuriin Keskustelkaa miksi halusitte / jouduitte tulemaan kurssille 3 minuuttia è kootaan vastauksia

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

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

C++ Ohjelmoijan käsikirja. Johdanto

C++ Ohjelmoijan käsikirja. Johdanto Johdanto C++ Ohjelmoijan käsikirja Johdanto Tervetuloa Inside C++-kirjan pariin. Tämä on opaskirja standardi C++:n käyttöön. Käsittelemme kirjassa kaikki syntaksin, kieliopin, olio-ohjelmoinnin ja standardikirjastojen

Lisätiedot

812347A Olio-ohjelmointi, 2015 syksy 2. vsk. X Poikkeusten käsittelystä

812347A Olio-ohjelmointi, 2015 syksy 2. vsk. X Poikkeusten käsittelystä 812347A Olio-ohjelmointi, 2015 syksy 2. vsk X Poikkeusten käsittelystä Sisältö 1. Yleistä poikkeusten käsittelystä 2. Poikkeuskäsittelyn perusteita C++:ssa 3. Standardissa määritellyt poikkeukset 4. Poikkeusvarmuus

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

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

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

Operaattoreiden ylikuormitus. Operaattoreiden kuormitus. Operaattoreiden kuormitus. Operaattoreista. Kuormituksesta

Operaattoreiden ylikuormitus. Operaattoreiden kuormitus. Operaattoreiden kuormitus. Operaattoreista. Kuormituksesta C++ - perusteet Java-osaajille luento 5/7: operaattoreiden ylikuormitus, oliotaulukko, parametrien oletusarvot, komentoriviparametrit, constant, inline, Operaattoreiden ylikuormitus Operaattoreiden kuormitus

Lisätiedot

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

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

Lisätiedot

Java-kielen perusteet

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

Lisätiedot

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

Esimerkkiprojekti. Mallivastauksen löydät Wroxin www-sivuilta. Kenttä Tyyppi Max.pituus Rajoitukset/Kommentit

Esimerkkiprojekti. Mallivastauksen löydät Wroxin www-sivuilta. Kenttä Tyyppi Max.pituus Rajoitukset/Kommentit Liite E - Esimerkkiprojekti E Esimerkkiprojekti Olet lukenut koko kirjan. Olet sulattanut kaiken tekstin, Nyt on aika soveltaa oppimiasi uusia asioita pienen, mutta täydellisesti muotoiltuun, projektiin.

Lisätiedot

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

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

ELM GROUP 04. Teemu Laakso Henrik Talarmo

ELM GROUP 04. Teemu Laakso Henrik Talarmo ELM GROUP 04 Teemu Laakso Henrik Talarmo 23. marraskuuta 2017 Sisältö 1 Johdanto 1 2 Ominaisuuksia 2 2.1 Muuttujat ja tietorakenteet...................... 2 2.2 Funktiot................................

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

Tutoriaaliläsnäoloista

Tutoriaaliläsnäoloista Tutoriaaliläsnäoloista Tutoriaaliläsnäolokierroksella voi nyt täyttää anomuksen läsnäolon merkitsemisestä Esim. tagi ei toiminut, korvavaltimon leikkaus, yms. Hyväksyn näitä omaa harkintaa käyttäen Tarkoitus

Lisätiedot

11/20: Konepelti auki

11/20: Konepelti auki Ohjelmointi 1 / syksy 2007 11/20: Konepelti auki Paavo Nieminen nieminen@jyu.fi Tietotekniikan laitos Informaatioteknologian tiedekunta Jyväskylän yliopisto Ohjelmointi 1 / syksy 2007 p.1/11 Tämän luennon

Lisätiedot

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

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python Ohjelmoinnin perusteet Y Python T-106.1208 20.1.2010 T-106.1208 Ohjelmoinnin perusteet Y 20.1.2010 1 / 40 Arvon pyytäminen käyttäjältä Käyttäjän antaman arvon voi lukea raw_input-käskyllä. Käskyn sulkujen

Lisätiedot

ITKP102 Ohjelmointi 1 (6 op)

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

Lisätiedot

Concurrency - Rinnakkaisuus. Group: 9 Joni Laine Juho Vähätalo

Concurrency - Rinnakkaisuus. Group: 9 Joni Laine Juho Vähätalo Concurrency - Rinnakkaisuus Group: 9 Joni Laine Juho Vähätalo Sisällysluettelo 1. Johdanto... 3 2. C++ thread... 4 3. Python multiprocessing... 6 4. Java ExecutorService... 8 5. Yhteenveto... 9 6. Lähteet...

Lisätiedot

Ohjelmoinnin perusteet, syksy 2006

Ohjelmoinnin perusteet, syksy 2006 Ohjelmoinnin perusteet, syksy 2006 Esimerkkivastaukset 1. harjoituksiin. Alkuperäiset esimerkkivastaukset laati Jari Suominen. Vastauksia muokkasi Jukka Stenlund. 1. Esitä seuraavan algoritmin tila jokaisen

Lisätiedot

Apuja ohjelmointiin» Yleisiä virheitä

Apuja ohjelmointiin» Yleisiä virheitä Apuja ohjelmointiin» Yleisiä virheitä Ohjelmaa kirjoittaessasi saattaa Visual Studio ilmoittaa monenlaisista virheistä "punakynällä". Usein tämä johtuu vain siitä, että virheitä näytetään vaikket olisi

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

Virtuaalifunktiot ja polymorfismi

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

Lisätiedot

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

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

Alkuarvot ja tyyppimuunnokset (1/5) Alkuarvot ja tyyppimuunnokset (2/5) Alkuarvot ja tyyppimuunnokset (3/5)

Alkuarvot ja tyyppimuunnokset (1/5) Alkuarvot ja tyyppimuunnokset (2/5) Alkuarvot ja tyyppimuunnokset (3/5) Alkuarvot ja tyyppimuunnokset (1/5) Aiemmin olemme jo antaneet muuttujille alkuarvoja, esimerkiksi: int luku = 123; Alkuarvon on oltava muuttujan tietotyypin mukainen, esimerkiksi int-muuttujilla kokonaisluku,

Lisätiedot

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python Ohjelmoinnin perusteet Y Python T-106.1208 2.3.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

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

Rekursiolause. Laskennan teorian opintopiiri. Sebastian Björkqvist. 23. helmikuuta Tiivistelmä

Rekursiolause. Laskennan teorian opintopiiri. Sebastian Björkqvist. 23. helmikuuta Tiivistelmä Rekursiolause Laskennan teorian opintopiiri Sebastian Björkqvist 23. helmikuuta 2014 Tiivistelmä Työssä käydään läpi itsereplikoituvien ohjelmien toimintaa sekä esitetään ja todistetaan rekursiolause,

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

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

Ohjelman virheet ja poikkeusten käsittely

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

Lisätiedot

Ohjelmointi 1. Kumppanit

Ohjelmointi 1. Kumppanit Ohjelmointi 1 Kumppanit November 20, 2012 2 Contents 1 Mitä ohjelmointi on 7 2 Ensimmäinen C#-ohjelma 9 2.1 Ohjelman kirjoittaminen......................... 9 A Liite 11 3 4 CONTENTS Esipuhe Esipuhe 5

Lisätiedot

Ohjelmoinnin perusteet Y Python

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

Lisätiedot

Toinen harjoitustyö. ASCII-grafiikkaa 2017

Toinen harjoitustyö. ASCII-grafiikkaa 2017 Toinen harjoitustyö ASCII-grafiikkaa 2017 Yleistä Tehtävä: tee Javalla ASCII-merkkeinä esitettyä grafiikkaa käsittelevä ASCIIArt17-ohjelma omia operaatioita ja taulukoita käyttäen. Työ tehdään pääosin

Lisätiedot

3. Muuttujat ja operaatiot 3.1

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

Lisätiedot

14. Hyvä ohjelmointitapa 14.1

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

Lisätiedot

7. Näytölle tulostaminen 7.1

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

Lisätiedot

815338A Ohjelmointikielten periaatteet Harjoitus 6 Vastaukset

815338A Ohjelmointikielten periaatteet Harjoitus 6 Vastaukset 815338A Ohjelmointikielten periaatteet 2015-2016. Harjoitus 6 Vastaukset Harjoituksen aiheena on funktionaalinen ohjelmointi Scheme- ja Haskell-kielillä. Voit suorittaa ohjelmat osoitteessa https://ideone.com/

Lisätiedot

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

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

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

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

IDL - proseduurit. ATK tähtitieteessä. IDL - proseduurit

IDL - proseduurit. ATK tähtitieteessä. IDL - proseduurit IDL - proseduurit 25. huhtikuuta 2017 Viimeksi käsiteltiin IDL:n interaktiivista käyttöä, mutta tämä on hyvin kömpelöä monimutkaisempia asioita tehtäessä. IDL:llä on mahdollista tehdä ns. proseduuri-tiedostoja,

Lisätiedot

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

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

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

Periytyminen. Luokat ja olio-ohjelmointi

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

Lisätiedot

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

1. Olio-ohjelmointi 1.1

1. Olio-ohjelmointi 1.1 1. Olio-ohjelmointi 1.1 Sisällys Olio-ohjelmointi on eräs ohjelmointiparadigma. Olio-ohjelmoinnin muotoja. Ohjelmiston analyysi ja suunnittelu. Olioparadigman etuja ja kritiikkiä. 1.2 Ohjelmointiparadigmoja

Lisätiedot

Metodit. Metodien määrittely. Metodin parametrit ja paluuarvo. Metodien suorittaminen eli kutsuminen. Metodien kuormittaminen

Metodit. Metodien määrittely. Metodin parametrit ja paluuarvo. Metodien suorittaminen eli kutsuminen. Metodien kuormittaminen Metodit Metodien määrittely Metodin parametrit ja paluuarvo Metodien suorittaminen eli kutsuminen Metodien kuormittaminen 1 Mikä on metodi? Metodi on luokan sisällä oleva yhteenkuuluvien toimintojen kokonaisuus

Lisätiedot

Harjoitus 2 (viikko 45)

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

Lisätiedot

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

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

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

Lisätiedot

1. Omat operaatiot 1.1

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

Lisätiedot

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

Perustietotyypit ja laskutoimitukset

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

Lisätiedot

Harjoitus 5 (viikko 48)

Harjoitus 5 (viikko 48) Moni tämän harjoituksen tehtävistä liittyy joko suoraan tai epäsuorasti kurssin toiseen harjoitustyöhön. Harjoitustyö edistyy sitä paremmin, mitä enemmän tehtäviä ratkaiset. Mikäli tehtävissä on jotain

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

Harjoitus 3 (viikko 39)

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

Lisätiedot

Perusteet. Pasi Sarolahti Aalto University School of Electrical Engineering. C-ohjelmointi Kevät Pasi Sarolahti

Perusteet. Pasi Sarolahti Aalto University School of Electrical Engineering. C-ohjelmointi Kevät Pasi Sarolahti C! Perusteet 19.1.2017 Palautteesta (1. kierros toistaiseksi) (Erittäin) helppoa Miksi vain puolet pisteistä? Vaikeinta oli ohjelmointiympäristön asennus ja käyttö Ei selvää että main funktion pitikin

Lisätiedot

Perusteet. Pasi Sarolahti Aalto University School of Electrical Engineering. C-ohjelmointi Kevät Pasi Sarolahti

Perusteet. Pasi Sarolahti Aalto University School of Electrical Engineering. C-ohjelmointi Kevät Pasi Sarolahti C! Perusteet 19.1.2017 Palautteesta (1. kierros toistaiseksi) Toistaiseksi helppoa Miksi vain puolet pisteistä? Vaikeinta oli ohjelmointiympäristön asennus ja käyttö Vaikeaa eroavuudet Pythonin ja C:n

Lisätiedot

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

4. Luokan testaus ja käyttö olion kautta 4.1

4. Luokan testaus ja käyttö olion kautta 4.1 4. Luokan testaus ja käyttö olion kautta 4.1 Olion luominen luokasta Java-kielessä olio määritellään joko luokan edustajaksi tai taulukoksi. Olio on joukko keskusmuistissa olevia tietoja. Oliota käsitellään

Lisätiedot

8. Näppäimistöltä lukeminen 8.1

8. Näppäimistöltä lukeminen 8.1 8. Näppäimistöltä lukeminen 8.1 Sisällys Arvojen lukeminen näppäimistöltä Java-kielessä. In-luokka. In-luokka, käännös ja tulkinta Scanner-luokka. 8.2 Yleistä Näppäimistöltä annettujen arvojen (syötteiden)

Lisätiedot

ITKP102 Ohjelmointi 1 (6 op)

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

Lisätiedot

Hyvän salasanan tunnusmerkit Hyökkääjästä salasanan pitää näyttää satunnaiselta merkkijonolta. Hyvän salasanan luominen: Luo mahdollisimman pitkä

Hyvän salasanan tunnusmerkit Hyökkääjästä salasanan pitää näyttää satunnaiselta merkkijonolta. Hyvän salasanan luominen: Luo mahdollisimman pitkä Hyvä Salis Hyvän salasanan tunnusmerkit Hyökkääjästä salasanan pitää näyttää satunnaiselta merkkijonolta. Hyvän salasanan luominen: Luo mahdollisimman pitkä salasana. Jokainen salasanaan lisäämäsi kirjain

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

13. Hyvä ohjelmointitapa (osa 1) 13.1

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

Lisätiedot

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

PERL. TIE Principles of Programming Languages. Ryhmä 4: Joonas Lång & Jasmin Laitamäki

PERL. TIE Principles of Programming Languages. Ryhmä 4: Joonas Lång & Jasmin Laitamäki PERL TIE-20306 Principles of Programming Languages Ryhmä 4: Joonas Lång & Jasmin Laitamäki 1. Johdanto Perl on ohjelmointikielten perhe, johon kuuluu Perl 5 ja Perl 6. Kielet ovat kuitenkin erilliset ohjelmointikielet

Lisätiedot

11. Javan toistorakenteet 11.1

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

Lisätiedot

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

Ohjelmoinnin peruskurssi Y1

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

Lisätiedot

Ohjelmoinnin perusteet Y Python

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

Lisätiedot

Kirjoita oma versio funktioista strcpy ja strcat, jotka saavat parametrinaan kaksi merkkiosoitinta.

Kirjoita oma versio funktioista strcpy ja strcat, jotka saavat parametrinaan kaksi merkkiosoitinta. Tehtävä 63. Kirjoita oma versio funktiosta strcmp(),joka saa parametrinaan kaksi merkkiosoitinta. Tee ohjelma, jossa luetaan kaksi merkkijonoa, joita sitten verrataan ko. funktiolla. Tehtävä 64. Kirjoita

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

Tietotekniikan valintakoe

Tietotekniikan valintakoe Jyväskylän yliopisto Tietotekniikan laitos Tietotekniikan valintakoe 2..22 Vastaa kahteen seuraavista kolmesta tehtävästä. Kukin tehtävä arvostellaan kokonaislukuasteikolla - 25. Jos vastaat useampaan

Lisätiedot

Harjoitustyön testaus. Juha Taina

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

Lisätiedot

Ohjelmoinnin 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

Toinen harjoitustyö. ASCII-grafiikkaa

Toinen harjoitustyö. ASCII-grafiikkaa Toinen harjoitustyö ASCII-grafiikkaa Yleistä Tehtävä: tee Javalla ASCII-merkkeinä esitettyä grafiikkaa käsittelevä ASCIIArt-ohjelma omia operaatioita ja taulukoita käyttäen. Työ tehdään pääosin itse. Ideoita

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