811120P Diskreetit rakenteet 2018-2019 1. Algoritmeista
1.1 Algoritmin käsite Algoritmi keskeinen laskennassa Määrittelee prosessin, joka suorittaa annetun tehtävän Esimerkiksi Nimien järjestäminen aakkosjärjestykseen Viestin salaaminen Lyhimmän reitin löytäminen kahden paikkakunnan välillä Robottikäden liikkeen optimointi 811120P Diskreetit rakenteet, Algoritmeista 2
1.1 Algoritmin käsite. Heuristinen esimerkki 1. Sujauta pankkikorttisi sille varattuun aukkoon. 2. Kirjoita tunnuslukusi (PIN), kun sitä kysytään. 3. Valitse vaihtoehto 'käteisnosto' valikosta. 4. Valitse tai kirjoita summa, jonka haluat nostaa. x P(x) x P(x) 5. Valitse kirjaustapahtumista 'näytölle' tai 'kuitille. 6. Ota korttisi ja nostamasi summa. 7. Jos olit valinnut kohdassa 5 vaihtoehdon 'kuitille', ota kuitti. 811120P Diskreetit rakenteet, Algoritmeista 3
1.1 Algoritmin käsite. Algoritmin ominaisuuksia 1. Algoritmi muodostuu äärellisestä ohjejoukosta 2. Algoritmilla on toteuttaja (esim. ihminen tai kone) 3. On olemassa laittee tiedon käsittelyyn ja tallennukseen 4. Algoritmi käsittelee tietoa; sillä on syöte ja tuloste 5. Syötteen on oltava tiettyä muotoa ja äärellisesti esitettävissä; syötteen koolla ei ole kiinteää ylärajaa 6. Annetulla syötteellä toteuttaja suorittaa ohjeet mekaanisesti, deterministisesti ja askelittain 7. Tiedon tallentamiseen käytetyn muistitilan koko on äärellinen; koolla ei kuitenkaan ole kiinteää ylärajaa 811120P Diskreetit rakenteet, Algoritmeista 4
1.1 Algoritmin käsite. Algoritmin ominaisuuksia (2) 8. Jokaisella sovittua muotoa olevalla syötteellä algoritmi pysähtyy äärellisen askelmäärän jälkeen 9. Jokaisella sovittua muotoa olevalla syötteellä algoritmi joko ei tulosta mitään tai antaa äärellisen, yksikäsitteisen ja hyvin määritellyn tulosteen Erityisen oleellista hyvin määritelty äärellinen syöte, askelien mekaaninen suorittaminen, algoritmin päättyminen, hyvin määritelty tulos 811120P Diskreetit rakenteet, Algoritmeista 5
1.2 Pseudokoodi Tällä kurssilla algoritmit kirjoitetaan pseudokoodia (eli pseudokieltä) käyttäen Pseudokoodi: strukturoitua suomea ja / tai englantia Rakenne tärkeää Ei keskitytä ohjelmointikielten yksityiskohtiin Kykenee käsittelemään mm. Erilaisia lukuja Erilaisia merkkejä Jonoja ja joukkoja Listoja ja taulukoita 811120P Diskreetit rakenteet, Algoritmeista 6
1.2 Pseudokoodi. Esitystapa Syöte: Taulukko A[1,..,n], n >= 1 Tulostus: Taulukon alkioiden summa SUMMA(A) 1. sum = 0 2. i = 1 3. while (i <= n) do 4. sum = sum + A[i] 5. i = i+1 6. return sum Nimi ja parametrilista Algoritmin askeleet Otsikko Algoritmin paluuarvo 811120P Diskreetit rakenteet, Algoritmeista 7
1.2 Pseudokoodi. Muuttujat ja sijoituslauseke Koodissa voi esiintyä muuttujia, joilla on nimi ja arvo Muuttujan arvoa muutetaan sijoituslausekkeella (operaattori =) Esim. koodissa y = 12 x = 2*y + 1 sijoitetaan muuttujaan y arvo 12 ja tämän jälkeen muuttujaan x arvo 2*12+1 eli 25 Tehtävä: Kirjoita algoritmi, joka palauttaa ympyrän piirin pituuden, kun ympyrän säde saadaan syötteenä 811120P Diskreetit rakenteet, Algoritmeista 8
1.2 Pseudokoodi. Taulukot Taulukko on jono saman tyyppisiä arvoja, joita voidaan lukea ja kirjoittaa Taulukon alkioihin viitataan taulukon nimellä ja hakasuluissa olevalla indeksillä Esim. taulu = {10, 8, 15, 20} Tällöin taulu[1] = 10, taulu[2] = 8, taulu[3] = 15, taulu[4] = 20 Sijoituksen taulu[2] = 11 jälkeen taulukossa taulu ovat arvot {10,11,15,20} 811120P Diskreetit rakenteet, Algoritmeista 9
1.2.1 Pseudokoodin lauseet Sijoituslause Ehtolauseet if then if then else Toistolauseet for do while do do while Syöttölauseet tiedon lukemiseen ja tulostamiseen Yhdistetty lause Näillä toteutetaan algoritmin kontrollirakenteet. Säätelevät kuinka monta kertaa ja millä ehdolla algoritmin lauseita suoritetaan Kokoaa useita lauseita loogisesti yhdeksi, ilmaistaan sisennyksellä 811120P Diskreetit rakenteet, Algoritmeista 10
1.2.1 Pseudokoodin lauseet. Syöttölauseet - read lukee käyttäjän syötteen muuttujaan read arvo x P(x) x P(x) Suoritus: Ohjelma pysähtyy odottamaan käyttäjän syötettä ja sijoittaa syötteen muuttujaan arvo - print tulostaa muuttujan arvon print tulos Suoritus: tulostaa muuttujan tulos arvon 811120P Diskreetit rakenteet, Algoritmeista 11
1.2.1 Pseudokoodin lauseet. Ehtolauseet x P(x) x P(x) - C ehto, S1 ja S2 mitä tahansa pseudokielen lauseita if C then S1 Suoritus: jos C on voimassa, suoritetaan S1; jos C ei ole voimassa, ei tehdä mitään if C then S1 else S2 Suoritus: jos C on voimassa, suoritetaan S1; jos C ei ole voimassa suoritetaan S2 811120P Diskreetit rakenteet, Algoritmeista 12
1.2.1 Pseudokoodin lauseet. Ehtolauseet (2) Tehtävä1: Kirjoita algoritmi MINIMI2, joka palauttaa kahdesta syötteenä saamastaan reaaliluvusta pienemmän arvon (jos luvut samat palautetaan k.o. arvo). Älä käytä ehtolauseessa else-osaa. Tehtävä2: Kirjoita algoritmi KARVO2, joka tulostaa kahden syötteenä saamansa reaaliluvun keskiarvon, mikäli luvut ovat positiivisia. Jos jompikumpi luvuista ei ole positiivinen, tulostetaan ilmoitus luvut eivät positiiviset. 811120P Diskreetit rakenteet, Algoritmeista 13
1.2.1 Pseudokoodin lauseet. Toistolauseet x P(x) x P(x) - i indeksimuuttuja, a ja b kokonaislukuvakioita tai muuttujia, S mikä tahansa pseudokielen lause for i = a to b do S Suoritus jos a b, lauseke S suoritetaan indeksimuuttujan i arvoilla a, a+1,..., b jos a > b, ei tehdä mitään ja toistolauseke katsotaan suoritetuksi 811120P Diskreetit rakenteet, Algoritmeista 14
1.2.1 Pseudokoodin lauseet. Toistolauseet (2) - C ehto ja S mikä tahansa pseudokielen lause while C do S Suoritus: Lausetta S toistetaan niin kauan kuin ehto C on voimassa do S while C Suoritus: Suoritetaan lause S ja mikäli C on voimassa, toistetaan sama uudelleen. Siis S suoritetaan vähintään kerran, vaikka C ei olisi aluksi voimassa 811120P Diskreetit rakenteet, Algoritmeista 15
1.2.1 Pseudokoodin lauseet. Toistolauseet (3) Tehtävä1: Kirjoita algoritmi MAKSIMI, joka palauttaa syötteenä saamansa n-paikkaisen reaalilukutaulukon X[1..n] suurimman arvon. Käytä toistorakenteena forsilmukkaa. Tehtävä2: Kirjoita algoritmi SUMMA, joka palauttaa käyttäjän syöttämien positiivisten lukujen summan. Lukujen kysely lopetetaan, kun käyttäjä syöttää negatiivisen luvun tai nollan. Käytä toistorakenteena while-do-silmukkaa Tehtävä3: Tee edellinen tehtävä käyttäen do-whilesilmukkaa Tehtävä4: Suorita tehtävän 1 algoritmi paperilla ja kynällä, kun syötteenä on taulukko X[1..4] = {5,3,9,2} 811120P Diskreetit rakenteet, Algoritmeista 16