Tervetuloa Racket-kurssin jaksolle 4
1. Opiskeltava sisältö
Racket-kurssin jaksolla 4. opimme tekemään hieman isomman sovelluksen, jossa toiminnallisuus toteutetaan useamman funktion avulla. Opimme myös käyttämään rekursiivisia funktioita, jotka kutsuvat itse itseään ja näin pystyvät ratkaisemaan ongelman paloissa tai toteuttamaan toiminnallisuutta, joka vaatii toistoja tai silmukan. Käymme läpi kaksi erilaista tapaa kirjoittaa rekursiota: alkeistapauksiin perustuvan sekä akkumulaattorin käyttöön perustuvan. Tutustumme myös siihen mitä ovat ns. sivuvaikutukset.
Tämän jakson tehtävät kannattaa tehdä kahdessa osiossa:
- videot 1-3 ja tehtävät A
- videot 4-5 ja tehtävät B
Kuuntele videot ja koodaa itse samalla esimerkkejä niin asiat avautuvat paremmin.
1. Funktion jakaminen osiin (10:49 min) | https://youtu.be/l45YMjAc5r0 |
2. Rekursio (11:44min) | https://youtu.be/et-l5eBAOaw |
3. Rekursio akkumulaattorilla (8:16 min)
Tiedosto, jota mukataan videolla. |
https://youtu.be/WHX9pTIM0oI |
4. Lokaalit muuttujat (8:10 min) | https://youtu.be/-Oecr486bPg |
5. Display-read – kirjasto | https://youtu.be/yYeL0CTeQBM |
Videoita täydentävät diat
2. Harjoitustehtävät
A) Rekursio
Harjoittelemme ensin kuvien ohjelmointia rekursiivisten funktioiden avulla. Voit valita käytätkö alkeistapauksiin perustuvaa vai akkumulaattoria käyttävää rekursiota. Molempia ei tarvitse oppia käyttämään aktiivisesti, kunhan tiedät ja tunnistat myös sen toisen tavan, koska sellaista koodia voi tulla vastaan vertaisarvioinnissa.
Perustehtävät:
Lisätehtävät:
- Pienenevät pallot
- Tutustu rekursion käyttöön fraktaaleissa sierpinskin kolmion koodin avulla (katso tässä kohtaa video nro. 4).
Yritä ensin itse, mutta jos ei onnistu katso malliratkaisut täältä (5. Rekursio). Tämän viikon tehtävät ovat vaikeita, joten katso vaikka ensin yksi malliratkaisu ja yritä sitä matkimalla tehdä jokin toinen kuvio.
B) Interaktiiviset ohjelmat
Tässä osiossa tutustutaan sivuvaikutusten käyttöön silmukassa. Tehtävissä käytetään display-read -kirjastoa.
Perustehtävät
Lisätehtävät
Erityisesti lisätehtävät ovat tällä viikolla sen verran vaativia, että voit koodaamisen sijaan katsoa suoraan malliratkaisuja ja pohtia ymmärrätkö mitä koodissa tapahtuu, jotta pystyt soveltamaan sitä jakson palautustehtävässä. Katso malliratkaisut täältä (5. Rekursio).
3. Palautettava koodaustehtävä
Tämän jakson palautettava harjoitustyö on sovellus, joka käyttää rekursiota sekä sivuvaikutuksia. Ohjelman tulee pyytää käyttäjältä syötteitä ja näyttää ohjelman tuottama tulos käyttäjälle display-read kirjaston avulla, käyttää yhtä rekursiivista funkiota sekä yhtä apufunktiota. Apufunktiot voivat laskea jotain, piirtää jotain tai tehdä molempia. Sovellus, jonka teet voi olla laskuautomaatti (kysyy käyttäjältä lähtöarvot), se voi olla pieni peli, joka testaa päässälaskutaitoa (arpoo luvut ja kysyy käyttäjältä vastausta, jonka se tarkistaa) tai se voi piirtää jonkin kuvan rekursiivisesti (käyttäjä päättää mittasuhteet, toistojen määrän, värin tms.). Pidä huolta siitä, että rekursiivisessa funktiossasi on jokin lopetusehto!
Tämän jakson palautustehtävä vertaisarvioidaan samalla tavalla kuin jakson 2 tehtävä. Huolehdi siis siitä, että palautat työsi riittävän ajoissa. Jos ohjelman aihepiirin keksiminen tuottaa ongelmia, mieti millaisesta ohjelmasta voisi olla sinulle tai oppilaillesi hyötyä…
4. Ongelmia
Kysy rohkeasti apua kurssin keskustelufoorumilla.