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

Koko: px
Aloita esitys sivulta:

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

Transkriptio

1 Tämän materiaalin lähteenä on käytetty osoitteesta löytyvää C+ + Language Tutorial. Tämän osan tarkoituksena on pääasiassa kerrata C-kielestä tuttuja perusasioita sekä opetella muutama C++-kielen keskeinen asia. Table of Contents 1 C++-ohjelman rakenne Muuttujat ja tietotyypit Mikä on muuttuja? C++:n tietotyypit Muuttujan nimeäminen, varatut sanat Muuttujan määrittely Sijoituslauseesta C++:n merkkijono string Totuusarvo-tietotyyppi Muuttujien näkyvyysalue Määritellyt vakiot Syöttö- ja tulostusvirrat Tulostusvirta cout Syöttövirta cin Operaattorit Sijoitusoperaattori Aritmeettiset operaattorit (+, -, *, / ja %) Yhdistetyt aritmeettiset ja sijoitusoperaattorit Lisäys ja vähennys yhdellä (++ ja --) Vertailuoperaattorit (==,!=, <, >, <=, >=) Loogiset operaattorit (&&, ja!) Ehdollinen operaattori (?) Bittioperaattorit (&,, ~, >>, <<) Tyypinmuunnosoperaattori ( ( ) ) Muuttujan koko (sizeof()) Operaattorien suoritusjärjestys eli presedenssi Kontrollirakenteet If - else if - else Silmukat While Do-while For Hyppylauseet

2 5.3.1 Break Continue Monivalinta: switch-case Funktiot Arvoparametrillinen funktio Muuttujaparametrillinen funktio ja osoitin Viittausparametrillinen funktio (C++) Funktion ylikuormaus (overloading) Taulukko Perusteita Taulukko ja osoitin Tietue C++-ohjelman rakenne C++-ohjelman rakenne: #include <iostream> using namespace std; int main () // Tämä on kommenttimerkki. //Tänne kirjoitetaan ohjelma. return 0; Ensimmäisellä rivillä otetaan käyttöön C++:n syöttö- ja tulostuskirjasto iostream *. Huomaa, että C-kielessä käytettyä.h-tarkenninta ei käytetä. Toisella rivillä määritellään, että käytetään std-nimiavaruutta (tästä myöhemmin lisää). Pääohjelma alkaa aina rivillä int main(). C++:ssa ei tarvitse käyttää void-tietotyyppiä jos * Vastaa C-kielen kirjastoa stdio.h 2

3 funktio ei ota parametreja, mutta halutessa voidin voi sulkeisiin kirjoittaa, se ei ole virhe. Pääohjelman on palautettava arvo (tässä int), eli C++:ssa ei ole sallittua, että paluuarvon tyyppi on void **. Varsinainen ohjelmakoodi kirjoitetaan lohkosulkujen sisään. Pääohjelman on palautettava arvo. Yleinen käytäntö on, että jos ohjelman suoritus onnistui virheittä, palautetaan 0. C++:n oma kommenttimerkki on //. Myös C-kielen /* */ kommentti toimii. Edellinen on käyttökelpoinen jos kommentoidaan vain yksi rivi. Pidemmän pätkän kommentoinnissa jälkimmäinen on händimpi. 2 Muuttujat ja tietotyypit 2.1 Mikä on muuttuja? Tietokone säilyttää väliaikaista tietoa RAM-muistissa eli keskusmuistissa. Ohjelman suorituksen aikana tietyt muistialueet ovat ohjelman käytössä niin, että sinne voidaan tallentaa tietoa. Muuttuja on yhden tai useamman muistipaikan nimi. Itse muistipaikan fyysinen sijainti vaihtuu joka kerran kun ohjelmaa ajetaan, mutta sen nimi säilyy. Ohjelmoijan ei siis tarvitse välittää siitä, missä fyysisessä muistipaikassa tieto sijaitsee. Esimerkiksi lauseella: char c; Varataan muistista tietotyyppiä char oleva muuttuja ja annetaan sille nimeksi c. Char-tietotyypin koko on aina yksi tavu (byte) ja se sisältää 8 bittiä *. Muiden tietotyyppien koot saattavat vaihdella ** void main(void) on virheellinen määritys. Se on huono ohjelmointitapa myös C-kielessä vaikka monet oppikirjatkin sitä käyttävät. * Tarkalleen ottaen bittien määrä tavussa vaihtelee sovelluksesta riippuen. Nykyaikaisessa tietokonetekniikassa tavu on 3

4 prosessorista ja käyttöjärjestelmästä riippuen. 8 bitillä voi esittää 2 8 = 256 eri lukua. Jos luvun etumerkki otetaan huomioon (signed int) meillä on käytössä luvut ja jos etumerkkiä ei oteta huomioon (unsigned int) luvut Tietotyyppi char on siinä mielessä eritysasemassa, että sitä käytetään myös merkkien esittämiseen (vaikka se on siis kokonaislukutyyppi). Se, mikä merkki vastaa mitäkin lukua, määritellään ASCIIkooditaulukon avulla **. Esimerkiksi desimaalilukua 64 vastaa kirjain A, lukua 65 kirjain B jne. Muistipaikkaan voidaan siis tallentaa tietoa sen nimen perusteella: c=1; Sijoitetaan muuttujaan (muistipaikkaan) c luku 1. c='a'; Sijoitetaan muuttujaan c merkki 'A'. Kertausta C-kielestä: Yksittäiset merkit tulevat aina yksinkertaisten hipsujen ' ' sisään. Merkkijonot tulevat lainausmerkkien sisään C++:n tietotyypit Oheiseen taulukkoon on koottu C++:n tietotyyppien nimet, koot tavuina ja lukualueet. Name Description Size* Range* char Character or small integer. 1byte short int (short) Short Integer. 2bytes int Integer. 4bytes long int (long) signed: -128 to 127 unsigned: 0 to 255 signed: to unsigned: 0 to signed: to unsigned: 0 to Long integer. 4bytes signed: to kuitenkin aina 8 bittiä. ** ks. esim 4

5 bool Boolean value. It can take one of two values: true or false. 1byte unsigned: 0 to true or false float Floating point number. 4bytes +/- 3.4e +/- 38 (~7 digits) double Double precision floating point number. 8bytes +/- 1.7e +/- 308 (~15 digits) long double Long double precision floating point number. 8bytes +/- 1.7e +/- 308 (~15 digits) wchar_t Wide character. 2 or 4 bytes 1 wide character Tietotyypin int koko riippuu järjestelmän sananpituudesta (word length) ja muut tyypit suhteutetaan siihen. Siten 32-bittisissä järjestelmissä int on 4 tavua (4*8=32) ja 64-bittisissä 8 tavua (8*8=64). 2.3 Muuttujan nimeäminen, varatut sanat Muuttujan nimi saa sisältää vain kirjaimia (skandimerkkejä ei voi käyttää), numeroita 0-9 tai alaviivan _. Nimi ei voi alkaa numerolla ja alaviivan käyttöä ensimmäisenä merkkinä on syytä välttää. C++ on case-sensitiivinen eli isot ja pienet kirjaimet tarkoittavat eri asiaa. Muuttujia nimetessä ei voi käyttää seuraavia sanoja, jotka ovat C++-kielen varatut sanat (reserved words): asm, auto, bool, break, case, catch, char, class, const, const_cast, continue, default, delete, do, double, dynamic_cast, else, enum, explicit, export, extern, false, float, for, friend, goto, if, inline, int, long, mutable, namespace, new, operator, private, protected, public, register, reinterpret_cast, return, short, signed, sizeof, static, static_cast, struct, switch, template, this, throw, true, try, typedef, typeid, typename, union, unsigned, using, virtual, void, volatile, wchar_t, while 5

6 2.4 Muuttujan määrittely C++:ssa muuttuja on aina määriteltävä (declaration) ennen kuin sitä voi käyttää. Esim: int a; float mynumber; Yhdellä rivillä voidaan määritellä monta samantyyppistä muuttujaa: int a, b, c; Muuttuja voidaan alustaa (initialize) eli sille voidaan antaa alkuarvo määrittelyn yhteydessä: int a = 0, b = 1, c = 2; int a = b = c = 0; Ellei muuttujalle anneta arvoa, on muuttujan arvo jokin satunnainen luku, joka sattuu sillä hetkellä olemaan siinä muistipaikassa johon muuttuja kiinnitetään. Muuttujat eivät oletusarvoisesti alustu nollaksi tai mihinkään muuhunkaan arvoon. Uusi asia: C++:ssa alustus voidaan tehdä myös ns. konstruktorin eli muodostimen avulla. Siten int a(0); on sama asia kuin: int a=0; 2.5 Sijoituslauseesta Muuttujan alustuksen yhteydessä oli esillä merkki =. On syytä muistaa, että merkki = ei C/C++:ssa ole yhtäsuuruusmerkki vaan sijoitusoperaattori. Kahden muuttujan yhtäsuuruutta testataan operaattorilla ==. Näistä lisää myöhemmin. Sijoitusoperaattori toimii oikealta vasemmalle. Operaattorin oikealla puolella olevan lausekkeen arvo sijoitetaan vasemmalla puolella olevan muuttujan arvoksi. 6

7 Esim: int a=0; //Sijoitetaan a:n arvoksi 0 a=a+1; //Kasvatetaan a:ta yhdellä. Sijoitetaan uusi arvo a:n arvoksi (a:n arvo on nyt 1). 2.6 C++:n merkkijono string Merkkijono on merkkien muodostama taulukko, joka koostuu useammasta merkistä. C-kielessä merkkijonon koko oli määriteltävä kiinteäksi: char merkit[20]; char nimi[ ] = Robin Hood ; C++:ssa on käytössä merkkijonotyyppi string, joka käyttäytyy kuten mikä tahansa tietotyyppi (vaikka ei varsinainen perustietotyyppi olekaan). string merkit; merkit= Robin Hood ; string nimi= Little John ; string name( Monk Tuck ); String-tyyppisen merkkijonon kokoa ei tarvitse määritellä. Se kasvaa ja pienenee tarpeen mukaan riippuen siitä, kuinka monta merkkiä tarvitaan. Sen kanssa voi käyttää normaaleja sijoitus- ja vertailuoperaattoreita. C-kielen funktioita strcmp, strcpy jne ei enää tarvitse käyttää. Ne voi unohtaa. Merkkijonoihin palataan myöhemmin. 2.7 Totuusarvo-tietotyyppi C++:ssa on erikseen totuusarvo-tietotyyppi bool, joka voi saada arvon true tai false. False vastaa aina kokonaislukuarvoa nolla (0). True:ksi tulkitaan mikä tahansa nollasta eriävä arvo. 7

8 2.8 Muuttujien näkyvyysalue Perussääntö on, että muuttuja näkyy siinä lohkossa jossa se on määritelty. Lohko rajautuu aaltosulkeisiin. Siten pääohjelmassa määritelty muuttuja ei näy aliohjelmaan ja toisinpäin. Ohjelma voi sisältää siis monta saman nimistä muuttujaa eri ohjelmalohkoissa. Edellä mainittuun sääntöön on kaksi poikkeusta: Globaalit ja staattiset muuttujat. Globaali muuttuja määritellään ennen pääohjelmaa ja se näkyy kaikkiin ohjelmalohkoihin. Paikallinen saman nimisen muuttujan määritys ohittaa globaalin muuttujan. Automaattinen muuttuja syntyy, kun tullaan siihen ohjelmalohkoon jossa se on määritelty, ja tuhoutuu nimensä mukaisesti automaattisesti, kun ohjelmalohkosta poistutaan. Ohjelmoijan ei tarvitse huolehtia niiden luomisesta tai tuhoamisesta. Staattinen muuttuja syntyy vain kerrran. Se voidaan määritellä missä kohtaa ohjelmaa tahansa ja on olemassa koko ohjelman suorituksen ajan ja säilyttää arvonsa. #include <iostream> using namespace std; //Globaali x int x=2; int main() //Pääohjelman x int x=1; //Lohkosulkujen rajaama vaikutusalue int x=0; cout << x << endl; 8

9 cout << x << endl; cout << ::x << endl; return 0; 2.9 Määritellyt vakiot Vakion arvoa ei voi muuttaa ohjelman ajon aikana. Vakio voidaan määritellä joko #definedirektiivillä tai const-määreellä. #define PII const float PII=3.1415; Define on ns. esikääntäjän (preprocessor) direktiivi, joka ei ole osa varsinaista ohjelmakoodia. Siksi sen käyttö voi johtaa arvaamattomiin tilanteisiin. Const-määreen käyttö on suositeltavampaa. 3 Syöttö- ja tulostusvirrat 3.1 Tulostusvirta cout C-kielessä opittiin, että näytölle tulostus tapahtuu lauseella printf ja tietojen syöttö näppäimistöltä esimerkiksi lauseilla scanf tai gets. Niiden kanssa piti muistaa kaikkia ikäviä formaattikoodeja. C++:ssa niitä ei tarvita. C++:ssa tulostus tapahtuu lauseella cout ( character out ). cout << "Hello World!" << endl; 9

10 Tulostaa näytölle lainausmerkeissä olevan tekstin. endl (END Line) on rivinvaihto. Myös C-kielen \n toimii edelleen. <<-merkkien sielunelämään palataan myöhemmin. Tässä riittää tietää, että niillä erotetaan tulostettavat tekstit ja ohjausmerkit toisistaan. Esimerkiksi cout << "Hello" << endl << World! ; Tulostaa: Hello World 3.2 Syöttövirta cin Tietojen syöttö joltain oheislaitteelta keskusmuistiin muuttujiin tapahtuu lauseella cin ( character in ). Huomaa että samalla rivillä voi olla useamman tiedon luku >> merkeillä erotettuna. Muuttujat erotetaan toisistaan enterillä tai välilyönnillä. float luku; string mjono; cin >> mjono >> luku; cout << luku << " " << mjono << endl; Kaikkien numeeristen tietotyyppien, yksittäisten merkkien ja välilyöntejä sisältämättömien merkkijonojen luku onnistuu cin:llä. Jos on tarpeen lukea merkkijono, joka sisältää välilyöntejä on käytettävä getline-funktiota. getline(cin,mjono); 10

11 4 Operaattorit Muuttujia ja vakioita käsitellään operaattorien avulla. 4.1 Sijoitusoperaattori Sijoituksessa = merkin oikealla puolella olevan lausekkeen arvo (ns. rvalue) sijoitetaan vasemmalla puolella olevan muuttujan (lvalue) arvoksi. Vasemmalla puolella on aina oltava muuttuja. Oikealla puolella voi olla vakio, muuttuja tai vaikkapa monimutkainen matemaattinen lauseke. a = 2; b = a+1; D = sqrt(a*a+b*b); Sijoituslauseita voi yhdistellä hyvinkin mielipuolisesti: a = 2 + (b = 5); a = b = c = 0; 4.2 Aritmeettiset operaattorit (+, -, *, / ja %) Yhteenlasku +, vähennyslasku -, kertolasku * ja jakolasku / sekä jakojäännös (modulo) %. Muut lienevät selviä. Jakojäännös kertoo sen meneekö kahden luvun jakolasku tasan. A = 11 % 3; Muuttuja A saa arvon 2. 11

12 4.3 Yhdistetyt aritmeettiset ja sijoitusoperaattorit +=, -=, *=, /=, %=, >>=, <<=, &=, ^=, = Suoritetaan ensin aritmeettinen tai bittioperaatio ja tulos sijoitetaan muuttujan arvoksi. on sama kuin summa += luku; eli ns. karttuva summa. summa = summa + luku; on sama kuin a -= 5; a = a 5; 4.4 Lisäys ja vähennys yhdellä (++ ja --) C/C++-kielen ominaisuus on että koodista pyritään tekemään mahdollisimman tiivistä. Siksi on mahdollista käyttää unaarisia operaattoreita ++ ja - - jotka kasvattavat ja pienentävät muuttujan arvoa yhdellä. Seuraavat operaatiot tuottavat saman lopputuloksen: a = a + 1; a+=1; a++; ++a; Kahden viimeisen ilmauksen kanssa saa olla tarkkana, jos ne sisältyvät sijoituslauseeseen. Sillon pitää 12

13 tietää, missä järjestyksessä eri operaatiot suoritetaan *. B=3; A=++B; // A contains 4, B contains 4 Kasvatetaan ensin B:tä yhdellä. Lopputulos sijoitetaan A:han. B=3; A=B++; // A contains 3, B contains 4 Ensin B:n arvo sijoitetaan A:han. B:tä kasvatetaan yhdellä vasta sitten. Jos on epävarma, niin suoritusjärjestykseen voi vaikuttaa suluilla. Tai sitten voi käyttää jotain muuta tapaa esittää sama asia (mitenköhän?). 4.5 Vertailuoperaattorit (==,!=, <, >, <=, >=) Vertailuoperaattori palauttaa aina totuusarvon true tai false (koodissa joko 1 tai 0). (7 == 5) // evaluates to false. (5 > 4) // evaluates to true. (3!= 2) // evaluates to true. (6 >= 6) // evaluates to true. (5 < 5) // evaluates to false. a=2;b=3;c=6; (a == 5) // evaluates to false since a is not equal to 5. (a*b >= c) // evaluates to true since (2*3 >= 6) is true. (b+4 > a*c) // evaluates to false since (3+4 > 2*6) is false. ((b=2) == a) // evaluates to true. Ja sitten vielä kerran muistutus aloittelevan ohjelmoijan tavallisimmasta virheestä. = on sijoitus ja == vertailu. Näitten kanssa saa olla tarkkana. Vertailuoperaattoreita käytetään tavallisesti ehtolauseen yhteydessä, mutta siihen palataan hetken kuluttua. Vertailun tulosta voi tutkia kuitenkin ilman ehtolausettakin kirjoittamalla esimerkiksi: cout << ( 7 == 5); //Tulostaa 0 eli epätosi. * Operaattorien presedenssi eli suoritusjärjestys on tarkkaan määritelty. Palataan siihen hieman myöhemmin. 13

14 4.6 Loogiset operaattorit (&&, ja!) && on JA-operaattori. Tulos on tosi, jos molemmat operandit ovat tosia. on TAI-operaattori. Tulos on tosi jos toinen operandi on tosi. ( (5 == 5) && (3 > 6) ) // evaluates to false ( true && false ). ( (5 == 5) (3 > 6) ) // evaluates to true ( true false ).! on EI eli negaatio. Se vaihtaa toden epätodeksi ja päinvastoin. Toimii siis kuin reaalimaailman poliitikko.!(5 == 5) // evaluates to false because the expression at its right (5 == 5) is true.!(6 <= 4) // evaluates to true because (6 <= 4) would be false.!true!false // evaluates to false // evaluates to true. 4.7 Ehdollinen operaattori (?) Suorittaa toisen kahdesta vaihtoehdosta riippuen siitä kumpi on tosi. Toimii täsmälleen samoin kuin iflause. Siis esimerkiksi: condition? result1 : result2; 7==5? 4 : 3 // returns 3, since 7 is not equal to 5. 7==5+2? 4 : 3 // returns 4, since 7 is equal to >3? a : b // returns the value of a, since 5 is greater than 3. a>b? a : b // returns whichever is greater, a or b. 14

15 4.8 Bittioperaattorit (&,, ~, >>, <<) Operoivat suoraan bitteihin, joista muuttuja koostuu. operator asm equivalent description & AND Bitwise AND OR Bitwise Inclusive OR ^ XOR Bitwise Exclusive OR ~ NOT Unary complement (bit inversion) << SHL Shift Left >> SHR Shift Right unsigned int a=1; cout << (a<<1) << endl;//2 cout << (a<<2) << endl;//4 cout << (a<<3) << endl;//8 cout << (a<<4) << endl;//16 a=256; cout << (a>>1) << endl;//128 cout << (a>>2) << endl;//64 cout << (a>>3) << endl;//32 cout << (a>>4) << endl;// Tyypinmuunnosoperaattori ( ( ) ) Muuttujan sisältämä arvo voidaan muuttaa toiseksi tietotyypiksi kesken ohjelmaa. Esimerkiksi: int i; float f = 3.14; i = (int) f; 15

16 Sijoitetaan i:hin f:n sisältö muutettuna kokonaisluvuksi. Muunnoksessa desimaalit häviävät ja tulos on Muuttujan koko (sizeof()) Palauttaa parametrina syötetyn tietotyypin tai muuttujan koon tavuina. a = sizeof (char); Antaa tulokseksi 1, koska char-tietotyypin koko on yksi tavu Operaattorien suoritusjärjestys eli presedenssi Oheiseen taulukkoon on koottu, missä järjestyksessä eri operaatiot suoritetaan C++:ssa. Korkeammalla tasolla (prioriteetilla) oleva operaatio suoritetaan ennen. Level Operator Description Grouping 1 :: scope Left-to-right 2 () []. -> dynamic_cast static_cast reinterpret_cast postfix Left-to-right const_cast typeid ~! sizeof new delete unary (prefix) 3 * & indirection and reference (pointers) Right-to-left + - unary sign operator 4 (type) type casting Right-to-left 5.* ->* pointer-to-member Left-to-right 6 * / % multiplicative Left-to-right additive Left-to-right 16

17 8 << >> shift Left-to-right 9 < > <= >= relational Left-to-right 10 ==!= equality Left-to-right 11 & bitwise AND Left-to-right 12 ^ bitwise XOR Left-to-right 13 bitwise OR Left-to-right 14 && logical AND Left-to-right 15 logical OR Left-to-right 16?: conditional Right-to-left 17 = *= /= %= += -= >>= <<= &= ^= = assignment Right-to-left 18, comma Left-to-right Grouping-sarake ilmaisee, missä järjestyksessä samalla tasolla olevat operaattorit suoritetaan jos niitä esiintyy samassa lausekkeessa. Suluilla voidaan muuttaa suoritusjärjestystä tästä taulukosta poikkeavaksi. a = 5 + (7 % 2) //Tulos: 6 a = (5 + 7) % 2 //Tulos: 0 5 Kontrollirakenteet Kontrollirakenteiden avulla ohjelman toiminta haarautuu yhteen tai useampaan suoritettavaan osaan. Tämä on C-kielen kertausta, joten käydään pikaisesti vain oleelliset asiat läpi. 5.1 If - else if - else Yksinkertaisin versio: if (ehto) lauseet; 17

18 Lauseet suoritetaan jos ehto on tosi. Muuten ei tehdä mittään. Seuraavaksi valinta kahdesta eli binäärivalinta: if (ehto) lauseet1; else lauseet2; Jos ehto on tosi, suoritetaan lauseet1, muuten lauseet2. Ja lopuksi monivalinta: if (ehto1) lauseet1; else if (ehto2) lauseet2; else if (ehto_n) lauseet_n; else lauseet; Käydään vaihtoehtoja läpi niin kauan kuin löytyy tosi. Silloin lopetetaan ja tullaan ulos rakenteesta. Viimeiseen elseen ei liity koskaan ehtoa. Se suoritetaan jos mikään edellisistä ei ollut tosi. int x; cout << "Anna kokonaisluku" << endl; cin >> x; if (x%2==0) cout << "Luku on parillinen" << endl; else cout << "Luku on pariton" << endl; 18

19 5.2 Silmukat While Lauseita suoritetaan niin kauan kuin ehto on tosi. while (ehto) lauseet; Tämä ohjelma laskee kakkosen potensseja käyttäen bittitason siirtämistä vasemmalle. int x=2,i=0; while (i<10) //Bitwise left shift cout << (x<<i) << endl; i++; Huomioitava, että jos ehto ei ole voimassa kun ehtoa testataan ensimmäistä kertaa, ei silmukassa käydä kertaakaan Do-while do lauseet while(ehto); Lauseita suoritetaan jälleen niin kauan kuin ehto on tosi. Sama esimerkki kuin edellä: 19

20 int x=2,i=0; do //Bitwise left shift cout << (x<<i) << endl; i++; while (i<10); MUISTA PUOLIPISTE LOPUSSA! Do-while suoritetaan aina vähintään kerran koska ehto testataan vasta lopussa For for (alkuarvo; ehto; muutos) lauseet; Käytetään yleensä, kun toistokertojen määrä tiedetään. Muuttujalle asetetaan alkuarvo. Testataan ehto. Jos tosi, suoritetaan lauseet ja muutetaan alkuarvoa. Testataan muuttunut arvo ehtoa vasten ja jatketaan kunnes tulee epätosi. Jälleen sama esimerkki kuin edellä: int x=2; for (int i=0;i<10;i++) //Bitwise left shift cout << (x<<i) << endl; C++ lisää for-silmukkaan yhden ominaisuuden, joka ei ole perus-c-kielessä mahdollinen. Silmukkalaskuri voidaan määritellä ja alustaa for-silmukan sisällä (int i=0...), jolloin siitä tulee silmukan paikallinen muuttuja joka on elossa vain silmukan suorituksen ajan. Tästä on se etu, että ohjelmaan ei jää kummittelemaan muuttujia, joiden arvo saattaa olla aivan eri kuin mitä ohjelmoija luulee. 20

21 5.3 Hyppylauseet Break Break siirtää ohjelman suorituksen pois suoritettavan olevasta ohjelmalohkosta. Käytetään esimerkiksi virheentarkistukseen silmukassa. int n; for (n=10; n>0; n--) cout << n << ", "; if (n==3) cout << "countdown aborted!"; break; Continue Siirtää suorituksen suoritettavan olevan ohjelmalohkon loppuun, mutta ei ulos sieltä. for (int n=10; n>0; n--) if (n==5) continue; cout << n << ", "; Tämä ohjelma tulostaa luvut 10:stä 1:een mutta skippaa vitosen. 21

22 C++-kielessä on myös goto-lause, mutta sitä ei oikeastaan saa käyttää missään joten sitä ei tässäkään opeteta. 5.4 Monivalinta: switch-case switch (expression) case constant1: group of statements 1; break; case constant2: group of statements 2; break;... default: default group of statements Switch-casen avulla voidaan tehdä päätös useamman vakioarvon väliltä, mitä tehdään. Tyypillinen käyttö oli ennenvanhaan tekstipohjaisissa käyttöliittymissä, jossa esimerkiksi jotain kirjainta painamalla ohjelma teki jotain. 22

23 switch (x) case 1: cout << "x is 1"; break; case 2: default: cout << "x is 2"; break; cout << "value of x unknown"; Muutama huomautus. Jokaiseen case-haaraan liittyy break. Default suoritetaan jos mikään case ei toteudu. Switch-casen voi aina korvata if-lauseella: if (x == 1) cout << "x is 1"; else if (x == 2) else cout << "x is 2"; cout << "value of x unknown"; 23

24 6 Funktiot Ohjelma jaetaan yleensä erillisiin kokonaisuuksiin, jotka suorittavat tietyn tehtävän.näitä ohjelman osia kutsutaan funktioiksi eli aliohjelmiksi. Aliohjelma jakautuu kolmeen osaan: Esittely eli prototyyppi. Se tehdään ennen pääohjelmaa. Esittelyssä funktiolle annetaan nimi sekä parametrien että paluuarvon tyypit. Suuremmissa ohjelmissa prototyypit kirjoitetaan erilliseen header-tiedostoon. Runko-osa eli varsinainen aliohjelmakoodi. Jos runko-osa kirjoitetaan ennen pääohjelmaa samaan tiedostoon, ei erillistä esittelyä tarvita. Funktion kutsu. Funktiota, aivan kuin ihmistä, kutsutaan sen nimellä. Funktiolla ei tarvitse välttämättä olla paluuarvoa eikä parametreja. Silloin parametrilista voidaan jättää tyhjäksi. Void-avainsanaa ei välttämättä tarvitse käyttää C++:ssa. 6.1 Arvoparametrillinen funktio Funktiolle annetut parametrit ovat alkuperäisten muuttujien kopioita. Alkuperäiset muuttujien arvot eivät muutu. Esimerkissä on addition( ) -niminen funktio, joka ottaa parametreina kaksi kokonaislukua a ja b ja palauttaa yhden kokonaisluvun r. 24

25 // function example #include <iostream> using namespace std; int addition (int a, int b) int r; r=a+b; return (r); int main () int z; z = addition (5,3); cout << "The result is " << z; return 0; Tarkemmin ottaen esimerkin arvot 5 ja 3 kopioidaan muuttujien a ja b arvoiksi. Funktio palauttaa arvon muuttujaan z return-lauseella. Tässä esimerkki funktiosta, joka ei ota parametreja eikä palauta arvoa: 25

26 #include <iostream> using namespace std; void printmessage () cout << "I'm a function!"; int main () printmessage (); return 0; 6.2 Muuttujaparametrillinen funktio ja osoitin Osoitin on muuttuja, joka sisältää jonkin toisen muuttujan keskusmuistiosoitteen. Osoittimia käsitellään koodissa * ja &-operaattoreilla. * on sisältöoperaattori & on viittaus- eli osoiteoperaattori. Muuttujan määrittely: tyyppi *osoitin; Osoittimelle annetaan arvo &-operaattorin avulla: 26

27 int *p; int c=0; p=&c; Viimeinen rivi voidaan suomentaa siten, että osoitinmuuttujaan p sijoitetaan (tavallisen) muuttujan c keskusmuistiosoite. Osoitinmuuttajan sisältö ja sen osoittaman muistipaikan (tässä muuttuja c) sisältö (tässä 0) voidaan tulostaa seuraavasti: cout << "Osoite " << p << " ja sisältö " << *p << endl; Osoitin, joka ei osoita mihinkään on ns. nollaosoitin (NULL pointer). Osoittimia käytetään erityisen paljon funktioiden kanssa, jolloin funktiolle välitetään alkuperäisen muuttujan arvon sijasta muuttujan keskusmuistiosoite. Silloin funktio ei operoi alkuperäisen muuttujan kopioon vaan suoraan itse muuttujaan. Näin on mahdollista muuttaa muuttujien arvoja funktioissa. Esimerkkiohjelmassa kasvatetaan muuttujan arvoa yhdellä. void addone(int *x) (*x)++; int main() int c=0; addone(&c); cout << c; return 0; HUOM! Elä sotke näitä asioita. Osoittimen alustus määrittelyn yhteydessä 27

28 on sama asia kuin int c=25; int *p = &c; //OK mutta int c; int *p; p=&c; //OK, *p=&c; //VIRHE! 6.3 Viittausparametrillinen funktio (C++) C++:ssa on uusi tapa viitata muistiosoitteisiin, ns. Viittausparametri &. tyyppi &viittaus = muuttuja; Viittaus voidaan ajatella olevan alkuperäisen muuttujan aliasnimi. Viittausmuuttujaa käytettäessä käytetäänkin alkuperäistä muuttujaa johon viitataan, ainoastaan muuttujan nimi on eri. Oleelliset erot osoittimeen ovat, että viittausmuuttujan on aina viitattava johonkin muuttujaan (NULL ei sallittu) ja viittausta ei voi vaihtaa osoittamaan toiseen muuttujaan ohjelman aikana. int ted=25; //Tavallinen muuttuja int &andy=ted; //andy on muuttujan ted alias andy++; //muutetaan todellisuudessa ted cout << ted; //Tulostuu 26 28

29 Viittausta käytetään pääasiasssa funktioiden parametrivälityksessä. Tässä sama esimerkki kuin osoittimien kanssa: void addone(int &x) x++; int main() int c=0; addone(c); cout << c; return 0; Nähdään, että viittausparametrin pääasiallinen etu on koodin yksinkertaistuminen. Ei tarvita kuin yksi &-merkki parametrilistassa. Kannattaa huomata, että funktiokutsun perusteella ei voi nähdä, onko kyseessä arvoparametrillinen vai funktioparametrillinen funktio. 29

30 6.4 Funktion ylikuormaus (overloading) Saman nimisestä funktiosta voi olla useita eri versioita, jos ne eroavat toisistaan parametrien tyyppien tai lukumäärän suhteen. Paluuarvon erilaisuus ei riitä jos parametrilista on sama. int summa(int x,int y); float summa(float x, float y); //OK, eroavat parametrien tyyppien osalta float summa(int x,int y); //VIRHE! int summa(int x); //OK, eri määrä parametreja Esimerkiksi kaksi edellistä esimerkkiä voidaan yhdistää samaan koodiin: void addone(int &x) x++; void addone(int *x) (*x)++; int main() int c=0; addone(c); //Viittausparam. funktion kutsu addone(&c); //Muuttujaparam. funktion kutsu cout << c; //Paljos c on nyt? return 0; 30

31 7 Taulukko 7.1 Perusteita Tässä on lyhyt kertaus C-kielen taulukoista. C++ sisältää huomattavasti parempia menetelmiä taulukoiden käsittelyyn. Niihin palataan hieman tuonnempana. Taulukko koostuu peräkkäisistä muistipaikoista, jotka sisältävät samantyyppistä tietoa. Taulukon alkioihin voidaan viitata indeksoimalla. C/C++:ssa taulukon indeksointi alkaa nollasta. int billy[5]; //5 alkion mittainen kokonaislukutaulukko nimeltä billy char merkit[80];//80 alkion mittainen merkkijonotaulukko nimeltä merkit. Char-tyyppisen taulukon jokainen alkio vie aina yhden tavun (8 bittiä) verran muistia. Kokonaislukutyyppisen taulukon alkio vie yhden kokonaisluvun (4 tavua eli 32 bittiä) verran tilaa muistista. Taulukko tunnistetaan hakasuluista [ ]. Määrittelyn yhteydessä sulkujen sisään annetaan taulukon koko. Taulukon koko on kiinteä. Kokoa ei siis voi muuttaa suorituksen aikana *. * Tämä ei tarkalleen pidä paikkaansa. Myös C-kielessä on mahdollista varata taulukko dynaamisella muistinvarauksella, mutta sen käyttö on hankalaa ja virheille altista. 31

32 Taulukon alkioihin voidaan viitata missä järjestyksessä tahansa. Esimerkiksi sijoituslauseella billy[0]=9; sijoitetaan luku 9 taulukon ensimmäiseksi alkioiksi (indeksi 0). Taulukon alkio voidaan tulostaa normaalin muuttujan tapaan: cout << billy[0] << endl; Tulostaa taulukon ensimmäisen alkion sisällön (eli 9). Taulukon indeksointi "käsin" on aika harvinaista. Yleensä taulukko käydään läpi kerralla for-silmukan avulla. Tässä esimerkissä alustetaan luvut-niminen kokonaislukutaulukko. Taulukon kokoa ei tarvitse määritellä jos alkiot syötetään alustuksen yhteydessä (tässä alkioita on 5). Hyvin tavallinen tapa taulukon alkioiden tulostamiseen on for-silmukka. int billy [] = 16, 2, 77, 40, ; for (int i=0;i<5;i++) cout << billy[i]<<endl; C-kielessä ei ole merkkijono-tietotyyppiä. Merkkijonot ovat itse asiassa merkkitaulukoita, jossa jokainen alkio sisältää yhden ASCII-merkin. Merkkijono päättyy aina loppunollaan \0. Siten merkkijonon koko on oltava yhtä suurempi kuin sinne tallennettavien merkkien määrä. Merkkijonon käsittely: strlen = merkkijonon pituus strcpy = merkkijonon kopiointi 32

33 strcmp = kahden merkkijonon vertailu jne... char m1[] = "Aku Ankka",m2[10]; cout << "Merkkijonon pituus " << strlen(m1) << endl; strcpy(m2,m1); cout << "Toinen merkkijono on " << m2 << endl; if (strcmp(m1,m2)==0)) cout << "Merkkijonot ovat samat" << endl; else cout << "Merkkijonot eivät ole samat" << endl; Taulukon nimi on osoitin taulukon ensimmäiseen alkioon. Seuraavassa esimerkissä esitellään tulostusaliohjelma printarray( ), joka ottaa syötteekseen arg-nimisen kokonaislukutaulukon sekä taulukon koon kokonaislukuna (length). Pääohjelmassa aliohjelmaa kutsutaan kahdella eri taulukolla firstarray ja secondarray. #include <iostream> using namespace std; void printarray (int arg[], int length) for (int n=0; n<length; n++) cout << arg[n] << " "; cout << "\n"; 33

34 int main () int firstarray[] = 5, 10, 15; int secondarray[] = 2, 4, 6, 8, 10; printarray (firstarray,3); printarray (secondarray,5); return 0; Muutama muistutus: Funktiokutsussa taulukosta annetaan vain sen nimi (joka on osoitin taulukon alkuun), ei sulkeita minkäänlaisia! Esittelyssä ja rungossa int arg[]on sama asia kuin int *arg 7.2 Taulukko ja osoitin Taulukon alkioihin voidaan viitata osoittimen avulla. int c[]=9,0,2,5,0; int *p=c; //HUOM: Ei int *p=&c, miksi? for (int i=0;i<5;i++,p++) cout << *p; Osoitin siirretään osoittamaan seuraavaan alkioon lauseella p++. Vastaavasti edelliseen alkioon lauseella p--. 34

35 Samantyyppinen esimerkki merkkijonoilla. Nyt voidaan hyödyntää sitä tietoa, että merkkijono päättyy aina loppunollaan. char c[]="hello"; char *p=c; while ((*p)) cout << *p; p++; Eli niin kauan kuin p:n osoittaman muistipaikan sisältö on jotain muuta kuin \0 (siis looginen tosi), tulostetaan muistipaikan sisältö ja siirrytään seuraavaan. Ehkä havainnollisempi versio ehdosta olisi while ((*p)!= '\0') 8 Tietue Tässä kerrataan C-kielen tietue. Tietue sisältää monta yhteen kuuluvaa tietoa koottuna yhdeksi muuttujaksi. Tietueen kanssa pitää muistaa, että siinä luodaan uusi tietotyyppi (näissä esimerkeissä puhelinluettelo), joka käyttäytyy ihan samalla lailla kuin varsinaiset tietotyypit (int, char, jne). Tietotyyppiin liitetään joku muuttuja, tässä tapauksessa sitä kutsutaan tietuemuuttujaksi (esimerkissä HYV9SN). Tietueen kenttiin viitataan pisteoperaattorilla (.). Katsotaan pari esimerkkiä. struct puhelinluettelo 35

36 ; char nimi[80]; char pnro[15]; int main() struct puhelinluettelo HYV9SN; strcpy(hyv9sn.nimi,"aku Ankka"); strcpy(hyv9sn.pnro," "); cout << HYV9SN.nimi << " " << HYV9SN.pnro << endl; return 0; Edellisessä esimerkissä tietuemuuttujaan mahtuu vain yksi opiskelija. Hyödyllisempi on tietuetaulukko. Muutetaan pääohjelmaa hieman. const int N=3; //Vakio, montako tietuetta? struct puhelinluettelo char nimi[80]; char pnro[15]; ; int main() struct puhelinluettelo HYV9SN[N]; strcpy(hyv9sn[0].nimi,"aku Ankka"); strcpy(hyv9sn[0].pnro," "); strcpy(hyv9sn[1].nimi,"roope Ankka"); strcpy(hyv9sn[1].pnro," "); 36

37 strcpy(hyv9sn[2].nimi,"mikki Hiiri"); strcpy(hyv9sn[2].pnro," "); for (int i=0;i<n;i++) cout << HYV9SN[i].nimi << " " << HYV9SN[i].pnro << endl; return 0; Lopuksi vielä funktioilla toteutettu versio: const int N=3; struct puhelinluettelo char nimi[80]; char pnro[15]; ; void syota_tiedot(struct puhelinluettelo HYV9SN[]) strcpy(hyv9sn[0].nimi,"aku Ankka"); strcpy(hyv9sn[0].pnro," "); strcpy(hyv9sn[1].nimi,"roope Ankka"); strcpy(hyv9sn[1].pnro," "); strcpy(hyv9sn[2].nimi,"mikki Hiiri"); strcpy(hyv9sn[2].pnro," "); void tulosta_tiedot(struct puhelinluettelo HYV9SN[]) for (int i=0;i<n;i++) 37

38 endl; cout << HYV9SN[i].nimi << " " << HYV9SN[i].pnro << int main() struct puhelinluettelo HYV9SN[3]; syota_tiedot(hyv9sn); tulosta_tiedot(hyv9sn); return 0; Tietueeseen voidaan määritellä osoitin, ns. tietueosoitin, jota merkitään nuolioperaattorilla. Tässä esimerkissä voitaisiin määritellä osoitin tietuetaulukkoon (taulukon alkuun) seuraavasti: struct puhelinluettelo *p=hyv9sn; jolloin taulukon kenttiin voidaan viitata nuolella: cout << p->nimi << p->pnro; Tulostaa Akun tiedot. Seuraavaan tietueeseen voidaan siirtyä osoittimen inkrementoinnilla p++; jolloin siirrytään tulostamaan Roopen tiedot. 38

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

Lisätiedot

Java-kielen perusteet

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

Lisätiedot

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

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

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

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

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

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

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

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

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

Lisätiedot

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

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

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

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

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

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

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

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

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

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

13. Loogiset operaatiot 13.1

13. Loogiset operaatiot 13.1 13. Loogiset operaatiot 13.1 Sisällys Loogiset operaatiot AND, OR, XOR ja NOT. Operaatioiden ehdollisuus. Bittioperaatiot. Loogiset operaatiot ohjausrakenteissa. Loogiset operaatiot ja laskentajärjestys.

Lisätiedot

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

Olio-ohjelmointi Syntaksikokoelma

Olio-ohjelmointi Syntaksikokoelma C++-kielen uusia ominaisuuksia Olio-ohjelmointi Syntaksikokoelma 31.10.2008 Bool-tietotyyppi: Totuusarvo true (1), jos ehto on tosi ja false (0) jos ehto epätosi. Dynaaminen muistinvaraus: Yhden muuttuja

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

Ohjelmointiharjoituksia Arduino-ympäristössä

Ohjelmointiharjoituksia Arduino-ympäristössä Ohjelmointiharjoituksia Arduino-ympäristössä Yleistä Arduino-sovelluksen rakenne Syntaksi ja käytännöt Esimerkki ohjelman rakenteesta Muuttujat ja tietotyypit Tietotyypit Esimerkkejä tietotyypeistä Ehtolauseet

Lisätiedot

C++ rautaisannos. Kolme tapaa sanoa, että tulostukseen käytetään standardikirjaston iostreamosassa määriteltyä, nimiavaruuden std oliota cout:

C++ rautaisannos. Kolme tapaa sanoa, että tulostukseen käytetään standardikirjaston iostreamosassa määriteltyä, nimiavaruuden std oliota cout: C++ rautaisannos Kolme tapaa sanoa, että tulostukseen käytetään standardikirjaston iostreamosassa määriteltyä, nimiavaruuden std oliota cout: # include #include main ( ) main (

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

13. Loogiset operaatiot 13.1

13. Loogiset operaatiot 13.1 13. Loogiset operaatiot 13.1 Sisällys Loogiset operaatiot AND, OR, XOR ja NOT. Operaatioiden ehdollisuus. Bittioperaatiot. Loogiset operaatiot ohjausrakenteissa. Loogiset operaatiot ja laskentajärjestys.

Lisätiedot

tietueet eri tyyppisiä tietoja saman muuttujan arvoiksi

tietueet eri tyyppisiä tietoja saman muuttujan arvoiksi tietueet eri tyyppisiä tietoja saman muuttujan arvoiksi ero taulukkoon taulukossa alkiot samantyyppisiä tietueessa alkiot voivat olla erityyppisiä tiedot kuitenkin yhteen kuuluvia ohjelmoinnin perusteet,

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

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

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

Osoittimet ja taulukot

Osoittimet ja taulukot C! ja taulukot 1.2.2018 Tiedotteita Tämän jälkeen taas pari väliviikkoa (tenttiviikko) Seuraava luento 22.2. Laskareita ei tenttiviikolla 12.2. 16.2. 2 ja muisti Muisti Keskusyksikkö Suorittaa muistissa

Lisätiedot

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

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

Lisätiedot

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

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

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

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

Muuttujatyypit ovat Boolean, Byte, Integer, Long, Double, Currency, Date, Object, String, Variant (oletus)

Muuttujatyypit ovat Boolean, Byte, Integer, Long, Double, Currency, Date, Object, String, Variant (oletus) VISUAL BASIC OHJEITA Kutsuttava ohjelma alkaa kometoparilla Sub... End Sub Sub ohjelmanimi()...koodia... End Sub Muuttujat Muuttujan esittely Muuttujatyypit ovat Boolean, Byte, Integer, Long, Double, Currency,

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

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

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

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

Muuttujat ja kontrolli. Ville Sundberg

Muuttujat ja kontrolli. Ville Sundberg Muuttujat ja kontrolli Ville Sundberg 14.9.2007 Alkeistyyppi Alin abstraktiotaso josta tarvitsee välittää Yksittäinen, jakamaton tiedonjyvä Tavallaan kaikki alkeistyypit ovat lukuja arvojoukko vaihtelee

Lisätiedot

Luokassa määriteltävät jäsenet ovat pääasiassa tietojäseniä tai aliohjelmajäseniä. Luokan määrittelyyn liittyvät varatut sanat:

Luokassa määriteltävät jäsenet ovat pääasiassa tietojäseniä tai aliohjelmajäseniä. Luokan määrittelyyn liittyvät varatut sanat: 1. Luokan jäsenet Luokassa määriteltävät jäsenet ovat pääasiassa tietojäseniä tai aliohjelmajäseniä. Luokan määrittelyyn liittyvät varatut sanat: class luokan_nimi tyypit: enum, struct, class, typedef

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

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

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

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

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

Mallit standardi mallikirjasto parametroitu tyyppi

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

Lisätiedot

Listarakenne (ArrayList-luokka)

Listarakenne (ArrayList-luokka) Listarakenne (ArrayList-luokka) Mikä on lista? Listan määrittely ArrayList-luokan metodeita Listan läpikäynti Listan läpikäynti indeksin avulla Listan läpikäynti iteraattorin avulla Listaan lisääminen

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

Johdatus ohjelmointiin / Lausekielinen ohjelmointi 1 & 2

Johdatus ohjelmointiin / Lausekielinen ohjelmointi 1 & 2 Johdatus ohjelmointiin / Lausekielinen ohjelmointi 1 & 2 Syntaksilomake (22.4.2007) C-kielen standardikirjaston funktioita gets(merkkijono); scanf("formaatti", &muuttuja1,..., &muuttujan); sscanf(merkkijono,

Lisätiedot

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

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

Lisätiedot

Ohjelmoinnin perusteet Y Python

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

Lisätiedot

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

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

Ohjelmointi 1 Taulukot ja merkkijonot

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

Lisätiedot

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

5/20: Algoritmirakenteita III

5/20: Algoritmirakenteita III Ohjelmointi 1 / syksy 2007 5/20: Algoritmirakenteita III Paavo Nieminen nieminen@jyu.fi Tietotekniikan laitos Informaatioteknologian tiedekunta Jyväskylän yliopisto Ohjelmointi 1 / syksy 2007 p.1/17 Tämän

Lisätiedot

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

Luku 6. Dynaaminen ohjelmointi. 6.1 Funktion muisti

Luku 6. Dynaaminen ohjelmointi. 6.1 Funktion muisti Luku 6 Dynaaminen ohjelmointi Dynaamisessa ohjelmoinnissa on ideana jakaa ongelman ratkaisu pienempiin osaongelmiin, jotka voidaan ratkaista toisistaan riippumattomasti. Jokaisen osaongelman ratkaisu tallennetaan

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

ITKP102 Ohjelmointi 1 (6 op)

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

Lisätiedot

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

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

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

Luennon sisältö Tyypit int, char, float, double signed, unsigned short, long Vakiot const Rakenteet if, for, while, switch, do-while Syöttö ja tulostu

Luennon sisältö Tyypit int, char, float, double signed, unsigned short, long Vakiot const Rakenteet if, for, while, switch, do-while Syöttö ja tulostu C-kurssi Viikko 1: tyypit, rakenteet, makrot Luennon sisältö Tyypit int, char, float, double signed, unsigned short, long Vakiot const Rakenteet if, for, while, switch, do-while Syöttö ja tulostus Makrot

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

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

C++11 Syntaksi. Jari-Pekka Voutilainen Jari-Pekka Voutilainen: C++11 Syntaksi

C++11 Syntaksi. Jari-Pekka Voutilainen Jari-Pekka Voutilainen: C++11 Syntaksi 1 C++11 Syntaksi Jari-Pekka Voutilainen 13.4.2012 2 Range-for Iteroi säiliön kaikki alkiot for-silmukassa. Säiliöltä vaaditaan begin- ja end-iteraattorit. Pätee kaikille C++11 STL-säiliöille, taulukoille,

Lisätiedot

11. Javan valintarakenteet 11.1

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

Lisätiedot

12. Javan toistorakenteet 12.1

12. Javan toistorakenteet 12.1 12. Javan toistorakenteet 12.1 Sisällys Yleistä toistorakenteista. Laskurimuuttujat. While-, do-while- ja for-lauseet. Laskuri- ja lippumuuttujat. Tyypillisiä ohjelmointivirheitä. Silmukan rajat asetettu

Lisätiedot

ITKP102 Ohjelmointi 1 (6 op), arvosteluraportti

ITKP102 Ohjelmointi 1 (6 op), arvosteluraportti ITKP102 Ohjelmointi 1 (6 op), arvosteluraportti Tentaattori: Antti-Jussi Lakanen 20. toukokuuta 2016 Yleistä Tentti 1 oli pistekeskiarvon (11.6) perusteella vaikea. Omasta tehtäväpaperista saa kopion Antti-Jussilta,

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

1. Esittelyt ja vakiot 1.1 Esittelyt (declarations) Ennen nimen, tunnuksen (identifier) käyttöä se on

1. Esittelyt ja vakiot 1.1 Esittelyt (declarations) Ennen nimen, tunnuksen (identifier) käyttöä se on 1. Esittelyt ja vakiot 1.1 Esittelyt (declarations) Ennen nimen, tunnuksen (identifier) käyttöä se on esiteltävä. char ch; int count=1; struct complex float re, im; complex z; complex sqrt( complex );

Lisätiedot

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

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

Lisätiedot

6. Muuttujat ja Java 6.1

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

Lisätiedot

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

Sisällys. 7. Oliot ja viitteet. Olion luominen. Olio Java-kielessä

Sisällys. 7. Oliot ja viitteet. Olion luominen. Olio Java-kielessä Sisälls 7. Oliot ja viitteet Olio Java-kielessä. Olion luominen, elinikä ja tuhoutuminen.. Viitteiden vertailu. Varautuminen null-arvoon. Viite metodin paluuarvona.. Muuttumattomat ja muuttuvat merkkijonot.

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

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

Sisällys. 6. Muuttujat ja Java. Muuttujien nimeäminen. Muuttujien nimeäminen. Muuttujien nimeäminen. Muuttujan tyypin määritys. Javan tietotyypit:

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

Lisätiedot

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.2015 Työkaluista Perinteinen: komentorivi + tekstieditori Editori: esimerkiksi Kate, Notepad++, Aquamacs (Emacs) Ohjelman kääntäminen ja suorittaminen komentoriviterminaalissa TMC - komentorivityökalu

Lisätiedot

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

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

Lisätiedot

Tyyppejä ja vähän muutakin. TIEA341 Funktio ohjelmointi 1 Syksy 2005

Tyyppejä ja vähän muutakin. TIEA341 Funktio ohjelmointi 1 Syksy 2005 Tyyppejä ja vähän muutakin TIEA341 Funktio ohjelmointi 1 Syksy 2005 Viime luennolla... Haskellin alkeita pääasiassa Hello World!... ja muita tutunoloisia ohjelmia Haskellilla Haskellin voima on kuitenkin

Lisätiedot

7. Oliot ja viitteet 7.1

7. Oliot ja viitteet 7.1 7. Oliot ja viitteet 7.1 Sisällys Olio Java-kielessä. Olion luominen, elinikä ja tuhoutuminen. Viitteiden sijoitus. Viitteiden vertailu. Varautuminen null-arvoon. Viite metodin paluuarvona. Viite metodin

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

Tehtävä 1. TL5302 Olio-ohjelmointi Koe Malliratkaisuja. Tässä sekä a)- että b)-kohdan toimiva ratkaisu:

Tehtävä 1. TL5302 Olio-ohjelmointi Koe Malliratkaisuja. Tässä sekä a)- että b)-kohdan toimiva ratkaisu: TL5302 Olio-ohjelmointi Koe 19.4.2005 Malliratkaisuja Tehtävä 1 Tässä sekä a)- että b)-kohdan toimiva ratkaisu: #include using namespace std; int main() int taul[5]=1,2,3,4,5; int *p,&r=taul[0];

Lisätiedot

ITKP102 Ohjelmointi 1 (6 op)

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

Lisätiedot

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

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ältö. 2. Taulukot. Yleistä. Yleistä

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

Lisätiedot

Java-kielen perusteet

Java-kielen perusteet Java-kielen perusteet String-merkkijonoluokka 1 Ohjelmointikielten merkkijonot Merkkijonot ja niiden käsittely on välttämätöntä ohjelmoinnissa Valitettavasti ohjelmointikielten tekijät eivät tätä ole ottaneet

Lisätiedot

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

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

Lisätiedot

6. Muuttujat ja Java 6.1

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

Lisätiedot

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

1.3Lohkorakenne muodostetaan käyttämällä a) puolipistettä b) aaltosulkeita c) BEGIN ja END lausekkeita d) sisennystä

1.3Lohkorakenne muodostetaan käyttämällä a) puolipistettä b) aaltosulkeita c) BEGIN ja END lausekkeita d) sisennystä OULUN YLIOPISTO Tietojenkäsittelytieteiden laitos Johdatus ohjelmointiin 81122P (4 ov.) 30.5.2005 Ohjelmointikieli on Java. Tentissä saa olla materiaali mukana. Tenttitulokset julkaistaan aikaisintaan

Lisätiedot