tiistai 24. marraskuuta 2015

Racket - iskuryhmän kolmas workshop

Tämän syksyn viimeisessä workshopissa kehittelimme tutustuimme Koodiaapinen MOOC:in Racket osion toteutukseen ja ideoimme tehtäviä todennäköisyyslaskennan, polynomilaskennan sekä suoraan- ja kääntäen verrannollisuuden opiskelemiseen.

1) Suoraan verrallisuuden havainnollistamiseen ideoitiin mopon kulutuksen koodaamista funktioksi, pisteiden laskemista ja plottaamista sekä suoran piirtämistä samaan kuvaan. Tämä vaatii lisäyksiä plot2D-kirjastoon.

2) Todennäköisyyslaskennasta voisi tehdä nopanheittosimulaattorin, eli arpoa 10, 100 ja 1000 nopan silmälukua ja piirtää niistä palkkidiagrammit ja verrata lähenevätkö ne laskettua todennäköisyyttä. Keskustelimme paljon siitä, tuottaako tietokone aidosti satunnaisia lukuja ja päätimme, että tämä täytyy vain testata.

3) Todennäköisyyttä voisi havainnoida myös radioaktiivisten atomien puoliintumisajan simulaation tai "tuplaa-panos"-pelisimulaation avulla (pienillä korteillä 1-6 tai isoilla korteilla 8-13 voittaa, 7 häviää aina).

4) Tutustuimme myös siihen miten Turtlelle saadaan generoitua map:in avulla pitkiä komentolistoja, ja teimmekin "random-Turtlen", joka kulki satunnaisen matkan satunnaiseen suuntaan. Tämä oli hauska eikä ollenkaan vaikea toteuttaa!

5) Lopuksi vielä pohdimme miten polynomilaskentaan voisi tuoda ohjelmointia, ja totesimme että lähdemme liikkeelle lausekkeen arvon laskemisesta ja teemme sitten jonkun oikeaan mittausdataan liittyvän polynomisovitteen kuvaajat.

Uusia ideoita siis syntyy jatkuvasti kun tämä joukko kokoontuu, nyt pitäisi vain työstää nämä tehtävien muotoon...

Tähän asti materiaalista on testattu peruslaskut ja peruskuvat, sekä geometriaan liittyviä funktioita ja ehtolauseista piilokuvat. Ensiviikolla testaukseen siirtyvät animaatiot sekä Turtle. Funktioiden parempi testaus siirrettiin keväälle, koska se tulee 9. matematiikassa esille vasta keväällä.

Random-Turtle kulkua (500 kierrosta):

 Koodi:
(require teachpacks/racket-turtle)

(define (kierros i)
  (list (turn-left (random 360))

        (forward (random 20))))

(define RANDOM-TURTLE (map kierros (range 0 500 1)))

(draw RANDOM-TURTLE)

maanantai 23. marraskuuta 2015

Racket - iskuryhmän toinen workshop

Racket - iskuryhmän toisessa workshopissa tutustuimme animaatioihin, joissa muuttujana on aika. Teimme ensin ufon laskeutumisanimaation, sitten laitoimme sen "rullaamaan" käyttämällä moduloa. Sitten käänsimme ufon kulkusuunnan nousuun, ja lopuksi teimme samaan animaatioon molemmat. Tässä harjoituksessa käytettiin ehtolauseita (if), valintalauseita (cond) sekä vertailuoperaattoreita (<, >, <=, >=, =). Kun systeemi oli selvillä iskuryhmän opettajat kokeilivat tehdä omia animaatioita, suurenevia ja pieneneviä palloja, väriä vaihtavia ja pyöriviä propelleja ja syntyi myös yksi pomppiva pallo joka "jousti" pompatessaan (litistyi ellipsiksi).
Animaation tekeminen havaittiin yllättävän matemaattiseksi harjoitukseksi, siinä joutui tekemään kuvan piirtofunktion (joutui miettimään muuttujia ja vakioita), miettimään jakojäännöstä (modulo) ja suunnittelemaan ehdollista suorittamista.
Käytimme tässä harjoituksessa big-bangiä, vaikka animate - funktio olisi toiminut aivan vastaavalla tavalla.

Tässä ufo-esimerkkianimaatio WeScheme:llä:

http://www.wescheme.org/view?publicId=f6lWg5Hmdg 

Yksinkertainenkin ufon lennättäminen vaatii matematiikkaa!