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

Samankaltaiset tiedostot
Tieto- ja tallennusrakenteet

Tutoriaaliläsnäoloista

TAVOITTEET JA SISÄLTÖ... 2 OPPIMATERIAALIT...

Muistutus aikatauluista

ATK tähtitieteessä. Osa 3 - IDL proseduurit ja rakenteet. 18. syyskuuta 2014

Algoritmit 1. Luento 3 Ti Timo Männikkö

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

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

811120P Diskreetit rakenteet

Java-kielen perusteita

Tietorakenteet ja algoritmit Johdanto Lauri Malmi / Ari Korhonen

C-kielessä taulukko on joukko peräkkäisiä muistipaikkoja, jotka kaikki pystyvät tallettamaan samaa tyyppiä olevaa tietoa.

811120P Diskreetit rakenteet

811312A Tietorakenteet ja algoritmit Kertausta kurssin alkuosasta

58131 Tietorakenteet ja algoritmit (syksy 2015)

13. Loogiset operaatiot 13.1

ITKP102 Ohjelmointi 1 (6 op)

Kysymyksiä koko kurssista?

Tietorakenteet ja algoritmit - syksy

A TIETORAKENTEET JA ALGORITMIT

Ohjelmoinnin perusteet Y Python

Algoritmit 2. Luento 2 To Timo Männikkö

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python

ITKP102 Ohjelmointi 1 (6 op)

Algoritmit 2. Luento 7 Ti Timo Männikkö

Tietorakenteet (syksy 2013)

Tietorakenteet ja algoritmit

Jakso 4 Aliohjelmien toteutus

Algoritmit 2. Luento 2 Ke Timo Männikkö

Tietorakenteet ja algoritmit syksy Laskuharjoitus 1

12. Javan toistorakenteet 12.1

Se mistä tilasta aloitetaan, merkitään tyhjästä tulevalla nuolella. Yllä olevassa esimerkissä aloitustila on A.

Ohjelmoinnin perusteet Y Python

Aliohjelmatyypit (2) Jakso 4 Aliohjelmien toteutus

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

Algoritmit. Ohjelman tekemisen hahmottamisessa käytetään

Ohjelmoinnin peruskurssi Y1

Tietueet. Tietueiden määrittely

Jakso 4 Aliohjelmien toteutus

Olio-ohjelmointi Javalla

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

Lohkot. if (ehto1) { if (ehto2) { lause 1;... lause n; } } else { lause 1;... lause m; } 16.3

11. Javan toistorakenteet 11.1

Ohjelmoinnin perusteet Y Python

13. Loogiset operaatiot 13.1

Algoritmit 2. Luento 14 Ke Timo Männikkö

Java-kielen perusteet

811312A Tietorakenteet ja algoritmit II Perustietorakenteet

12. Javan toistorakenteet 12.1

Lohkot. if (ehto1) { if (ehto2) { lause 1;... lause n; } } else { lause 1;... lause m; } 15.3

Luento 4 Aliohjelmien toteutus

2. Seuraavassa kuvassa on verkon solmujen topologinen järjestys: x t v q z u s y w r. Kuva 1: Tehtävän 2 solmut järjestettynä topologisesti.

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

1. Mitä tehdään ensiksi?

(p j b (i, j) + p i b (j, i)) (p j b (i, j) + p i (1 b (i, j)) p i. tähän. Palaamme sanakirjaongelmaan vielä tasoitetun analyysin yhteydessä.

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

815338A Ohjelmointikielten periaatteet Harjoitus 3 vastaukset

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

useampi ns. avain (tai vertailuavain) esim. opiskelijaa kuvaavassa alkiossa vaikkapa opintopistemäärä tai opiskelijanumero

ITKP102 Ohjelmointi 1 (6 op)

A TIETORAKENTEET JA ALGORITMIT

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

Ehto- ja toistolauseet

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

Harjoitus 3 -- Ratkaisut

Ohjelmoinnin perusteet Y Python

Algoritmit 1. Luento 8 Ke Timo Männikkö

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python

811312A Tietorakenteet ja algoritmit Kertausta kurssin alkuosasta

A ja B pelaavat sarjan pelejä. Sarjan voittaja on se, joka ensin voittaa n peliä.

Ohjelmoinnin perusteet Y Python

Algoritmit 2. Luento 13 Ti Timo Männikkö

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

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

Ohjelmoinnin perusteet Y Python

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

Algoritmit 1. Luento 9 Ti Timo Männikkö

Tietotyypit ja operaattorit

Algoritmit 2. Luento 3 Ti Timo Männikkö

(a) L on listan tunnussolmu, joten se ei voi olla null. Algoritmi lisäämiselle loppuun:

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

Perinteiset tietokoneohjelmat alkavat pääohjelmasta, c:ssä main(), jossa edetään rivi riviltä ja käsky käskyltä.

Sisällys. 15. Lohkot. Lohkot. Lohkot

4.3. Matemaattinen induktio

811120P Diskreetit rakenteet

Sisällys. 18. Abstraktit tietotyypit. Johdanto. Johdanto

1 + b t (i, j). Olkoon b t (i, j) todennäköisyys, että B t (i, j) = 1. Siis operaation access(j) odotusarvoinen kustannus ajanhetkellä t olisi.

18. Abstraktit tietotyypit 18.1

Algoritmit 2. Luento 8 To Timo Männikkö

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

Algoritmit 1. Luento 1 Ti Timo Männikkö

Kielioppia: toisin kuin Javassa

Ohjelmoinnin perusteet Y Python

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

3. Muuttujat ja operaatiot 3.1

ITKP102 Ohjelmointi 1 (6 op)

811312A Tietorakenteet ja algoritmit , Harjoitus 2 ratkaisu

Algebralliset tietotyypit ym. TIEA341 Funktio ohjelmointi 1 Syksy 2005

Transkriptio:

Imperatiivisen ohjelmoinnin peruskäsitteet muuttuja muuttujissa oleva data voi olla yksinkertaista eli primitiivistä (esim. luvut ja merkit) tai rakenteista jolloin puhutaan tietorakenteista. puhuttaessa tietorakenteista tulee erottaa sen abstrakti malli (jolloin puhutaan abstraktista tietotyypistä eli ADT:stä) ja tallennusrakenne, joka kertoo millä ohjelmointikielen välineillä tietorakenne on toteutettu (taulukko, linkitetyt rakenteet, luokka, ) lauseke voi olla muuttuja (arvo voi olla primit. tai rakent. tyyppiä) aritmeettinen lauseke (lukuarvoinen) looginen eli ehtolauseke (totuusarvoinen) merkkijonolauseke (arvona merkkien jono) funktionaalisen moduulin kutsu lauseet: asetuslause valintalause (IF) toistolause (FOR, WHILE, REPEAT tai DO) luku- / kirjoituslauseet proseduraalisen moduulin kutsu 1 moduuli eli metodi eli aliohjelma erota moduulin esittely ja moduulin kutsu moduulin parametrit ja niiden välitystapa muuttujien ja moduulien nimet ovat ohjelmoijan valitsemia kuvaavia tunnisteita algoritmi koostuu peräkkäisistä lauseista, joista keskeisessä asemassa on asetuslause algoritmin tila = muuttujien senhetkiset arvot jokaiseen lauseen suorituksen jälkeen siirrytään uuteen tilaan ALKUTILA Algoritmi LOPPUTILA algoritmissa käytettyjen muuttujien alkuarvot 2 muuttujien loppuarvot Meidän käyttämän pseudokielen lauseiden syntaksi On myös kursssivuilla Huom. Lauseet sisältävät osinaan lauseita!

Lausejono: yksi tai useampi lause peräkkäin tai voi olla myös tyhjä Asetuslause: <muuttuja> := <lauseke> Toistolauseet: Alkuehtoinen toisto: toisto loppuu, kun <totuusarvoinen lauseke> on epätosi: WHILE <totuusarvoinen lauseke> DO ENDWHILE <lausejono> Valintalauseet: IF <totuusarvoinen lauseke> THEN <lausejono> ENDIF Loppuehtoinen toisto: toisto loppuu, kun <totuusarvoinen lauseke> on tosi: REPEAT <lausejono> UNTIL <totuusarvoinen lauseke> ja IF <totuusarvoinen lauseke> THEN <lausejono> ELSE <lausejono> ENDIF Askeltava toisto: suoritetaan kohdassa <lausejono> olevat lauseet yhden kerran kutakin listan alkiota kohti: FOR <muuttuja>:=<listan ensimmäinen arvo>,..., <listan viimeinen arvo> DO ENDFOR <lausejono> 3 4

Tätä monet ihmettelevät: Miksi algoritmien opettelussa käytettävät esimerkit ovat usein laskennallisia (matemaattisia)? Esimerkki. Algoritmin muuttujat, lauseet ja (aritmeettiset/loogiset) lausekkeet? Mitä tulostuu? Tämä on vanha tenttitehtävä. n := 2 k := 3 WHILE n+k < 23 DO IF n < k THEN ELSE ENDIF k := k+1 n := n + k k := k + 2 tulosta n ja k ENDWHILE tulosta n ja k Esimerkki. n! = 1*2 *3* * n, kun n>0. 0!=1 Tehtävä 1: Aseta muuttujaan k lausekkeen 4! arvo. Ratkaisu: k := 1 * 2 * 3 * 4 jonka jälkeen muuttujassa k on arvo 24. Tehtävä 2: Olkoon muuttujassa n ei-negatiivinen kokonaisluku. Aseta muuttujaan k lausekkeen n! arvo. Ratkaisu: Algoritmin pitää toimia olkoonpa n:ssä mikä tahansa ei-negat. kokonaisluku. Oletetaan ensin, että n>0 ja tarkastellaan lopuksi erikoistapaus n=0. Asetuslause k := 1 * 2 * 3 * * n on VÄÄRIN Ratkaisu tulee perustaa kahden arvon kertomiseen keskenään: aluksi k =1 kerrotaan k luvulla 1 ja sijoitetaan tulos k:hon (turha) kerrotaan k luvulla 2 ja sijoitetaan tulos k:hon kerrotaan k luvulla 3 ja sijoitetaan tulos k:hon kerrotaan k arvolla n ja sijoitetaan tulos k:hon Tämän jälkeen k:ssa on n-kertoman arvo. 5 6

Miten algoritmin suunnittelu aloitetaan: Mitä muuttujia tarvitaan? Toistorakenteen laatiminen (tässä järjestyksessä): o kirjoitetaan ensin silmukan rungon lauseet o kirjoitetaan muuttujien alkuarvot o kirjoitetaan WHILEn ehto (totuusarvoinen lauseke) Seuraavassa ovat ratkaisut, jotka eivät muuta n:n sisältöä: kertoja := 1 k := 1 WHILE kertoja <= n DO k := kertoja * k kertoja := kertoja + 1 ENDWHILE Alkutila, lopputila? Mistä n? k := 1 FOR kertoja := 1,2,,n DO k := kertoja * k ENDFOR Mitä algoritmi laskee, jos WHILE lauseen rungon lauseiden järjestys vaihdetaan? Algoritmi voidaan kuitenkin muuttaa oikeaksi myös tällöin. Miten? Miten voidaan tutkia onko WHILE-rakenteen lopetusehto oikein? MODUULIT JA PARAMETRIT (algoritmi)moduuli = aliohjelma = metodi = rutiini yleensä ohjelma koostuu ns. päämoduulista (=pääohjelma), joka suoritetaan. Päämoduuli (mainmoduuli) sisältää tyypillisesti moduulien kutsuja, jotka puolestaan voivat sisältää muiden moduulien kutsuja. moduulilla tulee olla yksi selkeä tehtävä ja se pyritään yleistämään parametrien avulla mahdollisimman yleiseksi, jotta se olisi monikäyttöinen moduulien ja parametrisoinnin avulla pyritään siihen, että sama koodinpätkä tarvitsee kirjoittaa vain kerran (uudelleenkäytettävyys) ohjelmakokonaisuus muodostuisi hyvin määritellyistä komponenteista niin, että koko ohjelma on selkeä ja että ohjelman muuttaminen olisi mahdollisimman helppoa (ylläpito helpottuu) tietorakenteiden käsittely ja niiden käytös (ominaisuudet) tulevat täsmällisesti määriteltyä niihin kohdistettavien metodien välityksellä (olioohjelmointi ja valmiit luokkakirjastot) pitää erottaa moduulin määrittely ja sen kutsu (käyttö) Toimiiko algoritmi kun n=0 ja mitä tällöin tapahtuu. 7 8

Moduulin kirjoittajan tulee kirjoittaa moduulille alkuehto kommentin muodossa: ne ehdot parametreille, jolloin moduuli toimii oikein. Esim. n- kertoman moduulissa alkuehto on: n >= 0. rekursiivinen moduuli = moduuli, joka sisältää itsensä kutsun. Rekursiivisessa moduulissa tulee olla ns. rekursion kanta (triviaalitapaus), jossa tehtävälle annetaan ratkaisu suoraan rekursioaskel, jossa palautetaan tehtävä saman tehtävän pienemmäksi tehtäväksi, jonka tulee lähestyä rekursion kantaa moduuleja on kahta tyyppiä: proseduureja ja funktioita funktionaalisen moduulin kutsu on lauseke (sillä on siis arvo) ja proseduraalisen moduulin kutsu on lause (käsky). kirjoitamme proseduurin -> lisäämme kieleen (parametrisoidun) uuden lauseen eli käskyn kirjoitamme funktion -> lisäämme kieleen uuden funktion, jonka tuloksena on arvo (useissa kielissä arvo voi olla myös rakenteinen) jos moduuli ei palauta mitään, on se proseduuri. Jos taas moduuli palauttaa jotain, se on funktio. Funktionaalisen moduulin määrittely: MODULE <moduulin nimi> (<muodolliset parametrit>) RETURNS <palautusarvo> <moduulin lauseet> ENDMODULE Moduulissa tulee olla RETURN-lause! Proseduraalisen moduulin määrittely: MODULE <moduulin nimi> (<muodolliset parametrit>) <moduulin lauseet> ENDMODULE Funktion kutsu (on lauseke ja sillä on arvo): <moduulin nimi> (<todelliset parametrit>) Proseduurin kutsu (on lause eli käsky): <moduulin nimi> (<todelliset parametrit>) 9 10

Esimerkkejä. Kirjoita moduuli, joka palauttaa kolmesta luvusta pienimmän (suoraan ilman moduulia min2). Tehdään yhdessä. Moduulin määrittely vs. käyttö, muod. ja tod. parametrit? main-moduuli Tehdään yhdessä tenttitehtävä (lopussa), jossa on 1+2+ +z. Miten algoritmi muunnetaan moduuliksi. Parametrit? Käyttö eli miten sitä kutsutaan? Tehtävän ratkaiseva algoritmi voidaan toteuttaa monella eri tavalla: katso esim. materiaalien moduuli alkuluku(n) ja Villen vastaava esimerkki sekä moduuli, joka laskee summan 1+2+...+n rekursiivisesti. MODULE summa(n) RETURNS luku o Muodolliset parametrit ja todelliset parametrit o Parametrien arvojen kopiointi o Milloin muistipaikat ovat olemassa ja mitä niissä on ohjelman suorituksen aikana. o Onko väliä minkä nimisiä muuttujia moduulissa käytetään? Miksi? o Onko väliä vaikka eri moduuleissa käyttää samannimisiä muuttujia ENDMODULE Mitä tapahtuu kutsuilla summa(0) ja summa(-1)? 11 12

TIETO- JA TALLENNUSRAKENTEET (viimeisen viikon asiat) maailma ei koostu pelkästään luvuista ja merkeistä, vaan asioita mallinnetaan paljon monimutkaisimmilla rakenteilla (jotka tietenkin loppujen lopuksi koostuvat vain merkeistä ja numeroista ja viimekädessähän nämä toteutetaan vain biteillä) abstrakti tietotyyppi (ADT) tarkoittaa mallia, jossa kuvataan siihen kuuluvat mallin kannalta oleelliset tiedot ja kaikki malliin kohdistettavat operaatiot ja niiden merkitykset (operaatiot määräävät tietorakenteen ominaisuudet ja merkityksen) ADT:n lista ja 2-haarainen puu (binääripuu) määrittely: lista on joko tyhjä tai se on alkio, jota seuraa lista 2-haarainen puu on joko tyhjä tai se on alkio (solmu), jota seuraa kaksi 2- haaraista puuta ADT:t pino ja jono ovat (erityisiä) listoja, joille on määritelty vain lisäys- ja poisto-operaatio, jotka toimivat tietyllä tavalla (tällä mallinnetaan reaalimaailman tiettyä käyttäytymistä). pinon käyttäytyminen: kun otetaan alkio pois, tulee sen olla se alkio, joka on sinne viimeksi lisätty. jonon käyttäytyminen: kun otetaan alkio pois, tulee sen olla se alkio, joka on ollut jonossa kauimmin. tulee erottaa ADT ja sen tallennusrakenne (eli mikä on ohjelmointikielen väline ko. rakenteen toteuttamiseksi) lista voidaan toteuttaa esim. 1-ulotteisella taulukolla, joka on tallennusrakenne, joka on kaikissa imperatiivissa ohjelmointikielissä 13 14

Taulukot taulukkoon voidaan viitata kokonaisuutena yhdellä muuttujalla (esim. v) taulukon alkiotyyppi (komponentin sisältö) riippuu käytettävästä ohjelmointikielestä, mutta yleensä niiden kaikkien tulee olla samaa tyyppiä (esim. kokonaislukuarvoisia) taulukon alkioihin viitataan indeksin avulla: esim. v[3], v[k] (indeksinä muuttuja) tai v[k+2]) (indeksinä lauseke) Miten alkiot saadaan taulukkoon? Alkiot tallennetaan taulukkoon yksitellen käyttäen esim. asetuslausetta (esim. v[1]:=3) tai kaikki kerralla vakioarvoina (esim. v:={23,56}; ei mahdollista kaikissa kielissä) erota indeksi (jolla siis kerrotaan vektorin se kohta, mihin halutaan viitata) ja taulukon komponentti (alkio, lokeron sisältö) taulukon komponenttien indeksointi (eli monesko lokero ): pseudokielessä 1,2,, mutta Villessä ja Javassa 0,1, taulukko on staattinen kiinteänmittainen rakenne: komponenttien lukumäärää tulee ilmoittaa luotaessa ja rakenne pysyy samankokoisena koko ohjelman suorituksen ajan vektori: 1-ulotteinen taulukko matriisi: 2-ulotteinen taulukko opiskeluopas s. 39: vektorin alkioiden summa: MODULE summa(t,n) RETURNS vektorin T n:n ensimmäisen alkion summan s := 0 k := 1 WHILE k <= n DO s := s + T[ k ] k := k + 1 ENDWHILE RETURN s ENDMODULE T s n k 7 5 9 0 3 1 Tässä T:ssä on kolme alkiota: T[1]=7, T[2]=5, T[3]=9, joten kutsun summa(t,3) arvo on 21. Opiskeluoppaan s. 38 tehtävä: Mikä on lausekkeen summa(t,1)+summa(t,2)+summa(t,3) arvo? Mitä edellä pitää muuttaa, jos halutaankin palauttaa parametrina annetun taulukon alkioiden keskiarvo 15 16

Javalla vektorin alkioiden summa (ihan vaan esimerkkinä): public static double summa (double[] t) { double s = 0.0; int k = 0; while (k < t.length) { s = s + t[ k ]; k = k + 1; // tai: k++; } return s; } Kirjoitetaan vielä ns. pääohjelma eli main-moduuli, josta ohjelman suoritus alkaa. Moduulissa määritellään kaksi vektoria ja kutsutaan em. metodia. Tehdään yhdessä: Kirjoita moduuli, joka palauttaa tiedon siitä kuinka monta kappaletta parametrina annetun taulukon T alkioista on suurempia kuin parametrina annettu luku a. 17 18

Vaihtolajittelu: opintomoniste s. 61, harjoitustehtävä. MODULE vaihtolajittelu(t) RETURNS vektorin T lajiteltuna n := T.length FOR i := 1, 2,..., n-1 DO FOR k := i+1,..., n DO IF T[ i ] > T[ k ] THEN (* vaihda T[i]:n ja T[k]:n sisällöt keskenään *) apu := T[i] T[i] := T[k] T[k] := apu ENDIF ENDFOR ENDFOR RETURN T ENDMODULE i=1 i=2 i=3 66 55 55 66 44 44 33 33 k=2 k=3 k=4 k=3 k=4 k=4 Yo. taulukot kuvaavat tilannetta aina mahdollisen vaihdon jälkeen eli tilannetta kun IF-lause on suoritettu. Seuraavassa on vanhoja tenttitehtäviä. Yksi oli jo tämän materiaalin alussa. 1. a) Olkoon muuttujassa z jokin positiivinen kokonaisluku. Kirjoita WHILE- (tai REPEAT-) lausetta käyttävä algoritmi (ei MODULE), jonka suorituksen jälkeen muuttujassa k on lausekkeen 1+2+3+ +z arvo. Algoritmin suoritus ei saa muuttaa muuttujan z arvoa. Mitä algoritmisi suoritus saa aikaan, jos z olisikin 0 tai negatiivinen? b) Miten muutat a)-kohdan algoritmin funktionaaliseksi moduuliksi (MODULE), joka palauttaa lausekkeen 1+2+3+ +z arvon. c) Kirjoita lause, joka asettaa muuttujaan y arvon 35 + (1+2+3+4+5+6+7+8)/8. Lauseessa tulee olla b)-kohdan moduulin kutsu. Ratkaisu: 19 20

5. Selitä lyhyesti käsitteet: muuttuja, aritmeettinen lauseke, looginen eli totuusarvoinen lauseke ja lause. Anna myös esimerkit näistä. Mikä rooli on varatuilla sanoilla ENDIF ja ENDWHILE ja millä muulla tavalla ohjelmointikielissä tämä voidaan myös ilmaista. Vastauksen tulee mahtua yhdelle sivulle. 2. a) Anna määritelmä abstraktille tietotyypille lista ja esitä listalle suoritettavat tyypilliset operaatiot. Minkälaisia rakenteita ovat pino ja jono? b) Oletetaan, että lukuja sisältävä lista toteutetaan vektorina. Kirjoita moduuli, joka palauttaa parametrina annetun listan T alkioiden suurimman alkion arvon. Huom. Yllä ei ole mallikysymystä Tietokoneen toiminnasta ja rakenteesta ym. (katso jakson TTP I kurssisivut). Menestystä tenttiin! 4. Oletetaan, että käytössä on funktio lue(), joka lukee syötejonon (syötevirran) ensimmäisen luvun ja palauttaa sen arvon (samalla kyseinen luku häviää syötejonosta). Kirjoita algoritmi, joka lukee syötejonosta sata lukua ja laskee niiden keskiarvon. Anna ratkaisu käyttäen WHILE-lausetta. 21 22