Racket ohjelmointia osa 1 Tiina Partanen Lielahden koulu 2014
Sisältö 1) Peruslaskutoimitukset 2) Peruskuvioiden piirtäminen 3) Määrittelyt (define) 4) Yhdistettyjen kuvien piirtäminen 5) Muuttujat ja funktiot 6) Listat 7) Funktio parametrina 2
0. Esivalmistelut Asenna ilmainen DrRacket: http://racket-lang.org/download/ Valitse kieleksi harjoittelukieli (rajoitetumpi Racket + helpommat virheilmoitukset): Language Choose language Teaching languages Beginning student TAI Racket (ei rajoituksia) Language Choose language Racket language tässä tapauksessa jokainen kooditiedosto täytyy aloittaa rivillä: #lang racket 3
1a. Peruslaskut Racketilla ;; Esimerkit: ;; Laske: 2 + 3 (+ 2 3) ;; Laske: 9 4 (- 9 4) ;; Laske: 7 * 3 (* 7 3) ;; Laske: 8 : 3 (/ 8 3) DrRacket on kuin iso laskin. Erona tavalliseen laskimeen, Racket-lasku aloitetaan aina sulkumerkillä, sitten tulee operaattori (esim. +) ja sitten numerot. Lasku suljetaan sulkumerkillä. Kirjoita laskut DrRacketin ylempään ikkunaan ja paina run. Vastaukset ilmestyvät alempaan ikkunaan. 4
1b. Moniosaiset laskut Racketillä ;; 18-5 + 7 (+ (- 18 5) 7) 1. 2. ;; 5 + 15 : 3 (+ 5 (/ 15 3)) 1. Aloita siitä laskutoimituksesta, joka on laskujärjestyksen mukaan ensimmäinen. Seuraava laskutoimitus tehdään tämän ympärille. Rakennat siis Racket-lauseketta kuin kasvattaisit sipuliin uusia kerroksia. 2. 5
2. Peruskuvioiden piirtäminen Jotta kuvioita voi piirtää, täytyy ottaa käyttöön grafiikkakirjasto. Kirjoita alla oleva teksti DrRacketin ylempään ikkunaan ja paina run. (require 2htdp/image) Kokeile seuraavia piirtofunktioita joko ylemmässä ikkunassa (ja paina run ) tai alemmassa ikkunassa (ja paina <enter>). 6
(circle 100 "solid" "red ) 100
(rectangle 200 100 solid blue ) 100 200
(triangle 100 solid yellow ) 100
(rectangle 100 100 outline green ) 100 100
(right-triangle 100 200 outline brown ) 200 100
3. Määrittelyt (define) Koodia voi yksinkertaistaa tekemällä määrittelyjä eli antamalla jollekin koodinpätkälle nimen Määrittely kirjoitetaan ylempään ikkunaan ja painetaan run esim. (define YMPYRÄ (circle 50 solid red )) Määrittelyä voi nyt käyttää kirjoittamalla YMPYRÄ alempaan ikkunaan (+ paina <enter>) 12
(define SUORAKULMIO (rectangle 200 100 solid blue )) ) 13
(define YMPYRÄ (circle 100 solid red )) ) 14
4. Yhdistettyjen kuvien piirtäminen Peruskuvioita saadaan päällekkäin käyttämällä overlay - funktiolla Kuvat saadaan vierekkäin, allekkain tai päällekkäin overlay/xy funktioilla 15
(overlay SUORAKULMIO YMPYRÄ)
(overlay/xy SUORAKULMIO 0 0 YMPYRÄ)
(overlay/xy SUORAKULMIO 100 0 YMPYRÄ) 100
(overlay/xy SUORAKULMIO 0 50 YMPYRÄ) 50
Koodaushaaste 1 Tee Japanin lippu (define JAPANIN-LIPPU..) Tee auto (define AUTO..) 20
Kotitehtävä/lisätehtävä Tee Suomen lippu (define SUOMEN-LIPPU..) 21
5a. Muuttujat ja funktiot Funktion avulla voidaan kirjoittaa uudelleenkäytettävää koodia (kirjoita kerran, kutsu useasti) Valitaan funktiolle kuvaava nimi: maalaa-auto Selvitetään mitkä asiat ovat muuttujia, annetaan niille nimet: k-väri r-väri Esim. (maalaa-auto green red ) palauttaisi tämän auton 22
5b. Funktion määrittely Funktion esittely (kommenttiriville, helpottaa funktion käyttöä, hyvä tapa): funktion nimi : parametrien tyypit -> paluuarvon tyyppi ;; maalaa-auto : merkkijono merkkijono -> kuva Funktion määrittely: (define (maalaa-auto k-väri r-väri) (< siirrä tähän autokoodi, katso koodaushaaste 1>) AUTO) Muuta autokoodin vakiot (esim. red ) muuttujiksi (= kirjoita niiden tilalle joko k-väri tai r-väri) 23
6a. Listat Lista on tietorakenne, johon voi tallentaa monta tietoa esim. auton kuvia (list (maalaa-auto black red ) ) Listalle voi antaa myös nimen (define AUTOJONO (list )) 24
6b. Listan käsittely Ota listan ensimmäinen (first AUTOJONO) Ota listan viimeinen (last AUTOJONO) Ota kaikki muut paitsi ensimmäinen (rest AUTOJONO) Miten saat keskimmäisen auton? 25
7. Funktio parametrina map funktiolle voi antaa funktion parametrina ja se ajaa ko. funktion jokaiselle annetun listan jäsenelle funktio parametrina lista 26
Koodaa pacmanit Koodaushaaste 2 (define PACMAN-YLÖS..) (define PACMAN-ALAS..).. VIHJE: tämän PowerPointin lopussa on esitelty funktioita joista voi olla apua 27
Koodaushaaste 3 Tee funktio joka palauttaa pyydetyn pacmanin ;; anna-pacman : numero -> kuva Esim. (anna-packman OIKEALLE) VIHJE: anna suunnille nimet definellä (define OIKEALLE 0) (define YLÖS 90).. BONUS-tehtävä: Lisää funktioon vapaaehtoinen parametri : väri ja/tai koko 28
(flip-vertical KOLMIO)
(rotate 30 KOLMIO) 30
(overlay/align center top KOLMIO SUORAKULMIO)
(overlay/align center bottom KOLMIO SUORAKULMIO)
(overlay/align left center KOLMIO SUORAKULMIO)
(overlay/align right bottom KOLMIO SUORAKULMIO)
(crop 0 0 200 100 YMPYRÄ) (0, 0) (200, 100)
(define PACMAN )
(scale 0.5 PACMAN)
Lisää piirtofunktioita 2htdp/image sisältää myös paljon muita piirtofunktioita joihin voit tutustua itse näillä sivuilla: http://docs.racketlang.org/teachpack/2htdpimage.html 38