koodiaapinen MOOC

Itseopiskelumateriaalia Racket-ohjelmointiin

Tervetuloa Racket-ohjelmoinnin pariin.

Tämä kurssimateriaali sisältää video-ohjeita, teoriadioja sekä harjoitustehtäviä malliratkaisuineen. Materiaali on alunperin luotu käytettäväksi opettajienkoulutuksessa Koodiaapinen MOOC-kursseilla ja sitä on muokattu tähän tarkoitukseen sopivaksi.

Tämä ei ole käynnissä oleva aktiivinen MOOC-kurssi eli ohjeissa mainittuja palautustehtäviä ei tarkisteta Koodiaapisen toimesta, eikä kurssista anneta suorituksia. Materiaali on tarkoitettu toimimaan oheis- ja tukimateriaalina racket.koodiaapinen.fi - käyttäjille.


Jakso 1

1. Opiskeltava sisältö

Ensimmäisen jakson tavoitteena on tutustua Racket-ohjelmointiin koodaamalla kuvia. Samalla opit käyttämään ohjelmointityökalua (DrRacket tai WeScheme). Ensimmäisellä videolla näytetään miten saat ohjelmointityökalut käyttöösi. Toisessa videossa esitellään lisää työkalujen käyttöä sekä käydään läpi Racket-kielen toimintalogiikkaa. Kolmas ja neljäs video esittelevät miten Racketillä piirretään kuvia ja viides video näyttää miten voit käyttää avuksesi muuttujia. Kuudes video on varattu niille, jotka haluavat oppia enemmän kuvien muokkaamisesta Racket-kielellä.

Videot 2. – 6. kannattaa seurata niin, että katsot videota pienen pätkän ja sitten yrität tehdä itse saman mitä videolla juuri näytettiin. Koodaamaan kun ei valitettavasti opi vain videota katsomalla! Katso myös löydätkö videolla esitellyt asiat Koodarin käsikirjasta, josta löydä kaiken tarvitsemasi tiedon koodaustehtävien ratkaisemiseksi.

HUOM! WeSchemessä ei tarvitse ottaa käyttöön kuvakirjastoa, eli tämä koodirivi on turha: (require 2htdp/image).

Videot

nro Video Linkki
1. Työkalut DrRacket ja WeScheme (2:54 min) katso video
2. Lausekkeet ja evaluointiin (5:57 min) katso video
3. Peruskuvioiden piirtäminen (7.52 min) katso video
4. Kuvien yhdistely (7.18 min), *.rkt tiedosto, jota jatketaan videolla katso video
5. Muuttujien käyttäminen: define (5.55 min) *.rkt tiedosto, jota jatketaan videolla katso video
6. Kuvien muokkaus (9.14 min) *.rkt tiedosto, jota jatketaan videolla katso video

Oheisessa PowerPoint – esityksessä kerrataan sekä täydennetään videoiden sisältöä. Diasarjan lopussa on ”debuggausosio”, jossa käydään läpi yleisimmät virheilmoitukset ja niiden syyt. Käytä sitä apuna kun teet harjoitustehtäviä.

Diat

Racket MOOC - jakso 1 from Tiina Partanen

2. Harjoitustehtävät

Harjoitustehtävistä on tarkoitettu tehtäväksi vähintään perustehtävät. Jos tunnet tarvetta harjoitella enemmän voit tehdä myös lisätehtäviä.

Perustehtävät:

  • Koodaa Japanin lippu
  • Koodaa Suomen lippu tai auto
    Avaa tehtävä: Kuvakoodaus 1.

Lisätehtävät:

  • Jos kuvienmuokkaus kiinnostaa (ja katsoit siihen liityvän videon 6.) voit harjoitella lisää näillä tehtävillä:
    Avaa tehtävä: Kuvakoodaus 2.

  • Kuvakoodauksen sijaan voit harjoitella Racket-kielen alkeita myös kirjoittamalla peruslaskulausekkeita.
    Avaa tehtävä: Peruslaskut.

Huom! Kun lataat tehtävätiedoston ja avaat sen DrRacket:illä se on ”read only” tilassa etkä voi muokata sitä. Tallenna se ensin jonnekin (File->Save definitions as) niin saat muokkauksen käyttöön.

Malliratkaisut:

Yritä tehdä harjoitukset itse mutta, jos törmäät ongelmiin, katso malliratkaisut tästä.

Kuvakoodaus 1:

Tehtävä Malliratkaisut Malliratkaisut
Japanin lippu DrRacket WeScheme
Suomen lippu DrRacket WeScheme
Auto DrRacket WeScheme

Kuvakoodaus 2:

Tehtävä Malliratkaisut Malliratkaisut
Kukka DrRacket WeScheme
Neliö ympyrän paloista DrRacket WeScheme
Pikseliukko DrRacket WeScheme

Peruslaskut:

Tehtävä Malliratkaisut Malliratkaisut
Peruslaskut ja laskujärjestys DrRacket WeScheme

3. Palautettava koodaustehtävä

Katsele jakson aikana ympärillesi ja valitse itsellesi jokin sopivan helppo kuva koodattavaksi (esim. jokin logo tai lippu). Voit myös suunnitella kuvan kokonaan itse. Mieti mistä geometrisistä peruskuviosta kuva koostuu, millä tavalla muodot suhtautuvat toisiinsa. Koodaa kuva pala palalta (jaa ongelma osiin). Yhdistä palat vaihe vaiheelta yhdeksi kuvaksi. Käytä apuna muuttujia, joihin tallennat kuvan välivaiheita (define).

Halutessasi voit käyttää apuna myös kuvanmuokkausfunktiota (esim. rotate, flip-horizontal).

Ole luova ja kokeile rohkeasti! Tämän viikon tarkoitus on tutustua työkaluihin sekä materiaalin käyttämiseen, joten älä aseta rimaa liian korkealle!

Saat tallennettua kuvan png-muodossa DrRacketissä/WeSchemessä valitsemalla sen hiirellä ja valitsemalla hiiren oikealla näppäimellä ”Save image as” ja antamalla kuvalle nimen ja .png – liitteen. Muista myös tallentaa koodisi ”File->Save definitions as”, siitä voi olla iloa myöhemmin.

Vinkki opetukseen:

Oppitunnilla koodattuja kuvia on kätevä jakaa muiden katsottavaksi esim. Padlet-seinän kautta. Kuva liitetään Padlet-seinälle avaamalla uusi editori tuplaklikkaamalla seinää ja valitsemalla kameran kuva.


Jakso 2

1. Opiskeltava sisältö

Racket-kurssin 2. jaksolla on käsitellään kaksi automatisointiajattelun keskeistä asiaa: A) funktiot sekä B) ehtolauseet.

A) Funktiot – osassa opettelemme suunnittelemaan, ohjelmoimaan sekä testaamaan omia funktioita. Funktioiden avulla voimme esittää sääntöjä yleisessä (abstraktissa) muodossa ja niiden toiminnan ymmärtäminen on erittäin tärkeää.

B) Ehtolauseet – osa käsittelee ehtolauseita ja sitä miten ne liittyvät funktioihin.

Tämän jakson materiaalit kannattaa opiskella osa kerrallaan, eli katso ensin funktioihin liittyvät videot (1 ja 2) ja tee sitten niihin liittyvät tehtävät. Katso tämän jälkeen ehtolauseisiin liittyvät videot (3 ja 4) ja tee niihin liittyvät tehtävät. Videoiden katsomisen ohella on hyvä itse koodata mukana niin saat paremman tuntuman siihen mistä on kyse.

Tällä viikolla on mukana myös animaatiovideoita, jotka selventävät funktion, ehtolauseen, evaluonnin sekä määrittelyjen toimintaa (animaatio kannattaa pistää pauselle, jos asiat tapahtuvat siinä liian nopeasti). Näiden animaatioiden tarkoitus on luoda ns. mentaalimalleja käsiteltävistä aiheista, jotta niiden ymmärtäminen helpottuisi.

Diasarjassa on tällä jaksolla paljon asiaa, täydentäviä esimerkkejä sekä vinkkejä palautettavaa jaksoharjoitusta ajatellen.

Videot

nro Video Linkki
1. Funktiot (osa 1): Funktion määrittely (10:37min) katso video
2. Funktiot (osa 2): Funktion suunnittelu ja testaaminen (9:21min) katso video
3. Totuusarvot, predikaatit ja vertailuoperaattorit (5:01min) katso video
4. Ehtolause (if) (8:35min) katso video

Animaatiot

nro Video Linkki
1. Ympyrä-funktio (0:34min) katso video
2. Pinta-ala-funktio (0:29min) katso video
3. Robottiauto-funktio ja ehtolause (0:27min) katso video
4. Evaluointi (0:22min) katso video
5. Määrittelyt (define) (0.46min) katso video

Videoita täydentävät diat

Racket MOOC - jakso 2 from Tiina Partanen

2. Harjoitustehtävät

A) Funktiotehtävät:

Harjoittele funktioiden määrittelemistä sekä testaamista seuraavien tehtävien avulla. Ensimmäisissä tehtävissä jatkat puolivalmista koodia eteenpäin.

Huom! Kun lataat tehtävätiedoston ja avaat sen DrRacket:illä se on ”read only” tilassa etkä voi muokata sitä. Tallenna se ensin jonnekin (File->Save definitions as) niin saat muokkauksen käyttöön.

Perustehtävät:

  • Tee funktioita pinta-alojen laskemiseksi
    Avaa tehtävä: Pinta-alatehtävät A.

  • Tee funktiot lämpötilojen muutamiseen eri lämpötila-asteikolta toiselle
    Avaa tehtävä: Lämpötilat.

  • Tee funktion avulla eri värisiä kirjaimia
    Avaa tehtävä: Värillinen teksti.

Lisätehtävät:

B) Ehtolausetehtävät:

Harjoittele ehtolauseita sisältävien funktioiden määrittelemistä valitsemalla seuraavien tehtävien avulla.

Perustehtävät:

  • Tutustutaan kolmion ominaisuuksiin ehtolauseen ja funktion avulla
    Avaa tehtävä: Kolmiotehtävät A1.

  • Harjoittele sisäkkäisiä ehtolauseita valon aallonpituuksien yhteydessä
    Avaa tehtävä: Robottisilmä.

Lisätehtävät:

  • Tutustutaan pyöristämiseen ja käytetään funktiota, jonka sisällä on ehtolause, jonka sisällä on laskulauseke
    Avaa tehtävä: Pyöristäminen.

Malliratkaisut:

Yritä tehdä harjoitukset itse mutta, jos törmäät ongelmiin, katso malliratkaisut tästä.

Funktiot:

Tehtävä Malliratkaisut Malliratkaisut
Pinta-alatehtävät A DrRacket WeScheme
Lämpötilat DrRacket WeScheme
Värillinen teksti DrRacket WeScheme
Särmiön levityskuva DrRacket WeScheme

Ehtolause:

Tehtävä Malliratkaisut Malliratkaisut
Kolmiotehtävät A1 DrRacket WeScheme
Robottisilmä DrRacket WeScheme
Pyöristäminen DrRacket WeScheme

Harjoittele materiaalin kanssa sen verran, että pystyt tekemään palautettavan koodaustehtävän.

3. Palautettava koodaustehtävä

Tehtävänäsi on suunnitella, määritellä ja testata funktio, jossa käytetään ehtolausetta. Funktio voi esim. tuottaa kuvia tai laskea jotakin, sinä päätät mitä se tekee.

Kun teet funktiotasi, aloita määrittelemällä sen tarkoitus sekä esittelemällä sen nimi sekä sen määrittely- ja arvojoukot (syötteen tyypit ja paluuarvon tyyppi). Valitse funktiolle kuvaavat parametrien nimet (muuttujanimet) ja kirjoita funktion toteutus (koodi) käyttämällä parametreja. Käytä koodissasi myös ehtolausetta. Voit joko valita sellaisen funktion, jossa on kaksi eri ”toimintavaihtoehtoa” tai testata, että funktion parametrit ovat oikean tyyppisiä. Pääasia että käytät ehtolausetta jollakin tavalla. Testaa funktiosi jokainen haara kirjoittamalla sille check-expect -lauseke.

Vinkki opetukseen:

Opiskelijat voivat vertaisarvioida toistensa koodia eli testata toimiiko koodi ja onko se ohjeiden mukaisesti tehty. Parhaiten vertaisarviointi toimii, jos se tehdään nimettömästi, sekä arvioijat ja arvioitavat pysyvät anonyymeinä.


Jakso 3

1. Opiskeltava sisältö

Racket-kurssin jaksolla 3. syvennämme sekä funktioiden, että ehdollisen suorittamisen tietoja ja taitoja. Tutustumme valintalauseeseen sekä Boolean operaattoreihin. Opettelemme myös kirjoittamaan testitapaukset ENNEN funktion koodaamista. Tätä menetelmää kutsutaan ”funktion suunnitteluportaiksi” ja se auttaa ongelman ymmärtämistä ja helpottaa siten myös sen ratkaisemista. Tällä viikolla tutustumme myös Racket:in animaatio-ominaisuuksiin ja opimme jakamaan ohjelman WeScheme:n avulla.

Tämän jakson tehtävät kannattaa tehdä kahdessa osiossa:

  • videot 1-4 ja tehtävät A
  • videot 5-7 ja tehtävät B

Kuuntele videot ja koodaa itse samalla esimerkkejä niin asiat avautuvat paremmin.

Videot

nro Video Linkki
1. Funktion suunnitteluportaat (osa 1) (7:22 min) katso video
2. Funktion suunnitteluportaat (osa 2) (6:53 min) katso video
3. Boolean operaattorit (2:42 min) katso video
4. Valintalause (6:08 min) katso video
5. Sovellukset : Piilokuva (4:58 min). Lataa videolla käytetty tehtävätiedosto: Piilokuva A katso video
6. Sovellukset : Animaatio (5:10 min) katso video
7. Jakaminen WeScheme:llä (1:39 min) katso video

Videoita täydentävät diat

Racket MOOC - jakso 3 from Tiina Partanen

2. Harjoitustehtävät

Tällä viikolla harjoittelemme Boolean operaattoreita ja valintalausetta ensin tavallisten funktioiden avulla. Koska logiikka on vaikea aihepiiri, käytämme funktion suunnitteluportaita, eli kirjoitamme testitapaukset ennen funktion koodaamista. Tämä helpottaa suuresti koodin kirjoittamista. Harjoittele Boolean operaattoreita, valintalauseita sekä funktion suunnitteluportaita seuraavien tehtävien avulla:

A) Boolean operaattorit, valintalause ja funktion suunnitteluportaat

Perustehtävät:

  • Tee funktio (predikaatti), joka tutkii onko syöte vaaditunlainen. Käytä apuna predikaatteja, vertailuoperaattoreita sekä Boolean operaattoreita.
    Avaa tehtävä: Syötteen tarkistaminen.

  • Tee funktio taksimatkan hinnan laskemiseksi, käytä apuna valintalausetta
    Avaa tehtävä: Taksimatkalaskut.

  • Tutustu kolmion geometriaan Boolean operaattoreiden ja valintalauseen avulla
    Avaa tehtävä: Kolmiotehtävät A2.

Lisätehtävät:

B) Interaktiiviset ohjelmat

Harjoittele Boolean operaattoreiden sekä valintalauseen käyttöä seuraavien interaktiivisten ohjelmien kanssa.

Perustehtävät

  • Harjoittele ohjelmoimaan logiikkaa, joka perustuu hiiren liikkeisiin ruudulla
    Avaa tehtävä: Piilokuva A.

  • Harjoittele ohjelmoimaan logiikkaa, joka perustuu aikaan
    Avaa tehtävä: Kuva-animaatio.

Lisätehtävät

  • Harjoittele ohjelmoimaan logiikkaa, jossa käsitellään x- tai y-koordinaattia
    Avaa tehtävä: Ufo-animaatio.

Malliratkaisut:

Yritä tehdä harjoitukset itse mutta, jos törmäät ongelmiin, katso malliratkaisut tästä.

Boolean operaattorit ja valintalause:

Tehtävä Malliratkaisut Malliratkaisut
Syötteen tarkistaminen DrRacket WeScheme
Taksimatkalaskut DrRacket WeScheme
Kolmiotehtävät A2 DrRacket WeScheme
KolmiotehtävätB (Pythagoraan lause) DrRacket WeScheme
Liikennevalot DrRacket WeScheme

Interaktiiviset ohjelmat:

Tehtävä Malliratkaisut Malliratkaisut
Piilokuva A DrRacket WeScheme
Kuva-animaatio DrRacket WeScheme
Ufo-animaatio DrRacket WeScheme

Harjoittele materiaalin kanssa sen verran, että pystyt tekemään palautettavan koodaustehtävän.

3. Palautettava koodaustehtävä

Tällä viikolla palautettava koodaustehtävä on jonkinlainen animaatio tai hiirisovellus. Käytä tehtävän koodaamiseen ehto- tai valintalausetta, vertailuoperaattoreita ja/tai Boolean operaattoreita sekä vähintään yhtä omaa kuvafunktiota. Tällä viikolla sinun ei tarvitse aloittaa tyhjältä pöydältä vaan voit aivan hyvin katsoa mallia malliratkaisuista (Piilokuva A, Kuva-animaatio ja Ufo-animaatio) ja jatkaa siitä eteenpäin tehden oman sovellusversiosi.

Vinkki opetukseen:

Sovellus kannattaa jakaa WeScheme:n kautta esim. Padlet-seinän kautta. WeScheme antaa päättää jaakaako pelkän valmiin sovelluksen vait koko työn niin, että myös koodia pääsee katsomaan. Oppilaita kannattaa kannustaa jakamaan myös koodi, koska hyvät ideat kannattaa laittaa kiertoon näin koko ryhmä oppii koko ryhmä oppii enemmän!

P.S. Ohjelmointi voi alussa tuntua vaikealta, koska oppimiskäyrä on ”ei lineaarinen”. Tässä hyvä artikkeli aiheesta!


Jakso 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.

Videot

nro Video Linkki
1. Funktion jakaminen osiin (10:49 min) katso video
2. Rekursio (11:44min) katso video
3. Rekursio akkumulaattorilla (8:16 min) Tiedosto, jota mukataan videolla. katso video
4. Lokaalit muuttujat (8:10 min) katso video
5. Display-read – kirjasto katso video

Videoita täydentävät diat

Racket MOOC (kevät 2016) - jakso 4 from Tiina Partanen

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:

  • Koodaa tikkataulu käyttämällä rekursiivista funktiota
    Avaa tehtävä: Tikkataulu.
  • Koodaa ruudukko käyttämällä kahta rekursiivista funktiota
    Avaa tehtävä: Ruudukko.

Lisätehtävät:

  • Koodaa pienenevät pallot käyttämällä rekursiivista funktiota
    Avaa tehtävä: Pienenevät pallot.

  • Koodaa kuvio pyörittämällä epäkeskoa kuviota rekursiivisesti
    Avaa tehtävä: Epäkesko.

  • Tutustu rekursion käyttöön fraktaaleissa sierpinskin kolmion koodin avulla (katso tässä kohtaa video nro. 4).
    Avaa tehtävä: Fraktaalit.

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

  • Harjoittele silmukan käyttöä tekemällä raketin lähtölaskenta
    Avaa tehtävä: Lähtölaskenta.

  • Harjoittele silmukan käyttöä kysymällä täydentäviä sanoja tarinaan yhä uudelleen ja uudelleen
    Avaa tehtävä: Tarina.

  • Harjoittele silmukkaa sekä lokaalien muuttujien käyttämistä koodaamalla laskuautomaatti
    Avaa tehtävä: Laskuautomaatti.

Lisätehtävät

  • Harjoittele lisää silmukan sekä lokaalien muuttujien käyttöä koodaamalla kertolaskupelin
    Avaa tehtävä: Kertolaskupeli.

  • Harjoittele lisää silmukan sekä lokaalien muuttujien käyttöä koodaamalla arvaa numero - pelin
    Avaa tehtävä: Arvaa numero -peli.

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ä.

Malliratkaisut:

Yritä tehdä harjoitukset itse mutta, jos törmäät ongelmiin, katso malliratkaisut tästä.

Rekursio:

Tehtävä Malliratkaisut Malliratkaisut
Tikkataulu DrRacket WeScheme
Ruudukko DrRacket WeScheme
Pienenevät pallot DrRacket WeScheme
Epäkesko DrRacket WeScheme
Fraktaalit DrRacket WeScheme

Interaktiiviset ohjelmat:

Tehtävä Malliratkaisut Malliratkaisut
Lähtölaskenta DrRacket WeScheme
Tarina DrRacket WeScheme
Laskuautomaatti DrRacket WeScheme
Kertolaskupeli DrRacket WeScheme
Arvaa numero -peli DrRacket WeScheme

Harjoittele materiaalin kanssa sen verran, että pystyt tekemään palautettavan koodaustehtävän.

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!
Koska käyttäjä voi antaa vääränlaisia syötteitä, muista testata syötteet ennen kuin niitä käytetään ja anna virhetilanteessa käyttäjälle ohjeita oikeanlaisesta syötteestä. Testaa apufunktiosi käyttäen check-expect:iä mutta muista että sivuvaikutuksia (tässä kaikki display-read kirjaston funktiot) sisältäviä koodin osia ei voi testata muuten kuin ajamalla koodia ja katsomalla toimiiko se. Tätä palautustehtävää varten voit katsoa mallia kaikista tämän jakson malliratkaisuista ja käyttää malliratkaisuja pohjana omalle sovelluksellesi.

Vinkki opetukseen:

Tämän jakson palautustehtävän soveltuu vertaisarvioitavaksi samalla tavalla kuin jakson 2 tehtävä. Jos ohjelman aihepiirin keksiminen tuottaa ongelmia, mieti millaisesta ohjelmasta voisi olla sinulle tai oppilaillesi hyötyä…


Jakso 5

1. Opiskeltava sisältö

Racket-kurssin jaksolla 5. ja 6. opimme käsittelemään tietoa listojen muodossa. Listat mahdollistavat tehokkaan tavan käsitellä isoa määrää tietoa pienellä määrällä koodia. Listoja voidaan käsitellä kahdella eri tavalla: rekursiivisten funktioiden avulla (jakso 5.) tai Higher Order – funktioiden avulla (jakso 6.). Jaksossa 5. opitaan lisäämään kuvia koodin sekaan ja jaksossa 6. opitaan piirtämään Turtle – grafiikkakuvia.

Voit tehdä joko molemmat jaksot (5. ja 6.) tai valita vain toisen. Koska molemmat jaksot käsittelevät listoja, riittää että tutustut listoihin yhden jakson puitteissa (kurssi on suunniteltu niin, että yhden jakson voi halutessaan jättää väliin).

Tämän jakson tehtävät voidaan tehdä kahdessa eri osassa:

  • videot 1-3 ja tehtävät A
  • video 4 ja tehtävät B

Kuuntele videot ja koodaa itse samalla esimerkkejä niin asiat avautuvat paremmin.

Videot

nro Video Linkki
1. Listat (6:19 min) katso video
2. Listan käsittely rekursiivinen (osa 1) (5:52 min) katso video
3. Rekursio akkumulaattorilla (8:16 min) katso video
4. Tietokilpailupeli listan avulla (12:01 min) katso video

Videoita täydentävät diat

Racket MOOC - jakso 5 from Tiina Partanen

2. Harjoitustehtävät

A) Listat ja rekursio

Harjoittelemme ensin listan ”syömistä” rekursiivisesti:

Perustehtävät:

  • Harjoittele listan ja rekursion käyttöä koodaamalla funktio, joka laskee keskiarvon tai hinnan alennukse/korotuksen
    Avaa tehtävä: Keskiarvo, hinnan alennus/korotus.
  • Harjoittele listan ja rekursion käyttöä koodaamalla funktio, joka arpoo uudet työparit luokan oppilaista
    Avaa tehtävä: Uudet työparit.

Lisätehtävät:

  • Harjoittele listan ja rekursion käyttöä koodaamalla funktio, joka piirtää Death Star:in
    Avaa tehtävä: Death Star.

B) Interaktiiviset ohjelmat

Tässä osiossa tutustutaan siihen miten listoja voi käyttää interaktiivisten ohjelmien kanssa.

Perustehtävät:

  • Harjoittele listan ja rekursion käyttöä koodaamalla peli, jossa kysymykset ja oikeat vastaukset ovat listan muodossa
    Avaa tehtävä: Tunnistuspeli.

Lisätehtävät:

  • Harjoittele listan ja rekursion käyttöä koodaamalla peli, jossa kysymykset ja vastausvaihtoehdot ovat listan muodossa
    Avaa tehtävä: Valintapeli.

Jos tuntuu, että pelitehtävien tekeminen on liian haastavaa voit tutustua malliratkaisuihin suoraan ja lähteä muokkaamaan niiden pohjalta palautettavaa koodaustehtävää.

Malliratkaisut:

Yritä tehdä harjoitukset itse mutta, jos törmäät ongelmiin, katso malliratkaisut tästä.

Rekursio:

Tehtävä Malliratkaisut Malliratkaisut
Keskiarvo DrRacket WeScheme
Hinnan alennus/korotus DrRacket WeScheme
Arvo työparit DrRacket WeScheme
Death Star DrRacket WeScheme

Interaktiiviset ohjelmat:

Tehtävä Malliratkaisut Malliratkaisut
Tunnistuspeli DrRacket WeScheme
Valintapeli DrRacket WeScheme

Harjoittele materiaalin kanssa sen verran, että pystyt tekemään palautettavan koodaustehtävän.

3. Palautettava koodaustehtävä

Tämän jakson palautettava harjoitustyö on jonkinlainen tietokilpailupeli (tunnistuspeli, valintapeli) tai muu ohjelma, jossa käytetään listoja, kuvia sekä rekursiota. Voit myös tehdä sellaisen pelin, jossa on molempia kysymystyyppejä sekaisin (haastavampi!). Jaa ohjelmasi WeScheme:n kautta (katso ohje kuvien siirtämiseen Google-driveen viimeiseltä videolta).

Vinkki opetukseen:

Kun ohjelmat jaetaan Padlet-seinän kautta koko ryhmä pääseen pelaamaan muiden palauttamia pelejä.


Jakso 6

1. Opiskeltava sisältö

Tällä viikolla jatkamme listojen opiskelua ja lisäämme mukaan Turtle grafiikan sekä Higher Order – funktiot. Racket Turtle:a voi käyttää listojen, rekursion sekä Higher Order – funktioiden opettamiseen mutta myös tasogeometrian käsitteiden opettamiseen (mittasuhteet, monikulmioiden kulmat, koordinaatisto, peilaus jne.). Higher Order – funktiot ovat puolestaan algoritmien ”moottorisaha” (rekursio on se ”käsisaha”). Niiden oppiminen voi aluksi tuntua hieman hankalalta mutta ne tarjoavat erittäin tehokkaan ja lyhyen tavan kirjoittaa algoritmeja ja niiden toimintalogiikka soveltuu hyvin matemaattiseen ajatteluun.

Ensimmäinen video esittelee Racket Turtlen perustoiminnot. Toinen video esittelee Higher Order – funktiot eli yhden kätevän tavan tehdä käsitellä listamuotoista tietoa. Viimeinen video esittelee miten Racket Turtlella voi tehdä hienompia kuvia Higher Order – funktioiden avulla (toki nämä voisi tehdä myös rekursiivisen funktion avulla).

Racket Turtle:en toimintaan voit videoiden ja diojen lisäksi tutustua Koodarin käsikirjan avulla. Erityisen hyödyllisiä ovat Turtle esimerkit.

Videot

nro Video Linkki
1. Racket Turtle alkeet (16:28 min) katso video
2. Higher Order – funktiot (9:30 min) katso video
3. Racket Turtle jatko (7:12 min) katso video

Videoita täydentävät diat

Racket MOOC - jakso 6 from Tiina Partanen

2. Harjoitustehtävät

A) Racket Turtle – alkeet

Racket Turtlen käyttö alkeet tasolla on helppoa. Kokeile erilaisia toimintoja myös perustehtävien ulkopuolelta. Nyt on lupa kokeilla ja leikkiä!

Perustehtävät

  • Harjoittele Turtle-grafiikkaa piirtämällä geometrisia peruskuvioita
    Avaa tehtävä: Peruskuviot.

  • Harjoittele toistorakennetta piirtämällä Turtle-grafiikan avulla neliöitä tai ympyröitä
    Avaa tehtävä: Neliöt.
    Avaa tehtävä: Ympyrät.

Lisätehtävät

  • Harjoittele lisää toistorakennetta ja Turtle-grafiikkaa piirtämällä kukkia
    Avaa tehtävä: Kukka.

  • Harjoittele leimasin toiminnon käyttöä Turtle-grafiikassa
    Avaa tehtävä: Tähtirusetti.

Huom! Racket Turtle vaatii teachpacks – paketin asentamisen DrRacket:iin. Jos olet tehnyt sen jo aikaisemmin niin kaikki on ok, muuten asenna se nyt. WeSchemessä ei tarvita paketin asennusta, riittää että otat kirjaston käyttöön: (require wescheme/oJ1vcDo5qd).

B) Racket Turtle – jatko (Higher Order – funktiot)

Perustehtävät

  • Harjoittele spiraalin ja vinospiraalin piirtämistä käyttämällä Higher Order -funktioita (tai rekursiota)
    Avaa tehtävä: Spiraali ja vinospiraali.

  • Harjoittele leimasinlistan tekemistä Higher Order -funktioiden avulla
    Avaa tehtävä: Tähtilista ja tähtispiraali.

Lisätehtävät

  • Harjoittele random-funktion ja Higher Order -funktioiden käyttöä ja koodaa satunnaisesti etenevä Turtle
    Avaa tehtävä: Random Turtle.

  • Harjoittele toistorakenteen ja peilauksen käyttämistä piirtämällä Turtle-grafiikan avulla Koch:in käyriä
    Avaa tehtävä: Koch:in käyrät.

Voit tehdä Turtle jatko – tehtävät myös käyttämällä rekursiivista listan luomista. Higher Order – funktiot ajavat saman asian mutta lyhyemmällä koodilla, joten on makuasia kumpaa käyttää.

Malliratkaisut:

Yritä tehdä harjoitukset itse mutta, jos törmäät ongelmiin, katso malliratkaisut tästä.

Turtle alkeet:

Tehtävä Malliratkaisut Malliratkaisut
Peruskuviot DrRacket WeScheme
Neliöt DrRacket WeScheme
Ympyrät DrRacket WeScheme
Kukka DrRacket WeScheme
Tähtirusetti DrRacket WeScheme

Turtle jatko:

Tehtävä Malliratkaisut Malliratkaisut
Spiraali DrRacket WeScheme
Vinospiraali DrRacket WeScheme
Tähtilista DrRacket WeScheme
Tähtispiraali DrRacket WeScheme
Random Turtle DrRacket WeScheme
Koch:in käyrät DrRacket WeScheme

Harjoittele materiaalin kanssa sen verran, että pystyt tekemään palautettavan koodaustehtävän.

3. Palautettava koodaustehtävä

Tämän viikon palautustehtävä on Racket Turtle -kirjaston avulla piirretty kuva, joka palautetaan png-muodossa samalla tavalla kuin jaksolla 1 eli valitse kuva hiirellä ja valitse hiiren oikealla näppäimellä ”save image”. Kuva voi olla Racket Turtle – alkeet tyyppinen (esim. repeat – komentolla tai peilaamalla tehty kuva), se voi käyttää 2htdp/image -kirjastolla koodattua tai ”add image” – toiminnolla lisättyä kuvaa leimasimena, siinä voi olla käytössä rekursiivinen funktio tai Higher Order – funktio (esim. map).

Voit käyttää malliratkaisuja pohjana, muokata niitä eteenpäin ja tehdä oman versiosi. Kirjoita kuvan yhteyteen myös lyhyt kuvaus siitä miten kuvasi on saatu aikaan.

Vinkki opetukseen:

Kun jokainen jakaa oman luovan ratkaisunsa Padlet-seinälle, lopputuloksista syntyy pienimuotoinen taidenäyttely.

Rohkaise oppilaita pitämään hauskaa, olemaan luovia, leikkimään ja kokeilemaan koodilla. Nyt ei ole tarkoitus tehdä check-expect:ejä vaan antaa koodin yllättää!