tiistai 20. tammikuuta 2015

Koodauksen ABC: 9. oppitunti

Jatkoimme Racket-Turtlen kanssa opiskelua. Kerroin että tehdäksemme tämän squiral-kuvion, tarvitsimme rekursiota:
Motivaatio rekursion käytölle...
Oppilaiden oli helppo nähdä tästä, että kuvio syntyisi, jos Turtle liikkuisi jokaisella kierroksella hieman pidemmän matkan kuin edellisellä.

Koodi tehtiin samanlaisella "akkumulaattori"-tekniikalla kuin edellisen tunnin merkkijonoja käyttänyt toista-hokema, eli keräsimme rekursiivisesti käskylistaa Turtlelle yhteen parametriin.Toteutimme tämän silmukka-kuvio-funktion käyttämällä sivu-ja-kulma-apufunktiota, joka teki ohjeet yhden sivun piirtämiseen.

(define (sivu-ja-kulma s k)
  (list (forward s) (turn-left k)))

(define (silmukka-kuvio s k kerrat ohjeet)
  (if (<= kerrat 0)
      ohjeet
      (silmukka-kuvio (+ s 5) k (sub1 kerrat) (append ohjeet (sivu-ja-kulma s k))))) 


Ja tätä kutsuttiin REPL:stä näin:

(piirrä (silmukka-kuvio 1 90 20 '()))

Ja nyt vasta aukesikin ovi Racket-Turtle-leikille. Ryhmä piirteli innoissaan erilaisia Turtle-taideteoksia, joissa monimutkaisimmissa oli jopa 5000 viivanpätkää!

Tässä ryhmäni aikaansaannoksia!











P.S. Sateenkaaren värit saatiin aikaan käyttämällä random-funktiota eli arpomalla make-color:ille uudet RGB arvot:

(change-color (make-color (random 255) (random 255) (random 255)))
 

3 kommenttia: