1. ohjelman selitystä Muutamien ohjelman yksityiskohtien läpikäyntiä



Samankaltaiset tiedostot
Java-kielen perusteet

Java-kielen perusteet

Java-kielen perusteita

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

Luokka Murtoluku uudelleen. Kirjoitetaan luokka Murtoluku uudelleen niin, että murtolukujen sieventäminen on mahdollista.

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

Javan perusteet. Ohjelman tehtävät: tietojen syöttö, lukeminen prosessointi, halutun informaation tulostaminen tulostus tiedon varastointi

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

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

Ohjelmassa henkilön etunimi ja sukunimi luetaan kahteen muuttujaan seuraavasti:

13. Loogiset operaatiot 13.1

Vertailulauseet. Ehtolausekkeet. Vertailulauseet. Vertailulauseet. if-lauseke. if-lauseke. Javan perusteet 2004

7. Näytölle tulostaminen 7.1

Harjoitus Olkoon olemassa luokat Lintu ja Pelikaani seuraavasti:

13. Loogiset operaatiot 13.1

Olio-ohjelmointi Javalla

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

Ohjelmoinnin perusteet Y Python

Ehto- ja toistolauseet

Ohjelmoinnin perusteet Y Python

ITKP102 Ohjelmointi 1 (6 op)

Java-kielen perusteita

2. Lisää Java-ohjelmoinnin alkeita. Muuttuja ja viittausmuuttuja (1/4) Muuttuja ja viittausmuuttuja (2/4)

Java-kielen perusteita

Python-ohjelmointi Harjoitus 2

ITKP102 Ohjelmointi 1 (6 op)

ITKP102 Ohjelmointi 1 (6 op), arvosteluraportti

Ohjelmointiharjoituksia Arduino-ympäristössä

Taulukot. Jukka Harju, Jukka Juslin

1. Omat operaatiot 1.1

Muuttujat ja kontrolli. Ville Sundberg

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

Lauseet. Ehdollinen lause. Tämän osan sisältö. Ehdollinen lause. Esimerkkejä. Yksinkertainen ehto. Lohkosulut ja sisennys. Ehdollinen lause if

Ohjelmoinnin perusteet Y Python

11. Javan toistorakenteet 11.1

Sisällys. 19. Olio-ohjelmointia Javalla. Yleistä. Olioiden esittely ja alustus

Javan perusteita. Janne Käki

C-ohjelma. C-ohjelma. C-ohjelma. C-ohjelma. C-ohjelma. C-ohjelma. Operaatioiden suoritusjärjestys

12. Javan toistorakenteet 12.1

12. Javan toistorakenteet 12.1

11. Javan valintarakenteet 11.1

815338A Ohjelmointikielten periaatteet Harjoitus 5 Vastaukset

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

Ohjelmoinnin perusteet Y Python

Tietorakenteet. JAVA-OHJELMOINTI Osa 5: Tietorakenteita. Sisällys. Merkkijonot (String) Luokka String. Metodeja (public)

Java-kielen perusteet

Sisällys. Yleistä attribuuteista. Näkyvyys luokan sisällä. Tiedonkätkentä. Aksessorit. 4.2

Ohjelmoinnin peruskurssi Y1

Java kahdessa tunnissa. Jyry Suvilehto

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

Sisällys. 11. Javan toistorakenteet. Laskurimuuttujat. Yleistä

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

19. Olio-ohjelmointia Javalla 19.1

Ehto- ja toistolauseet

Ohjelmoinnin jatkokurssi, kurssikoe

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

Sisällys. 6. Metodit. Oliot viestivät metodeja kutsuen. Oliot viestivät metodeja kutsuen

ITKP102 Ohjelmointi 1 (6 op)

Informaatioteknologian laitos Olio-ohjelmoinnin perusteet / Salo

ITKP102 Ohjelmointi 1 (6 op), arvosteluraportti

11. Javan valintarakenteet 11.1

Rajapinta (interface)

17. Javan omat luokat 17.1

Sisällys. Yleistä attribuuteista. Näkyvyys luokan sisällä ja ulkopuolelta. Attribuuttien arvojen käsittely aksessoreilla. 4.2

9. Periytyminen Javassa 9.1

Metodien tekeminen Javalla

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

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

Sisältö. 22. Taulukot. Yleistä. Yleistä

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

Yleistä. Nyt käsitellään vain taulukko (array), joka on saman tyyppisten muuttujien eli alkioiden (element) kokoelma.

Ohjelmoinnin perusteet Y Python

Tietorakenteet (syksy 2013)

Listarakenne (ArrayList-luokka)

Luokan sisällä on lista

Tietotyypit ja operaattorit

Ohjelmoinnin perusteet, kurssikoe

811120P Diskreetit rakenteet

Oliot viestivät metodeja kutsuen

ITKP102 Ohjelmointi 1 (6 op)

9. Periytyminen Javassa 9.1

5/20: Algoritmirakenteita III

Ohjelmoinnin peruskurssi Y1

20. Javan omat luokat 20.1

Sisällys. 20. Javan omat luokat. Java API. Pakkaukset. java\lang

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

Taulukot. Taulukon käsittely. Tämän osan sisältö. Esimerkki. Taulukon esittely ja luonti. Taulukon alustaminen. Taulukon koko

Ohjelmointi 1 Taulukot ja merkkijonot

Taulukot. Taulukon määrittely ja käyttö. Taulukko metodin parametrina. Taulukon sisällön kopiointi toiseen taulukkoon. Taulukon lajittelu

812341A Olio-ohjelmointi Peruskäsitteet jatkoa

811120P Diskreetit rakenteet

Ohjausrakenteet. Valinta:

Johdatus ohjelmointiin / Lausekielinen ohjelmointi 1 & 2

Mikä yhteyssuhde on?

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

P e d a c o d e ohjelmointikoulutus verkossa

Ohjelmointi 2 / 2010 Välikoe / 26.3

12 Mallit (Templates)

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

Imperatiivisen ohjelmoinnin peruskäsitteet. Meidän käyttämän pseudokielen lauseiden syntaksi

Transkriptio:

C# - kieli 1. ohjelman selitystä Muutamien ohjelman yksityiskohtien läpikäyntiä class MainClass { public static void Main(string[] args) { Console.WriteLine("Hei maailma!"); jokainen C#-ohjelma on aina luokka (class) luokassa voidaan määritellä metodeita jokaisessa itsenäisessä C#-ohjelmassa on main-metodi main-metodi on julkinen (public), luokan oma (static) ja arvoa palauttamaton (void) main-metodilla on merkkijonotyyppinen (String) parametri args lause Console.WriteLine... tulostaa kuvaruudulle tekstin Hei maailma! Ohjelman muoto Ohjelman luettavuus Kirjoitetaan jokainen lause omalle riville Useampiakin voit kirjoittaa mutta se haittaa luettavuutta Käytä sisennyksiä Kirjoita kommentteja Kommentit kommentti on vapaamuotoinen selitysteksti, joka ei vaikuta ohjelman suorittamiseen ilmaus /* aloittaa kommentin ja */ lopettaa kommentin ilmaus // kertoo, että tokarivi on kommenttia // Tämä on kommenttirivi /* Tämä on kommenttitekstiä, ja se jatkuu usealle riville. */ 1

Kommentit Jokaisen ohjelman ekaun kannattaa kirjoittaa kommentit Esim. /* * Ohjelma : Tervehdys * tekijä: Juha Stenfors * valmis: 28.8.2005 * muutos: 10.9.2005 / Tulostustekstit muutettu * muutos: 18.9.2005 / lisätty kommentteja */ Tee jokaiselle sellaiselle riville kommentti, joita haluat selventää Auttaa jatkossa, kun tutkit ohjelmaa ja sen logiikkaa Tietotyypit (tieto)tyyppi liittyy moneen asiaan ohjelmointikielessä: muuttujalla on aina tyyppi arvolla on aina tyyppi parametrilla on aina tyyppi (käsitellään myöhemmin) metodin paluuarvolla on aina tyyppi (käsitellään myöhemmin) C#-kieli on ns. vahvasti tyypitetty kieli sijoitusoperaatioissa ja vertailuissa vaaditaan aina yhteensopivuus arvojen kesken 2

Tietotyypit Tietotyyppi Tunnus Muisti.Net tyyppi Arvoalue lyhyt kokonaisluku kokonaisluku pitkä kokonaisluku yksinkert. tark. liukuluku kaksoistarkkuden liukuluku pitkä liukuluku totuusarvo tavu merkki short int long float double decimal bool byte char 2 tavua 4 tavua 8 tavua 4 tavua 8 tavua 16 tavua 1 tavu 1 tavu 8 tavua Int16 Int32 Int64 Single Double Decimal Boolean Byte Char -32768 32767-2147483648 2147483647-9223372036 854 775 808-9223372036 854 775 807-3.4028235E38 3.402835E38-1.79769313486231E308-1.79769313486231E3080 enintään +/- 79228 * 10 ^24 True tai False 0-255 Mikä tahansa Unicode symboli välillä 0 65535 * Huom! Desimaalierotin ohjelmassa on piste! Tietotyypit Merkki (char) jokaista merkkiä vastaa tietty numeroarvo C#:ssa merkit on koodattu ns. Unicode-merkkijärjestelmällä sisältää maailman useimpien kirjoitusjärjestelmien kirjain- ja numeromerkit vakioarvot esitetään heittomerkkien sisällä: c, C, 6, ; erikoismerkkejä: \t tabulaattori \\ kenoviiva \n rivinvaihto \ lainausmerkki \ heittomerkki 3

Tietotyypit Merkkijono (string) merkkijono alkaa ja tokau lainausmerkkeihin saa sisältää mitä tahansa merkkejä voidaan yhdistellä katenaatio-operaattorin (+) avulla esimerkkejä: Auto Auto on kulkuväline Auto\n on\n kulkuväline ( \n = rivinvaihtomerkki ) Auto + + on + + kulkuväline Tietotyypit Totuusarvo (boolean) mahdolliset arvot: true (= tosi) ja false (= epätosi) loogisen lausekkeen arvo on aina totuusarvo esimerkkejä: true, false, x > 0, (x ==5) && (y!= 3) 4

Muuttujat muuttuja määritellään ennen käyttöä muodossa tyyppi muuttujan_nimi; muuttujan nimi alkaa aina kirjaimella pienet ja isot kirjaimet ymmärretään eri merkeiksi: esim. Kissa ja kissa ovat eri nimiä esimerkkejä: int lkm, kpl; // lkm ja kpl ovat kokonaislukutyyppisiä double pinta_ala; // pinta_ala on desimaalilukutyyppinen boolean totuus; // totuus on totuusarvotyyppinen string nimi; // nimi on merkkijonoarvoinen useasti on tapana nimeämissä käyttää muuttujan nimessä 1. kirjaimena tyypin ensimmäistä kirjainta tai tyypin kolmea ensimmäistä kirjainta int iluku; string snimi; Muuttujat nimeämisessä suositaan seuraavaa tapaa: nimen 1. kirjain on pieni jokainen seuraava sana nimessä alkaa isolla kirjaimella kaikki muut kirjaimet ovat pieniä skandeja (ääkkösiä) ei pitäisi käyttää nimi ei saa olla C#-kielen varattu sana esimerkkejä muuttujanimistä nelionpintaala autonrenkaanilmanpaine keski_ika iyhteensa skatuosoite 5

Sijoituslauseita sijoitusoperaattori on yhtäsuuruusmerkki (=) muuttuja = lauseke; huom. älä sekoita sijoitusoperaattoria yhtäsuuruusoperaattoriin, joka on kaksi yhtäsuuruusmerkkiä (==) muuttujan ja lausekkeen tulee olla sijoitusyhteensopivia (eli lähes aina samaa tyyppiä) esimerkkejä: int luku; double pinta_ala; boolean totuus; string postiosoite; luku = 1237; pinta_ala = 9887.120; totuus = true; postiosoite = Tiedepuisto 3 ; Sijoituslauseita muuttujille voidaan antaa ekaarvo jo määrittelyssä: int luku = 1237; double pinta_ala = 9887.120; boolean totuus = true; string postiosoite = Tiedepuisto 3 ; algoritmeissa muuttujan uusi arvo lasketaan usein vanhasta arvosta luku = luku + 10; pinta_ala = pinta_ala - 3; näissä on mahdollista käyttää erityisiä sijoitusoperaattoreita luku += 10; pinta_ala -= 3; usein muuttujan arvoa kasvatetaan/vähennetään yhdellä luku = luku + 1; on sama kuin ++luku; luku++; pinta_ala = pinta_ala - 1; on sama kuin pinta_ala--; 6

Laskutoimitukset yhteenlasku (+) vähennyslasku (-) jakolasku (/) kertolasku (*) jäännösjako (%) jakolaskussa jaettavan ja jakajan ollessa kokonaisluku tuloskin on aina kokonaisluku (= ns. kokonaisjako) jäännösjako on kokonaislukujen jakolaskun jakojäännös esimerkki int luku = 5, kpl = 100; double leveys = 2.2, korkeus = 5; kpl = luku / 2; // arvo on 2 (eikä 2.5)! luku = 22 % 3; // arvo on 1 leveys = korkeus / 2; // arvo on 2.5 Katenointi katenointi tarkoittaa merkkijonojen liittämistä toisiinsa katenointioperaattori on +-merkki jos lauseke on muotoa merkkijono + numeerinen arvo, yhteenlasku tulkitaan katenaatioksi esimerkki string eka = luokka, toka = huone, yht; yht = eka + toka; // arvo on luokkahuone yht = toka + eka; // arvo on huoneluokka yht = eka + + toka; // arvo on huone luokka yht = toka + eka + an + toka; // arvo on huoneluokkaan huone yht = toka + 210; // arvo on huone210 7

Kirjoittaminen ja lukeminen näytölle tulostetaan valmiiksi määritellyn nimiavaruuden System avulla (using System;) Console.WriteLine( Hei maailma! ); // tulostaa tekstin ja rivinvaihdon Console.Write( Hei maailma! ); // tulostaa tekstin tulostettava on aina vain yksi arvo jos halutaan tulostaa esim. tekstiä ja lukuarvoja, niistä on tehtävä yksi merkkijono string snimi = Juha ; Console.WriteLine( Moi + snimi +! ); tämä tulostaisi (näytölle): Moi Juha! Kirjoittaminen ja lukeminen Console.WriteLine( Jos haluat tulostaa \ lainausmerkit\! ); Console.WriteLine( Tyhjiä rivejä kaksi:\n\n ); Console.WriteLine( \tyksi tabulointi ); Console.WriteLine( \t\t\ttabuloitu kolme kertaa ); Console.WriteLine( C:\\> ); Console.WriteLine( \\\\alfa\\yleiset ); Jos haluat tulostaa lainausmerkit! Tyhjiä rivejä kaksi: Yksi tabulointi Tabuloitu kolme kertaa C:\> \\alfa\yleiset 8

Loogiset lausekkeet lähtökohtana bool - tietotyyppi arvot true (tosi) ja false (epätosi) looginen lauseke (eli totuusarvoinen lauseke) muodostuu ehtolausekkeista ja niitä yhdistävistä loogisista operaattoreista ehtolausekkeen yleinen muoto: arvo vertailuoperaattori arvo muuttuja, vakio, lauseke > >= < <= ==!= muuttuja, vakio, lauseke Loogiset lausekkeet esimerkkejä: luku >= 0 imaara == 100 arvo < (luku * 2.4) älä sekoita yhtäsuuruusoperaattoria (==) ja sijoitusoperaattoria (=): luku == 10 // onko luku:n arvo 10? luku = 10 // luku saa arvokseen 10 merkkijonoja voit verrata samalla tavalla kuten lukuja snimi == Juha // onko snimi:n arvo Juha? ehtolausekkeita voidaan yhdistellä loogisin operaattorein: && ja (and) tai (or) ^ poissulkeva tai (xor)! ei (not) 9

Loogiset lausekkeet esimerkki int iluku = 2; double dpi = 3.14; bool b1, b2, b3; b1 = (i == 2) && (dpi > 10.0); b2 = (i == 2) && (dpi < 10.0); // b1 saa arvon false // b2 saa arvon true b1 = (i == 2) (dpi > 10.0); b2 = (i!= 2) (dpi > 10.0); // b1 saa arvon true // b2 saa arvon false b3 =!b1!!b2; // b3 saa arvon false Tehtävä Alustetaan seuraavat muuttujat: int a, b, c; short x, y, z; Kirjoita looginen lauseke seuraaviin tapauksiin: 1. a on parillinen 2. b on nollaa suurempi, ja b on pienempi kuin 120 3. b on suurempi kuin c, ja b on pienempi kuin a 4. -11.2 < x < -2.42 5. joko a on 4 ja b on negatiivinen tai y on suurempi kuin z:n ja x:n erotus 6. z < -1.7 tai z > 23.1, c:n ja a:n summa on parillinen ja b ei ole 543 7. joko a on 7 tai b on c, mutta eivät molemmat 8. joko x on positiivinen tai y on negatiivinen, mutta eivät molemmat 10

Ratkaisu 1. a % 2 == 0 2. (b > 0) && (b < 120) 3. (b > c) && (b < a) 4. (x >-11.2) && (x < -2.42) 5. (a == 4) && (b < 0) (y > z x) 6. ((z < -1.7) (z > 23.1)) && ((a + c) % 2 == 0) && (b!= 543) 7. (a == 7) ^ (b == c) 8. (x > 0) ^ (y < 0) if-lause ehdollisella lauseella eli if-lauseella on kaksi muotoa: if (ehtolauseke) lause; if (ehtolauseke) lause1; else lause2; jos ehto on tosi, niin lause suoritetaan eli ehtolauseke ehdollistaa lauseen suorituksen jos ehto on tosi, niin suoritetaan lause1, muuten suoritetaan lause2 eli lauseet lause1 ja lause2 ovat vaihtoehtoisia 11

if-lause double dluku1, dluku2; Console.Write( Anna luku1: ); dluku1 = Convert.ToDouble(Console.ReadLine()); Console.Write( Anna luku2: ); dluku2 = Convert.ToDouble(Console.ReadLine()); if (dluku1 < dluku2){ Console.WriteLine( Luku1 on pienempi. ); else { Console.WriteLine( Luku2 on suurempi tai yhtäsuuri kuin luku1. ); if-lause if-lauseessa voidaan ehdollistaa/vaihtoehtoistaa vain yksittäisiä lauseita jos valittava vaihtoehto muodostuu useammasta kuin yhdestä lauseesta tulee käyttää koottua lausetta (= aaltosulkuparin sisällä olevat lauseet) kootun lauseen perässä EI ole koskaan puolipistettä! if (ehtolauseke) { if (ehtolauseke) { lause; lause;...... lause; lause; else { lause;... lause; huom. kootun lauseen sisällä määriteltyä muuttujaa ei voi käyttää kootun lauseen ulkopuolella 12

switch-lause valintalausetta eli switch-lausetta käytetään silloin kun valintavaihtoehtoja on useita valintalause on muotoa: switch (lauseke) { case vakio1: lause1; break; case vakio2: case vakio3: lause2; lause3; break; default: lause4; break; switch-lause int ikk, ipv; Console.Write( Anna kuukauden numero: ); ikk = Convert.ToInt32(Console.ReadLine()); switch (ikk) { case 1: case 3: case 5: case 7: case 8: case 10: case 12: ipv = 31; break; case 2: ipv = 28; break; case 4: case 6: case 9: case 11: ipv = 30; break; default: ipv = 0; Console.WriteLine( Kuukaudessa + ikk + on + ipv + päivää. ); 13

while-lause while-lause on ns. alkuehtoinen toistolause toistokertojen määrä ei tarvitse olla etukäteen tiedossa voidaan käyttää myös lukumääräiselle toistolle (laskurimuuttujan avulla) while-lauseen muoto: while (ehto) { lause;... lause; (Koottua) lausetta toistetaan niin kauan, kun ehto on tosi. Ehto on totuusarvoinen lauseke ja sen arvo tarkastetaan aina ennen toistokerran suorittamista. Kun ehto saa arvon epätosi, siirrytään whilelausetta seuraavaan lauseeseen. while-lause int iluku, isumma; Console.WriteLine( Yhteenlaskuohjelma, negatiivinen luku lopettaa. ); iluku = Convert.ToInt32(Console.ReadLine()); while (iluku >= 0) { isumma = isumma + iluku; Console.WriteLine( Summa nyt: + isumma); iluku = Convert.ToInt32(Console.ReadLine()); Console.WriteLine( Loppu! ); 14

Tehtävä Ohjelman tulee tulostaa luvut 1, 2, 3 ja 4. Täytä puuttuvat kohdat: int ilaskuri ; ilaskuri = ; while (ilaskuri 4 ) { Console.WriteLine(iLaskuri); ilaskuri = ilaskuri + ; Ratkaisu Ohjelman tulee tulostaa luvut 1, 2, 3 ja 4. Täytä puuttuvat kohdat: int ilaskuri ; ilaskuri = 1; while (ilaskuri <= 4 ) { Console.WriteLine(iLaskuri); ilaskuri = ilaskuri + 1; 15

Tehtävä Ohjelman tulee tulostaa luvut 10-10. Täytä puuttuvat kohdat: int ilaskuri ; ilaskuri = ; while (ilaskuri ) { Console.WriteLine(iLaskuri); ilaskuri = ilaskuri ; Ratkaisu Ohjelman tulee tulostaa luvut -10 10. Täytä puuttuvat kohdat: int ilaskuri ; ilaskuri = 10; while (ilaskuri >= -10) { Console.WriteLine(iLaskuri); ilaskuri = ilaskuri - 1; 16

Tehtävä Mitä ao. koodi tekee? double dluku1 = 1, dluku2 = 0, dluku3 = 0; while (dluku1!= 0) { Console.WriteLine("Anna luku: "); dluku1 = Convert.ToDouble(Console.ReadLine()); if (dluku1!= 0) { dluku2 = dluku2 + 1; dluku3 = dluku3 + dluku1; Console.WriteLine(dLuku3 / dluku2); Ratkaisu Ohjelma siis kysyy käyttäjältä lukuja, niin kauan kuin ne ovat erisuuria kuin 0. Jos luku ei ole nolla lisätään se muuttujaan dluku3 ja samalla lisätään yhdellä muuttujan arvoa dluku2. Lopuksi jaetaan dluku3 dluku2:lla eli saadaan keskiarvo syötetyistä luvuista ja tulostetaan se. 17

Tehtävä Tee ohjelma, joka pyytää käyttäjältä alku- ja loppuarvon sekä tulostaa kaikki kokonaisluvut näiden arvojen väliltä. Käytä toteutukseen while-lausetta. Kirjoita paperille vastaus ja käytä mahdollisimman eksaktia C# - syntaksia. Ratkaisu int ialku, iloppu; Console.WriteLine("Anna alkuarvo: "); ialku = Convert.ToInt32(Console.ReadLine()); Console.WriteLine("Anna loppuarvo: "); iloppu = Convert.ToInt32(Console.ReadLine()); while (ialku <= iloppu) { Console.WriteLine(iAlku); ialku = ialku + 1; 18

do-while -lause do-while lause on ns. loppuehtoinen toistolause toistokertojen määrä ei ole etukäteen tiedossa do-while -lauseen muoto: do { lause;... lause; while(ehto); (Koottua) lausetta toistetaan niin kauan, kun ehto on tosi. Huomaa puolipiste! Ehto on totuusarvoinen lauseke ja sen arvo tarkastetaan aina toistokerran suorittamisen jälkeen. Kun ehto saa arvon epätosi, siirrytään while-lausetta seuraavaan lauseeseen. do-while -lause int ialku, iloppu; Console.WriteLine("Anna alkuarvo: "); ialku = Convert.ToInt32(Console.ReadLine()); Console.WriteLine("Anna loppuarvo: "); iloppu = Convert.ToInt32(Console.ReadLine()); do { Console.WriteLine(iAlku); ialku = ialku + 1; while (ialku <= iloppu); 19

Tehtävä : Mitä tulostaa ao. koodi ( syöte: 2 ja 5) int ialku, iloppu; Console.Write("Anna alkuarvo: "); ialku = Convert.ToInt32(Console.ReadLine()); Console.Write("Anna loppuarvo: "); iloppu = Convert.ToInt32(Console.ReadLine()); Console.WriteLine("while - rakenteen avulla "); while (ialku <= iloppu) { Console.WriteLine(iAlku); ialku = ialku + 1; Console.WriteLine("vielä do while - rakenteen avulla "); do { Console.WriteLine(iAlku); ialku = ialku + 1; while (ialku <= iloppu); Console.WriteLine(""); Ratkaisu Miksi näin? 20

for-lause for-lause on ns. lukumääräinen toistolause toistokertojen määrä on etukäteen tiedossa for-lauseen muoto: for (alkuasetus; ehto; eteneminen) { lause;... lause; Alkuasetus suoritetaan yhden kerran ennen toistokertojen alkamista. Alkuasetusta käytetään toistokertojen lukumäärää ylläpitävän laskurimuuttujan (eli ns. indeksimuuttujan) määrittelyyn. Ehto on totuusarvoinen lauseke ja sen arvo tarkastetaan aina ennen toistokerran suorittamista. Eteneminen on lause, joka suoritetaan jokaisen toistokerran jälkeen. Etenemistä hallitaan laskurimuuttujan arvon muuttamisella. for lause; esimerkki int ilkm; Console.WriteLine( Montako tähteä haluat: ); ilkm = Convert.ToInt32(Console.ReadLine()); for (int i = 0; i < ilkm; i=i+1) { Console.Write( * ); 21

for lause; harjoitus Miten muuttaisit edellistä tehtävää, jotta saisit seuraavanlaisen lopputuloksen? for lause; ratkaisu int ilkm, irivit, i, x; Console.Write("Montako tähteä riville haluat: "); ilkm = Convert.ToInt32(Console.ReadLine()); Console.Write("Montako riviä tähtiä haluat: "); irivit = Convert.ToInt32(Console.ReadLine()); Console.WriteLine(""); for (x = 0; x < irivit; x = x+1){ for (i = 0; i < ilkm; i=i+1) { Console.Write("* "); Console.WriteLine(""); Console.WriteLine(""); 22

for lause; tehtävä Tee ohjelma, joka pyytää käyttäjältä alku- ja loppuarvon sekä tulostaa kaikki kokonaisluvut näiden arvojen väliltä. Tee ohjelmasta sellainen, että se toimii suuremmasta luvusta pienempään eli siis tulostaa esim. numerot alkuarvosta 6 0. Käytä toteutukseen for-lausetta. for lause; ratkaisu int ialku, iloppu, i; Console.Write("Anna alku: "); ialku = Convert.ToInt32(Console.ReadLine()); Console.Write("Anna loppu: "); iloppu = Convert.ToInt32(Console.ReadLine()); for (i = ialku ; i >= iloppu ; i = i - 1) { Console.WriteLine(i); 23

Taulukko jos tarvitaan n kappaletta keskenään samantyyppisiä muuttujia, ne voidaan koota taulukoksi esimerkki: pyydetään käyttäjältä 8 kokonaislukua ensin ilman taulukkoa: int iluku1, iluku2, iluku3, iluku4, iluku5, iluku6, iluku7, iluku8; Console.Write( Anna 1. luku: ); iluku1 = Convert.ToInt32(Console.ReadLine()); Console.Write( Anna 2. luku: ); iluku2 = Convert.ToInt32(Console.ReadLine()); Console.Write( Anna 3. luku: ); iluku3 = Convert.ToInt32(Console.ReadLine());... Console.Write( Anna 7. luku: ); iluku7 = Convert.ToInt32(Console.ReadLine()); Console.Write( Anna 8. luku: ); iluku8 = Convert.ToInt32(Console.ReadLine()); Taulukko ja sitten sama taulukon avulla int i; int[] iluku = new int[8]; for (i=0; i<8; i=i+1) { Console.Write( Anna + (i+1) +. luku: ); iluku[i] = Convert.ToInt32(Console.ReadLine()); taulukko koostuu keskenään samantyyppisistä (muuttujatyyppejä) alkioista 100 23 123 265 2 34 554 3 alkio 24

Taulukko taulukolla on nimi taulukon alkioihin viitataan nimen ja alkion järjestysnumeron (eli indeksin) avulla indeksointi alkaa aina nollasta! Taulukko: iluku 100 23 123 265 2 34 554 3 indeksi 0 1 2 3 4 5 6 7 iluku[0] iluku[1] iluku[2] iluku[3] iluku[4] iluku[5] iluku[6] iluku[7] alkioita käytetään kuten tavallisia muuttujia iluku[2] = 12; iluku[3] = iluku[3] + 2; iluku[4] = iluku[1] + iluku[2] + iluku[3]; Taulukko taulukko on nimi on muotoa: tietotyyppi[] esim. kokonaislukutaulukko int[], jonka alkioiden arvoina voi olla inttyyppisiä arvoja taulukkotyyppisen muuttujan tietotyyppinä on taulukko uusi taulukko luodaan siis tyyliin tietotyyppi[n], jossa n kertoo alkioiden lukumäärän esim. 8-alkioinen kokonaislukutaulukko luodaan int[8] taulukkomuuttujan määrittely tietotyyppi[] nimi = new tietotyyppi[n]; int[] luku = new int[8]; 25

Taulukko int[] iluku = new int[8]; int i; // sijoitetaan luvut taulukoon for (i=0; i<8; i = i + 1) { iluku[i] = i; // tulostetaan syötetyt luvut for (i=0; i<8; i = i + 1) { Console.WriteLine( Alkiossa + i + : + iluku[i]); 1. tenttiin tuleva aineisto päättyy tähän! 26

Olio-ohjelmointi olioperustaisuus on eräs ohjelmointiparadigma paradigma = esikuva, malli, kaava tapa kuvata erilaisten järjestelmien rakennetta ja toimintaa terminologia on osin vakiintumatonta miksi? tarve systematisoida ohjelmistojen rakentamista vastaa hyvin ihmisen tapaa hahmottaa maailmaa Oliotermistöä keskeistä olioajattelussa on tiedostaa ero abstraktin ja konkreettisen välillä abstrakti käsite konkreettinen ilmentymä teos Visual C#.NET - kirja auto Nissan Primera auto parkkipaikalla henkilö opiskelija Matti Möttönen abstrakti käsite kirjoitetaan C#-kielessä luokaksi ja jokainen sen pohjalta luotu konkreettinen ilmentymä on olio 27

Oliotermistöä se, mitä abstraktille käsitteelle (luokalle) voidaan tehdä, kirjoitetaan metodeiksi kaikki tieto, mikä abstraktiin käsitteeseen (luokkaan) liittyy, kirjoitetaan kentiksi esimerkki: luokka Henkilö kenttä syntymäaika kenttä nimi kenttä ikä metodi ristiminen() metodi tervehdi() metodi vanhene() Oliotermistöä luokan perusteella luodaan konkreettisia (fyysisiä) olioita Henkilö luokka kenttä syntymäaika kenttä nimi kenttä ikä metodi ristiminen() metodi tervehdi() metodi vanhene() Luodaan uusi olio Henkilö olio 12.4.1982 Matti Möttönen 23 v ristiminen() tervehdi() vanhene() Matti Möttönen oliota siis käytetään metodiensa välityksellä. Hän kentät perintönä luokalta ja osaa toimia metodien mukaan. 28

Tehtävä Suunnittele luokka Auto. Mitä tietoja autoon liittyy? = kentät Mitä autolla voidaan tehdä? = metodit Ratkaisu Auto-luokka kentät: polttoainesäiliön tilavuus merkki malli hinta moottoritilavuus Metodit: LisääPolttoAinetta(litramäärä) UusiHinta(uusi hinta) AvaaOvet() KäynnistäMoottori() Aja(suunta) 29

Kenttä kentät kuvaavat kaikki tiedot, jotka luokkaan liittyvät luokan pohjalta luodun olion kentillä on oliota kuvaavat arvot kenttiä käsitellään tyypillisesti vain metodien kautta kenttä määritellään lähes samoin kuin muuttuja: näkyvyysmääreitä tyyppi nimi; näkyvyysmääreillä säädellään kentän käytettävyyttä private = kenttä on käytettävissä vain luokan metodien välityksellä public = kenttä on käytettävissä luokan ulkopuolelta esimerkki: private string ssukunimi; private string setunimi; private int iika; Metodi metodilla toteutetaan jokin palvelu, ja sitä ohjataan parametriensa välityksellä Esimerkki Onko vuosi 2005 karkausvuosi? karkausvuosiko(2005) Ei karkausvuosiko(vuosi) 1. Vastaanotetaan parametrina vuosi 2. Selvitetään vuodesta karkausvuosi 3. Palautetaan paluuarvona vastaus 30

Metodi Metodin toiminta perustuu seuraavaan kaavaan: lähtötiedot toiminta vastaus Esimerkki C# - metodina tulo - metodi public int Tulo(int iluku1, int iluku2) { int itulos; itulos = iluku1 * iluku2; return itulos; Metodi metodien avulla luokkaa voidaan käsitellä jollakin tavalla luokasta luotua oliota käytetään vain metodiensa välityksellä metodin määrittely (kirjoitetaan johonkin luokkaan elementiksi): [näkyvyysmääreitä] paluuarvon_tyyppi nimi (parametrit) { algoritmi näkyvyysmääreillä säädellään metodin käytettävyyttä private = luokan omassa käytössä oleva metodi public = muiden luokkien käytössä oleva metodi static = luokkametodi, jota kutsutaan luokan kautta (kaikille luokan olioille yhteinen) paluuarvon tyyppi tietotyyppi, joka kertoo, minkä tyyppisen arvon metodi palauttaa void = metodi ei palauta lainkaan arvoa 31

Metodi esimerkki: public void ristiminen(string n) { nimi = n; public void tervehdi() { Console.WriteLine( Morjens, olen + nimi); metodi käynnistetään kutsumalla sitä metodikutsu muodostuu metodin nimestä sekä mahdollisten parametrien arvoista esimerkki: ristiminen( Matti Möttönen ); tervehdi(); Metodi metodin parametrit ovat metodin muuttujia, joita käytetään välittämään tietoa metodille sen kutsumisen yhteydessä parametrit saavat aina (alku)arvonsa metodin kutsumisen yhteydessä parametrin arvoa ei voi muuttaa itse metodissa parametrin määrittely on samanlainen kuin muuttujalla: tietotyyppi nimi Esimerkki koodista public void Toista(string stext, int ikerta) { int i; for (i=0; i < ikerta; i = i + 1) { Console.WriteLine(sText); Koodissa kutsu tapahtuu seuraavasti: Toista( Hello World, 2); Hello World Hello World 32

Metodi metodin paluuarvo osa metodeista on arvon palauttavia paluuarvon tyyppi kirjoitetaan metodimäärittelyyn ennen metodin nimeä void tarkoittaa, että paluuarvoa ei ole jos metodi palauttaa arvon, siinä on oltava return-lause, joka ilmaisee palautettavan arvon kun return-lause suoritetaan, metodin suoritus päättyy esimerkki public int KuukaudessaPaivia(int ikk) { switch (ikk) { case 1: case 3: case 5: case 7: case 8: case 10: case 12: return(31); break; case 2: return(28); break; case 4: case 6: case 9: case 11: return(30); break; default: return (0); Miten olio luodaan? Miten käytetään? public static void Main(string[] args) { PapuKaija pk = new PapuKaija(); pk.ristiminen("polly"); pk.toista("terve maailma", 2); // luodaan pk niminen olio luokasta PapuKaija // kutsutaan metodia Ristiminen // kutsutaan metodia Toista -------------------------------------------------------- // HUOM! Tämä eri tiedostoon class PapuKaija { private string snimi; // määritellään kenttä snimi, luokalle public void Toista(string stext, int ikerta) // toistetaan haluttua tekstiä haluttu määrä { int i; for (i=0; i < ikerta; i = i + 1) { Console.WriteLine(sText); public void Ristiminen(string stext) // tämä metodi asettaa oliolle ( PapuKaijalle) nimen eli siis muuttaa kentän snimi arvoa { snimi = stext; 33

Miten metodeja käytetään samassa tiedostossa? public static void Main(string[] args) { Ristiminen("Polly"); Toista("Terve maailma", 2); // kutsutaan metodia Ristiminen // kutsutaan metodia Toista private static string snimi; // määritellään kenttä snimi luokalle public static void Toista(string stext, int ikerta) // toistetaan haluttua tekstiä haluttu määrä { int i; for (i=0; i < ikerta; i = i + 1) { Console.WriteLine(sText); // tämä metodi asettaa nimen eli siis muuttaa kentän snimi arvoa public static void Ristiminen(string stext) { snimi = stext; // kun metodit samassa tiedostossa kuin Main metodi pitää avainsana static lisätä näkyvyysmääreen (public) perään sekä metodeilla että kentillä. Metodi itsenäisessä (= suoritettavassa) C#-ohjelmassa on aina main()-metodi public static void main(string[] args) C#-ohjelman suoritus tarkoittaa käytännössä mainmetodin suorittamista 34

Metodi luokassa voi olla myös useita samannimisiä metodeja, joilla on erilaiset parametrit tätä ilmiötä kutsutaan kuormittamiseksi esimerkki: public void TulostaNelio(double dsivunpituus) public void TulostaNelio(int isivunpituus) public void TulostaNelio(int isivu1, int isivu2) esim. metodi Console.WriteLine() on kuormitettu useille erityyppisille parametreille C# - kääntäjä päättää suoritettavan metodin kutsussa olevien parametriarvojen tyyppien perusteella Olio olio luodaan luokka-määrityksen pohjalta jokaisella oliolla on omat kentät ja metodit luominen tehdään operaatiolla new luokkaa käytetään samoin kuin tietotyyppiä muuttujan tyypiksi voidaan asettaa luokka esimerkki olkoon määritelty luokka Henkilo nyt voidaan määritellä tätä tyyppiä oleva muuttuja: Henkilo henk; muuttujan arvoksi sijoitetaan luokasta luotu (new-operaatio) olio: henk = new Henkilo(); tämän jälkeen muuttujan arvona olevan olion metodeja voidaan suorittaa: henk.ristiminen( Matti Möttönen ); henk.tervehdi(); 35

Olio Olio Olio A B nimi: Polly Ristiminen() Tervehdi() 2. 3. nimi: Pedro Ristiminen() Tervehdi() Ohjelma 1. Luo PapuKaija-olio A; 2. A.ristiminen( Polly ); 3. A.tervehdi();... 4. Luo PapuKaija-olio B; 5. B.ristiminen( Pedro ); 6. B.tervehdi();... 1. 4. Luokka nimi Papukaija Ristiminen() Tervehdi() Olio main.cs: class MainClass { public static void main(string[] args) { PapuKaija pka, pkb; pka = new PapuKaija(); pka.ristiminen( Polly ); pka.tervehdi( Terve, 2); pkb = new Henkilo(); pkb.ristiminen( Pedro ); pkb.tervehdi( Moro,3); PapuKaija.cs: public class PapuKaija { private string snimi; public void Ristiminen(string n) { snimi = n; public void Tervehdi(string stext, int ikrt ) { int i; for ( i = 0;i < ikrt; i++) { Console.WriteLine(sText + olen + snimi ); 36

Konstruktori luokassa voi olla metodi, jota käytetään olion luomiseen tällaista metodia kutsutaan konstruktoriksi eli rakentajaksi konstruktorin nimi on aina sama kuin luokan nimi esimerkiksi luokan Henkilo konstruktori on Henkilo() konstruktorin määrittelyssä ei käytetä lainkaan paluuarvon tyyppi määrettä konstruktori asettaa tyypillisesti kenttien alkuarvoja kenttien alkuarvoja ei siis tule asettaa kentän määrittelyssä vaan konstruktorissa luokassa voi olla useita konstruktoreita keskenään samannimisiä, mutta parametriosat ovat erilaisia (= kuormittaminen) jos luokassa ei ole määritelty konstruktoria, suoritetaan oliota luotaessa parametriton ns. oletuskonstruktori käynnistää ns. yliluokan konstruktorin liittyy olio-ohjelmoinnin käsitteeseen periytyminen, jota emme ole käsitelleet Konstruktori public class Piste { private int x; private int y; // kentät public Piste() { // konstruktori x = 0; y = 0; public Piste(int iarvox, int iarvoy) { // konstruktori x = iarvox; y = iarvoy; public int GetX() { // metodi return x; public int GetY() { // metodi return y; public void Siirry(int iarvox, int iarvoy) { // metodi x = x + iarvox; y = y + iarvoy; 37

Aksessori Käsittele luokkien kenttiä vain metodien avulla metodi, joka asettaa kenttään arvon tai palauttaa paluuarvonaan kentän arvon, kutsutaan aksessorimetodiksi aksessorimetodit nimetään tyypillisesti Get- ja Set-alkuisiksi esimerkki public class Henkilo { private int iika public Henkilo() { iika = 0; public void SetIka(int iarvo) { iika = iarvo; public int GetIka() { return iika; // kenttä // konstruktori // set-aksessorimetodi // get-aksessorimetodi Aksessorit tapa 2. Toinen tapa käyttää aksessoria public class Henkilo { private int iika; // kenttä public Henkilo() { // konstruktori iika = 0; public int Ika { //aksessori get { return iika; //palautetaan arvo set { iika = value; //asetetaan arvo value - nimisen parametrin avulla 38

Aksessorit; Miten käytetään? voit käyttää kumpaa tahansa Aksessori metodia käytät kuten metodeja yleensä Tapa 2 eli aksessoria käytät seuraavasti: public static void Main(string[] args) { Henkilo h = new Henkilo(); // olio.aksessori h.ika++; // voit käyttää aksessoria kuten sekoittaen metodin ja muuttujan Console.WriteLine(h.Ika); // tulostuksessa viittaa suoraan aksessoriin 39