160 likes | 329 Views
2. Vuokaaviot. Sisällys. Kaavioiden rakenne. Kaavioiden piirto symboleita yhdistelemällä. Kaavion osan toistaminen silmukalla. Esimerkkejä. Graafinen kieli algoritmien kuvaamiseen. Muodostetaan yhdistelemällä symboleja suuntajanoilla (nuolilla).
E N D
Sisällys • Kaavioiden rakenne. • Kaavioiden piirto symboleita yhdistelemällä. • Kaavion osan toistaminen silmukalla. • Esimerkkejä.
Graafinen kieli algoritmien kuvaamiseen. Muodostetaan yhdistelemällä symboleja suuntajanoilla (nuolilla). Symboli sisältää joko vapaamuotoisena tekstinä tai muuttujien ja operaatioiden avulla kuvatun algoritmin vaiheen. Kaavio suoritetaan (ajetaan) seuraamalla nuolia alkusymbolista alkaen ja loppusymboliin päätyen. Vuokaaviot
Alku Loppu Vuokaaviot • Etenevät yleensä ylhäältä alas ja vasemmalta oikealle: • Suunta länsimaisesta kirjoituksesta. • Tilan loppuessa voi piirtää muutenkin. • Aina yksi alku- ja yksi loppusymboli. • Symboleista lähtevien nuolien lukumäärä on yksikäsitteinen. • Symboleihin tulevien nuolien lukumäärässä tulkinnan varaa. Huom! Tämä on kaikista yksinkertaisin vuokaavio.
Esitetään AvaaOvi-algoritmi vuokaavioina. Ensimmäisessä versiossa algoritmin vaiheet kuvataan peräkkäisissä vaiheissa vapaa-muotoisena tekstinä. Toisessa versiossa avaaminen on kuvattu silmukan avulla. Alku Tartu kahvaan Vedettävä malli? K E Työnnä kahvasta Vedä kahvasta Loppu Oven avaaminen (versio 1)
Alkusymbolista lähtee aina vain yksi nuoli. Loppusymbolista ei lähde nuolia. Toimintosymbolista lähtee aina vain yksi nuoli. Päätössymbolista lähtee aina kaksi nuolta, jotka vastaavat kyllä- (K) ja ei- (E) päätöksiä. Alku ... ... Loppu K ... E ... Lähtevät nuolet
Alku ... ... K ... E ... Loppu Tulevat nuolet • Alkusymboliin ei tule nuolia. • Muihin symboleihin tulee aina joko yksi tai useampi nuoli. • Jos symboliin tulee useampi nuoli, voidaan • nuolet piirtää suoraan kiinni symboliin tai • symboliin piirtää yksi nuoli, johon muut nuolet liittyvät. • Kalvoilla ja mallivastauksissa pyritään käyttämään selvyyden vuoksi jälkimmäistä piirtotapaa, jolloin tulevia nuolia on aina yksi.
Usein on tarpeen suorittaa uudelleen vuokaavion osa. Tämä onnistuu silmukan avulla. Koostuu päätöksestä, joka yhdistetään nuolella toistettavaan vuokaavion osaan, josta piirretään nuoli takaisin päätökseen. Päätös sijoitetaan usein siten, että se on silmukan ensimmäiseksi suoritettava osa. Silmukointi jatkuu niin kauan kuin päätös on silmukkaan johtavaan nuolen suuntainen. Jos päätös on muotoiltu virheellisesti, algoritmi saattaa joutua ikuiseen silmukkaan. ... ... ... ... ... ... Silmukka • Toisinaan on luontevampaa sijoittaa päätös silmukan loppuun.
Algoritmin toiseen versioon on lisätty silmukat, joissa ovea joko vedetään tai työnnetään kahvasta kunnes ovi on auki. Kolmas versio on tarkempi – siinä käytetään muuttujia ja operaatioita. Alku Tartu kahvaan Vedettävä malli? K E Avattava lisää? Avattava lisää? E E K K Työnnä kahvasta Vedä kahvasta Loppu Oven avaaminen (versio 2)
Muuttuja kulma[-90º,90º] on oven ja seinän välinen kulma: Lisäksi käytetään muuttujia ovi ja kahva, joita käsitellään tartu-, vedettävä-, vedä- ja työnnä-operaatioilla. Alku kulma← 0 tartu(kahva) kulma vedettävä(ovi) K E kulma > -70º kulma < 70º E E K K työnnä(kahva) vedä(kahva) Loppu Oven avaaminen (versio 3)
Alku Laske keskiarvo Alku Loppu Lue luvut Laske Tulosta keskiarvo Loppu Keskiarvon laskeminen • Kuvataan keskiarvon laskeminen vuokaaviolla. Lukujen lukemiseen ja summan laskemiseen tarvitaan silmukka. Voi myös olla, että lukuja ei anneta. Tähän täytyy varautua. Lisätään luku- ja tulostustoiminnot
Alku Lisää lukuja? K Summaa Lue luku E E Lukuja? Tulosta ilmoitus K Laske Tulosta keskiarvo Loppu Keskiarvon laskeminen • Kaaviosta ei käy vielä ilmi laskemisen logiikka kuten keskiarvon kaavasta: • Kuinka toteuttaa silmukka? • Kuinka määritellä Laske-laatikon sisältö tarkemmin? • Kaavaa vastaavaan esitystarkkuuteen päästään vain muuttujien avulla.
Keskiarvon laskeminen • Otetaan käyttöön muuttujat: • x on luettu luku (termi xi), • i on laskuri, josta selviää monesko silmukan kierros on meneillään (termin indeksi), • summa vastaa lukujen summaa (Σxi), • lkm vastaa lukujen lukumäärää (indeksin yläraja n) ja • ka on lukujen keskiarvo ( ). • Huom! Silmukka voidaan toteuttaa usealla eri tavalla. Oletetaan nyt, että lukujen lukumäärä voidaan selvittää ennen silmukan aloitusta.
summa ← 0 Alku i ← 1 lkm ← lue() i≤lkm K summa←summa + x i←i + 1 x ← lue() E K lkm > 0 tulosta(ka) ka←summa / lkm E tulosta(″Ei lukuja!″) Loppu Keskiarvon laskeminen
Pohdintaa • Vuokaavioiden hyötyjä: • Helposti ymmärrettäviä ja intuitiivisia. • Soveltuvat monimutkaistenkin algoritmien esittämiseen. • Ongelmia: • Graafinen esitys poikkeaa paljon useimmista ohjelmointikielistä. • Algoritmin tarkentaminen kasvattaa kaaviota nopeasti. • Kaavioiden piirtäminen työlästä.