3. Pseudokoodi.

Slides:



Advertisements
Samankaltaiset esitykset
15. Loogiset operaatiot.
Advertisements

@ Leena Lahtinen Helia Ohjelman perusrakenteet 1. PERÄKKÄISRAKENNE 2. VALINTARAKENNE 3. TOISTORAKENNE.
Olio-ohjelmoinnin perusteet luento 3: Muuttujista ja funktioista Sami Jantunen LTY/Tietotekniikan osasto.
JavaScript (c) Irja & Reino Aarinen, 2007
VBA –ohjelmoinnin perusteet
Ohjelman perusrakenteet
1. Algoritmi.
Rakenteinen ohjelmointi
Sovellusohjelman suunnittelu & toteutus
Java-ohjelmointi Opas ammattimaiseen osaamiseen Luku 4 Toistolauseet
TIETOKONEOHJELMAN RAKENNE OHJELMALLA ON KAKSI OSAA  MÄÄRITYSOSA TIETOJEN KUVAUKSIA VARTEN  SUORITUSOSA TIETOJEN KÄSITTELYÄ VARTEN.
TAUOLLA TYÖKAVEREIDEN KANSSA
KERTAUSTA PERUSASTEEN MATEMATIIKASTA Piia junes
Ehto- ja toistolauseet
TMA.003 / L3 ( )1 3. Funktioista 3.1. Kuvaus ja funktio Olkoon A ja B ei-tyhjiä joukkoja. Tulojoukon A  B = {(x,y) | x  A, y  B} osajoukko on.
16. Lohkot Sisällys Tutustutaan lohkoihin. Muuttujien ja vakioiden näkyvyys sekä elinikä erityisesti operaation lohkossa. Nimikonfliktit. Muuttujat.
Toiston tekeminen Javalla  Mikä toistorakenne on?  while toistorakenne  do-while toistorakenne  for toistorakenne 1.
Ohjelmoinnin tekniikkaa Sisällys for -lause lyhemmin. Vaihtoehtoisia merkintöjä aritmeettisille lauseille. Useiden muuttujien esittely.
Ohjelman perusrakenteet
2. Vuokaaviot.
Pseudokoodi Tietokoneohjelmien perusidea:
13. Hyvä ohjelmointitapa (osa 1)
1 Kertaus koetta varten oleellisista asioista Jukka Juslin.
ict1td002 - Copyright Raine Kauppinen 1 Alkuarvot ja tyyppimuunnokset (1/5)  Aiemmin olemme jo antaneet muuttujille alkuarvoja, esimerkiksi: int.
Aritmeettinen jono jono, jossa seuraava termi saadaan edellisestä lisäämällä sama luku a, a + d, a+2d, a +3d,… Aritmeettisessa jonossa kahden peräkkäisen.
Visual Basic -ohjelmointi
11. Javan toistorakenteet
1. Usean muuttujan funktiot
4. Attribuutit 4.1. Sisällys Yleistä attribuuteista. Näkyvyys luokan sisällä ja ulkopuolelta. Attribuuttien arvojen käsittely aksessoreilla. 4.2.
Hyvä ohjelmointitapa (osa 2) Yleistä Lisää hyviä ohjelmointikäytäntöjä: − Jaa pitkä koodi osiin. − Käytä attribuutteja säästeliäästi.
Toistorakenne Toistorakennetta käytetään ohjelmissa sellaisissa tilanteissa, joissa jotain tiettyä ohjelmassa tapahtuvaa toimenpidekokonaisuutta halutaan.
Ohjelmointitaito (ict1td002, 12 op) Kevät 2008 Raine Kauppinen
PARAABELI (2. ASTEEN FUNKTION KUVAAJIA)
@ Leena Lahtinen Toistorakenne Ohjelmassa toistetaan tiettyjä toimenpiteitä monta kertaa peräkkäin Toisto noudattaa sille kuuluvia tarkkoja standardoituja.
5. Lineaarinen optimointi
@ Leena Lahtinen TIETOKONEOHJELMAN RAKENNE OHJELMALLA ON KAKSI OSAA:  MÄÄRITYSOSA TIETOJEN KUVAUKSIA VARTEN  SUORITUSOSA TIETOJEN KÄSITTELYÄ.
Visual Basic -ohjelmointi
Antti-Jussi Lakanen Nuorten peliohjelmointi 2009 / Jyväskylän yliopisto.
Kontrollirakenteet laajemmin
For-toistolausetMyn1 for-toistolause for-lauseen rakenne on: for(aloituslauseke; lauseke; lopetuslauseke) lause; Puolipisteiden on oltava aina paikoillaan,
Visual Basic -ohjelmointi
Toistorakenne Toistorakennetta käytetään ohjelmissa sellaisissa tilanteissa, joissa jotain tiettyä ohjelmassa tapahtuvaa toimenpidekokonaisuutta halutaan.
Valintarakenne valintarakenne alkaa aina kysymyksellä eli ehdolla ehto tarkoittaa, että muuttujan sisältöä verrataan toisen muuttujan sisältöön tai vakioon.
Ohjelmassa tänään Ohjelmointimallit Pseudokieli Modulaarisuus.
Toistorakenne Toistorakennetta käytetään ohjelmissa sellaisissa tilanteissa, joissa jotain tiettyä ohjelmassa tapahtuvaa toimenpidekokonaisuutta halutaan.
Lausekielinen ohjelmointi. 4.2 Sisällys Konekieli, symbolinen konekieli ja lausekieli. Hyvä ohjelmointitapa. Lausekielestä konekieleksi: - Lähdekoodi,
Vuokaaviot. 2.2 Sisällys Kaavioiden rakenne. Kaavioiden piirto symboleita yhdistelemällä. Kaavion osan toistaminen silmukalla. Esimerkkejä: − algoritmi.
String-vertailusta ja Scannerin käytöstä (1/2)
Toistorakenne Toistorakennetta käytetään ohjelmissa sellaisissa tilanteissa, joissa jotain tiettyä ohjelmassa tapahtuvaa toimenpidekokonaisuutta halutaan.
3. Muuttujat ja operaatiot
Tutkielman teko-ohjeet
2. Vuokaaviot.
7. Hyvä ohjelmointitapa..
13. Loogiset operaatiot.
3. Muuttujat ja operaatiot
Toisto Toistolausekkeet for, while(ehto){…} ja do {…} while(ehto)
10. Javan ohjausrakenteet
16. Ohjelmoinnin tekniikkaa
14. Hyvä ohjelmointitapa.
11. Javan valintarakenteet
12. Javan toistorakenteet
1. Algoritmi.
12. Javan toistorakenteet
7. Hyvä ohjelmointitapa..
Kontrollirakenteet laajemmin
5. HelloWorld-ohjelma.
13. Loogiset operaatiot.
Ohjelman perusrakenteet
12. Javan toistorakenteet
16. Ohjelmoinnin tekniikkaa
Esityksen transkriptio:

3. Pseudokoodi

Sisällys Johdanto ja esimerkki. Pseudokoodi lauseina. Kommentointi ja sisentäminen. Ohjausrakenteet: Valinta if- ja if-else-rakenteilla. Toisto while-, do-while- ja for-rakenteilla.

Johdanto Pseudokoodi (pseudocode) on algoritmin tekstimuotoinen esitys. Selvästi lähempänä ohjelmointikieltä kuin vuokaaviot, mutta ei oikea ohjelmointikieli. Luonnollisen kielen (esim. suomi tai englanti) ja jonkin tunnetun ohjelmointikielen (esim. Java, C++ tai Pascal) sekoitus. Ei siis yleismaailmallista standardia.

Johdanto Kirjoitetaan nyt suomeksi käyttäen Javan kielioppia, jolle on varattu joitakin sanoja englannin kielestä. Vuokaavioiden tapaan pseudokoodin osat suoritetaan peräkkäin ja suoritusta voidaan ohjata päätösten avulla. Vuokaavioiden päätöksiä ja silmukoita vastaavat tietyt valinta- ja toistorakenteet. Voidaan esittää vapaamuotoisena tekstinä tai tarkemmin muuttujien ja operaatioiden avulla.

Esimerkki: Hypotenuusan pituus Pythagoraan lause: Suorakulmaisen kolmion kateettien neliöiden summa on yhtä suuri kuin hypotenuusan neliö. Tehtävänä kirjoittaa ohjelma hypotenuusan pituuden c laskemiseksi. b c a

Esimerkki: Hypotenuusan pituus Alku Lue 1. luku Lue 2. luku Neliöi 1. luku Neliöi 2. luku Summaa neliöt Ota summan neliöjuuri Loppu Tulosta neliöjuuri Oletetaan, että käyttäjä antaa algoritmille nollaa suurempia lukuja.

Esimerkki: Hypotenuusan pituus Ensimmäisellä rivillä on algoritmin otsikko, joka kertoo kyseessä olevan Hypotenuusa-nimisen algoritmin esitys. Otsikon jälkeiset rivit muodostavat algoritmin rungon. Algoritmi suoritetaan rivi kerrallaan, otsikosta alkaen ja ylhäältä alas. Algoritmi Hypotenuusa Lue 1. luku Lue 2. luku Neliöi 1. luku Neliöi 2. luku Summaa neliöt Ota summan neliöjuuri Tulosta neliöjuuri Koodi pysähtyy, kun viimeinen rivi on suoritettu.

Esimerkki: Hypotenuusan pituus Myös pseudokoodina annettu algoritmi voidaan esittää tarkemmin muuttujia ja operaatioita käyttäen. pow-operaatio korottaa parametrinsa annettuun potenssiin. sqrt-operaatio ottaa parametrinsa neliöjuuren. Algoritmi Hypotenuusa akatpit ← lue() bkatpit ← lue() akatpit2 ← pow(akatpit, 2) bkatpit2 ← pow(bkatpit, 2) summa ← akatpit2 + bkatpit2 hyppit ← sqrt(summa) tulosta(hyppit)

Lauseet Vuokaavion “laatikot” erottavat selkeästi algoritmin vaiheet toisistaan. Edellisissä pseudokoodiesimerkeissä kukin vaihe oli kirjoitettu vastaavasti omalle rivilleen. Algoritmin kuvaaminen ei ole aina yhtä helppoa: teksti voi mennä useammalle riville tai on järkevää esittää useampia vaiheita yhdellä rivillä. Tarvitaan tapa jakaa algoritmin teksti yksiköihin.

Lauseet Kirjoitetun luonnollisen kielen yksiköitä: Virke: Alkaa isolla alkukirjaimella ja päättyy isoon välimerkkiin. Sisältää yhden tai useamman lauseen. Lause: Ilmaisee ajatuksen. Rakentuu verbin ympärille. Lauseke: Lauseen läheisesti yhteenkuuluvia sanoja. Lauseohjelmointikielissä: virkkeet lauseen (statement) mittaisia, välimerkki usein puolipiste (;). Ohjelmointikielissä lauseiden laskentaa sisältäviä osia sanotaan lausekkeiksi (expression).

Lauseet Erotetaan jatkossa myös pseudokoodin vaiheet puolipisteellä lauseiksi. Tällöin yksi pseudokoodin vaihe voidaan esittää usealla rivillä ja useita vaiheita mahtuu samalle riville. Algoritmi Hypotenuusa Lue 1. luku; Lue 2. luku; Neliöi 1. luku; Neliöi 2. luku; Summaa neliöt; Ota summan neliöjuuri; Tulosta neliöjuuri; Samalla rivillä olevat lauseet suoritetaan vasemmalta oikealle.

Kommentointi ja sisentäminen Ohjelman tulisi olla helposti ymmärrettävä, koska ihmiset sekä kirjoittavat että lukevat ohjelmia, jotka voivat olla omaa tai muiden tuotantoa: Ohjelmia tehdään usein ryhmissä. Ohjelmat vaativat ylläpitoa. Itse tehdynkin ohjelman idea unohtuu nopeasti. Ohjelman toimintaa voi selkeyttää pienellä vaivalla koodin rivejä kommentoimalla ja sisentämällä. Huom! Edelleen syytä käyttää myös kuvaavia nimiä.

Kommentit Kommentit ovat luonnollisella kielellä kirjoitettuja, ohjelman toimintaa selventäviä lauseita. Ongelma: Kuinka erottaa suoritettavaksi tarkoitetut lauseet kommenteista? Ratkaisu: Oma merkintätapa kommenteille. Kurssin pseudokoodissa kahdella kauttamerkillä (/) aloitettu rivi katsotaan kommentiksi. Esim. // Näitä rivejä ei suoriteta, koska ne // alkavat kahdella kauttamerkillä.

Kommentit Kommentti liittyy yleensä seuraavaan lauseeseen tai riviin. Kommentilla voidaan kattaa joskus useampiakin lauseita tai rivejä. Algoritmin tarkoitus voidaan esittää kommenttina. // Lasketaan hypotenuusan pituus. Algoritmi Hypotenuusa // Luetaan kateetit. Lue 1. luku; Lue 2. luku; // Neliöidään. Neliöi 1. luku; Neliöi 2. luku; // Lasketaan pituus. Summaa neliöt; Ota summan neliöjuuri; // Tulos käyttäjälle. Tulosta neliöjuuri;

Sisentäminen Sisentäminen tarkoittaa muutaman välilyönnin sijoittamista peräkkäisten ja loogisesti yhteenkuuluvien rivien alkuun siten, että rivit alkavat samalta tasalta. Vaihtoehtoisesti rivejä voidaan sisentää tabulaattorilla, mutta tällöin koodin ulkoasu riippuu tekstieditorista. Välilyöntejä ja tabulaattoria ei saa käyttää sekaisin! Edellä Hypotenuusa-algoritmin rungon rivit on sisennetty, jotta lukijalle on selvää, että juuri sisennetyt rivit muodostavat rungon.

Esimerkki: Hypotenuusan pituus Huonoa pseudokoodia: Algoritmi Hypotenuusa a ← lue(); b ← lue(); tulosta(sqrt(pow(a, 2) + pow(b, 2))); Parempaa pseudokoodia: // Lasketaan suorakulmaisen // kolmion hypotenuusan pituus. Algoritmi Hypotenuusa // Luetaan kateettien // pituudet muuttujiin. akatpit ← lue(); bkatpit ← lue(); // Neliöidään kateettien pituudet // pow-operaatiolla. akatpit2 ← pow(akatpit, 2); bkatpit2 ← pow(bkatpit, 2); // Lasketaan neliöiden summa. summa ← akatpit2 + bkatpit2; // Lasketaan hypotenuusan // pituus eli summan neliöjuuri. hyppit ← sqrt(summa); // Tulostetaan näytölle. tulosta(hyppit);

Ohjausrakenteet Päätöksiin ja toistoon liittyvä logiikka voidaan esittää niin sanotuilla ohjausrakenteilla (valinta- ja toistorakenteet), jotka ovat tietyn muotoisia lauseita. Pseudokoodin ohjausrakenne koostuu: Javan kieliopin mukaisesta englanninkielisestä sanasta, joka kertoo mikä rakenne on kyseessä. Kaarisulkujen (( )) sisään sijoitetusta ehdosta, joka saa joko totuusarvon tosi (true, T) tai epätosi (false, F). Yhdestä tai useammasta ohjausrakenteeseen liittyvästä, lauseesta, jotka suoritetaan vain, jos ehto on tosi.

Ohjausrakenteet Rakenteelle varattu sana ja rakenteen ehto kirjoitetaan samalle riville. Rakenteeseen liittyvät lauseet alkavat seuraavalta riviltä. Usean lauseen (n > 1) liittyminen ilmaistaan kokoamalla yksittäiset lauseet kootuiksi lauseiksi aaltosulkeiden ({ }) avulla. Esim. sana (ehto) lause 1; Pseudokoodin rakennetta selkeytetään sisentämällä kootun lauseen sisältö. Koottua lausetta ei päätetä puolipisteellä. sana (ehto) { lause 1; … lause n; }

Ohjausrakenteet Ohjausrakenteet voivat olla sisäkkäisiä. Esim. sana (ehto) { lause 1; … lause 1; ... lause m; } lause n; Myös toiseen rakenteeseen sisältyvän rakenteen koottu lause sisennetään. Ohjausrakenteet ovat äärimmäisen ilmaisu-voimaisia: Peräkkäisyyteen lisätty valinta ja toisto riittävät minkä tahansa laskettavissa olevan tehtävän ratkaisuun!

Valintarakenteet Valintarakenteilla ilmaistaan formaalisti, kuinka algoritmin suoritus voi “haarautua” ehdosta riippuen. Tässä tärkein työkalu on if-lause, jolla kuvataan mitä täytyy tehdä, jos lauseen ehto on tosi. If-lauseen laajennos, if-else-lause, kuvaa kuinka algoritmi toimii, kun ehto on tosi ja epätosi. If-lause kuvaa yksi- ja else-lause kaksihaaraista päätöstä. Sisäkkäisillä valintarakenteilla voidaan kuvata näitä monimutkaisempia päätöksiä.

Valintarakenteet: if-lause Kuvaa yksittäisen päätöshaaran: lauseet suoritetaan vain ehdon toteutuessa. Sulkujen sisällä olevan ehto (esim. “painava esine” tai “paino > 50”) palauttaa totuusarvon true toteutuessaan. Huom! Jos n = 1, voidaan aaltosulkeet jättää pois. Yleisesti: if (ehto) { lause 1; ... lause n; } Esim. if (painava esine) Kilauta kaverille; T F paino>50 … T F ehto …

Valintarakenteet: if-lause Algoritmi KeitäTeetä if (teepussit lopussa) Osta teepusseja; Kuumenna pannullinen vettä; Laita teepusseja pannuun; Hauduta 2-3 minuuttia; Ota teepussit pannusta; Alku Loppu F T Kuumenna pannullinen vettä Teepussit lopussa? Osta teepusseja Laita teepusseja pannuun Hauduta 2-3 minuuttia Ota teepussit pannusta

Valintarakenteet: if-else-lause ehto T F … Kuvaa kaksihaaraisen päätöksen. Lauseet suoritetaan vaihtoehtoisesti: ehdon ollessa tosi suoritetaan if-osa, muuten else-osa. Huom! Jos n = 1 tai m = 1, voidaan aaltosulkeet jättää pois. Yleisesti: if (ehto) { lause 1; ... lause n; } else { lause m; Esim. if (painava esine) Kilauta kaverille; else Ala kiskoa;

Valintarakenteet: if-else-lause Algoritmi KeitäTeetä if (teepussit lopussa) Osta teepusseja; else { Huokaise helpotuksesta; Laita ostoslistalle; } … Ota teepussit pannusta; Alku Loppu F T Kuumenna pannullinen vettä Teepussit lopussa? Osta teepusseja Huokaise helpotuksesta Laita ostoslistalle …

Sisäkkäiset valintarakenteet if- ja if-else-lauseita voidaan yhdistää moni-mutkaisemmiksi valinnoiksi. else-osa liittyy aina lähimpään vapaaseen if-osaan. Sisennys auttaa sisäkkäisyyden ymmärtämistä. Algoritmi PolttaaPolttaa lämpö ← lue(); if (lämpö > 15) if (lämpö < 25) tulosta("Sopiva!"); else tulosta("Alkaa olla liian kuuma!"); tulosta("Alkaa olla liian kylmä!");

Sisäkkäiset valintarakenteet // Sanotaan luku sisäkkäisillä // if-else lauseilla. Algoritmi SanoLukujaA numero ← lue(); if (numero = 1) tulosta("Yksi!"); else if (numero = 2) tulosta("Kaksi!"); if (numero = 3) tulosta("Kolme!"); tulosta("En osaa!"); // Sanotaan luku peräkkäisillä // if-lauseilla. Algoritmi SanoLukuB numero ← lue(); if (numero = 1) tulosta("Yksi!"); if (numero = 2) tulosta("Kaksi!"); if (numero = 3) tulosta("Kolme!"); if (numero < 1) tulosta("En osaa!"); if (numero > 3)

Toistorakenteet Toistorakenteilla formalisoidaan toistuva suoritus. Toisto voidaan ilmaista yhtäpitävästi while-, do-while- tai for-lauseilla, mutta yleensä jokin näistä on tietyssä tilanteessa luonnollisempi kuin toiset. Toistorakennetta kutsutaan lyhyesti silmukaksi. Silmukan suoritusta ohjataan usein laskurimuuttujalla, jonka avulla pysytään selvillä siitä, monesko kierros on meneillään. Myös lippumuuttujia käytetään ohjaukseen. Virheellinen logiikka voi johtaa silmukan loputtomaan toistoon (ikuinen silmukka).

Toistorakenteet: while-lause Yleisesti: while (ehto) { lause 1; ... lause n; } Lauseita suoritetaan niin kauan kuin ehto on tosi. Suoritus on esiehtoinen, koska ehto on lauseen alussa. Voi siis olla, että ehto on epätosi jo lauseeseen tultaessa. Tällöin while-lause ohitetaan. Esim. while (jaksat) Lue tenttiin; ehto T F …

Toistorakenteet: while-lause Algoritmi Heippa1 // Alustetaan laskuri. i ← 0; // Luetaan toistojen lkm. lkm ← lue(); // Silmukoidaan lkm kertaa. while (i < lkm) { tulosta("Heippa!"); i ← i + 1; } i < lkm Alku T lkm ← lue() i ← 0 tulosta ("Heippa") Loppu F i ← i + 1

Toistorakenteet: do-while-lause Yleisesti: do { lause 1; ... lause n; } while (ehto); Jälkiehtoinen toisto: Lauseet suoritetaan ainakin kerran, mikäli tätä ei estetä valintarakenteella. Yhdistettyä lausetta ei voi poistaa, kun n = 1. Esim. do { Lue tenttiin; } while (jaksat); T F … ehto

Toistorakenteet: do-while-lause Algoritmi Heippa2 // Alustetaan laskuri. i ← 0; // Luetaan toistojen lkm. lkm ← lue(); // Silmukoidaan, jos tarpeen. if (lkm > 0) do { tulosta("Heippa!"); i ← i + 1; } while (i < lkm); i < lkm Alku T lkm ← lue() i ← 0 tulosta ("Heippa") Loppu F i ← i + 1 lkm > 0

Toistorakenteet: for-lause for (laskurin alustus; ehto; laskurin päivitys) { lause 1; ... lause n; } Lauseiden toisto laskurimuuttujan avulla. Kätevä, kun toistojen lukumäärä tiedetään. Voidaan korvata helposti while-lauseella. Huom! Jos n = 1, aaltosulkeet voidaan jättää pois.

Toistorakenteet: for-lause Ensin: Alustetaan laskuri ja tarkistetaan ehto. Sitten: Jos ehto oli tosi, niin suoritetaan lauseet ja päivitetään laskuria, kunnes ehto on epätosi. ehto T F Päivitä laskuri ... Alusta laskuri

Toistorakenteet: for-lause Algoritmi Heippa3 lkm ← lue(); for ( i←0; i < lkm; i←i+1) tulosta("Heippa!"); Olkoon lkm = 3. Suoritus: i < lkm Alku T i ← 0 lkm ← lue() tulosta ("Heippa") Loppu F i ← i + 1 i i < 3 Mitä tehdään? true Alustus, 1. kierros 1 2. kierros 2 3. kierros 3 false Lopetetaan suoritus

Esimerkki: Oven avaaminen // Aikaisemmin vuokaavion // avulla esitetty algoritmi // oven avaamiseen // pseudokoodina. Algoritmi AvaaOvi // Alustetaan avauskulmaa // esittävä muuttuja. kulma ← 0; // Otetaan kahvasta kiinni. tartu(kahva); // Ovi vedettävää mallia. if (vedettävä(ovi)) // Vedetään kunnes auki. while (kulma < 70º) vedä(kahva); // Ovi työnnettävää mallia else // Työnnetään kunnes auki. while (kulma > -70º) työnnä(kahva);

Esimerkki: Keskiarvon laskeminen // Keskiarvoalgoritmi tarkempana // pseudokoodina. Algoritmi LaskeKeskiarvo // Alustetaan muuttujia. summa ← 0; i ← 1; // Luetaan lukujen lukumäärä. lkm ← lue(); // Luetaan luvut silmukassa. while (i ≤ lkm) { x ← lue(); summa ← summa + x; i ← i + 1; } // Voitiin laskea keskiarvo. if (lkm > 0) { ka ← summa / lkm; tulosta(ka); } // Lukuja ei luettu. else tulosta("Ei lukuja!");

Kertaus Koodi jaetaan lauseiksi välimerkillä. Sisentäminen ja kommentointi tärkeää. Ohjausrakenteilla peräkkäisyyteen liitetään valintoja ja toistoa. Valinta: if- ja if-else. Toisto: while, do-while ja for. Näillä tiedoilla voidaan tehdä pieniä ohjelmia - nyt pitäisi opetella kuinka tämä tapahtuu käytännössä Java-kielellä.