Close menu
Close menu

Tunnistaudu

Kirjaudu

Etkö ole vielä jäsen?

Liity jäseneksi

1.10 While-silmukat

1.10 Toistaminen silmukoiden avulla, while

Usein ohjelmakoodi sisältää monta kertaa toistuvia käskyjä. Tällöin on järkevää muokata koodi silmukka-rakenteeksi eli loopiksi. Useimmissa ohjelmointikielissä käytettäviä toistorakenteita ovat while (toista kunnes haluttu lopputulos on saavutettu) ja for (toista sama operaatio jollekin tietylle joukolle).

While-silmukkaa toistetaan, kunnes ehdoksi asetettu parametri ei ole enää totta. Siksi while sopii hyvin tilanteisiin, joissa ei tiedetä kuinka monta kertaa jokin toimenpide pitää tehdä, vaan samaa pitää toistaa, kunnes haluttu lopputulos on saavutettu. While-silmukan perusrakenne on:

1.10.1 while rakenne.png

Mikäli ehto on tosi, sisennetyt rivit suoritetaan. Useimmat ohjelmointiympäristöt tekevät oikeankokoisen sisennyksen automaattisesti, kun kaksoispisteen jälkeen painaa Enter ↵. Jos näin ei käy, sisennyksen voi tehdä käsinkin, sen suuruus on neljä välilyöntiä. Koodia kirjoittaessa siennyksestä pääsee pois tabulaattorilla Shift + Tab ←→ tai peruuttamalla painamalla ←Backspace .

Kun sisennetyt rivit on suoritettu, tietokone tarkistaa onko ehto vielä tosi. Jos on, sisennetyt rivit suoritetaan uudestaan. Näin jatketaan, kunnes ehto on epätosi. Vasta kun ehto ei enää ole tosi, ohjelmakoodia jatketaan eteenpäin (seuraava ei-sisennetty rivi). While-rakennetta käytettäessä on huomioitava:

· Ehdolle on asetettava alkuarvo (tosi tai epätosi) ennen while-silmukkaa

o Jos alkuarvo on tosi, silmukka suoritetaan ainakin yhden kerran

o Jos alkuarvo on epätosi, silmukkaan ei suoriteta yhtään kertaa

· While-silmukan sisällä olevan koodin on muokattava ehtoa siten että se muuttuu jossain vaiheessa epätodeksi, muutoin muodostuu ikuinen silmukka

TAI:

· ehto on aina tosi (True)

· silmukka on pysäytettävä if-rakenteen ja break-komennon avulla

o silmukan on muokattava jotakin muuttujaa siten, että if-rakennetta voidaan käyttää

Esimerkit while-rakenteesta, molemmat esimerkit tekevät saman tulosteen:

Esimerkki 1:
1.10.2 while esimerkki 1.png

Esimerkki 2:
1.10.3 while esimerkki 2.png

Esimerkin rivi a -= 1 on lyhennelmä rivistä a = a – 1, joka siis pienentää a:n arvoa yhdellä joka kerta, kun silmukka toistetaan. Vastaavasti a += 4 lisäisi a:n arvoa aina neljällä.

Mikäli while-silmukan ehto ei muutu epätodeksi eikä silmukkaa pysäytetä if-break-rakenteella, syntyy ns ikuinen silmukka, jota toistetaan loputtomiin. Esimerkki ikuisesta silmukasta (tätä esimerkkiä ei kannata kokeilla):

1.10.4 while ikuinen silmukka.png

Spyder-ohjelmointiympäristössä ikuisen silmukan saa pysäytettyä toimintaikkunan oikeassa yläreunassa olevan punaisen neliön avulla. Eclipsessä pysäytys tapahtuu myös punaisen neliön avulla. Repl.it:ssä ohjelma pysäytetään editori-ikkunan yläosassa olevalla stop-näppäimellä.

Harjoituksia while-silmukoista:

1. Pohdi mitä tekee ohjelmakoodi
1.10.5 harjoitus 1 esimerkkikoodi.png

2. Kirjoita ylläoleva koodi editoriin ja aja ohjelma. Arvasitko koodin toiminnan oikein? Miksi luku 10 ei tulostu?

3. Kopioi ja muokkaa tehtävän 2 koodia siten, että tulostuukin luvut 10 – 40 kolmen välein. Tulosteen pitäisi näyttää tältä:

1.10.6 harjoitus 3 esimerkkituloste.png

4. Tallenna luku 5 muuttujaan kiemurat.

5. Kirjoita koodi, joka tulostaa merkkiä ’ ¤ ’ peräkkäin niin monta kertaa, kuin pallerot-muuttujaan tallennettu luku on. Kokeile että koodisi toimii kun vaihdat pallerot-muuttujan arvoa. Arvolla 15 pitäisi toimintaikkunaan tulostua:

1.10.7 harjoitus 5 esimerkkituloste.png

6. Kirjoita while-rakenne, joka tulostaa kuvion:

1.10.8 harjoitus 6 esimerkkituloste.png

Ratkaisut:

1.10.9 ratkaisut.png