1 / 27

De torens van Hanoi

De torens van Hanoi. Stijn Vandamme Stijn.Vandamme@rug.ac.be http://studwww.rug.ac.be/~spvdamme/ailo/. Herhaling. Stijn Vandamme Stijn.Vandamme@rug.ac.be http://studwww.rug.ac.be/~spvdamme/ailo/. Recursie en if (herhaling).

xenon
Télécharger la présentation

De torens van Hanoi

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. De torens van Hanoi Stijn Vandamme Stijn.Vandamme@rug.ac.be http://studwww.rug.ac.be/~spvdamme/ailo/

  2. Herhaling Stijn Vandamme Stijn.Vandamme@rug.ac.be http://studwww.rug.ac.be/~spvdamme/ailo/

  3. Recursie en if (herhaling) Teken concentrische cirkeltjes van een (op)gegeven straal en kleiner. to cirkeltjes :straal if (:straal > 0) [ ; Teken de buitenste cirkel circle :straal ; Teken de rest via recursie cirkeltjes (:straal – 10) ] end to cirkeltjes :straal if (:straal < 0) [ stop ] ; Teken de buitenste cirkel circle :straal ; Teken de rest via recursie cirkeltjes (:straal – 10) end

  4. setxy :x :y xcor ycor seth :hoek fd :lengte = forward bk :lengte = back lt :hoek = left rt :hoek = right setfc :kleur = setfloodcolor setpc :kleur = setpencolor bitblock :breedte :hoogte circle :straal fill for [i :begin :eind] [ ] for [i :begin :eind :stap] [ ] if (voorwaarde) [ ] repeat :aantalkeer [ ] stop wait (:tijd) item :nummer :lijst print :tekst ct = cleartext st = showturtle ht = hideturtle pu = penup pd = pendown Commando’s (herhaling)

  5. Speciale tekens • De puntkomma ;Alles na een puntkomma tot einde lijnis commentaar en wordt niet uitgevoerd= Om uitleg te geven • De tilde ~Het commando wordt verdergezet op de volgende lijn= Om niet horizontaal te moeten scrollen

  6. De Torens van Hanoi • Mythe:Toren van Brahma (64 blokken) • Als spel op de markt gebracht • in 1863 door prof. Claus(College van Li-Sou-Stian) • pseudoniem vanEdouard Lucas(College van Saint-Louis)

  7. Tekenen • De lijnen (grondvlak en staven) • Een rechthoek • :toren • :laag • :dikte • Verwijderen van een rechthoek • De rechthoek overtekenen in het wit • De lijn (staaf) hertekenen • :toren • :laag

  8. Lijnen Breedte van de lijnen: 5 pixels (–315, 0) 203 pixels (–210, 0) 290 pixels 208 pixels (0, 0) 631 pixels

  9. Lijnen to lijnen ; Tekent de lijnen ; (zowel het grondvlak als de staven) ; voor de beginsituatie. setfc :lijn setxy -315 0 bitblock 631 5 for [i -210 206 208] [ setxy :i 0 bitblock 5 290 ] end

  10. Rechthoek (5 + 20 × :dikte) pixels • Eventueel met een rand • Eventueel kleur in functie van :dikte 25 pixels (x, –20 + 28 × :laag)x = –208 als :toren = 1 x = 0 als :toren = 2 x = 208 als :toren = 3

  11. Rechthoek (5 + 20 × :dikte) pixels 25 pixels (x, –20 + 28 × :laag)x = –210 – 10 × :dikte als :toren = 1x = –2 – 10 × :dikte als :toren = 2x = 206 – 10 × :dikte als :toren = 3 x = –418 + 208 × :toren – 10 × :dikte

  12. Rechthoek to rechthoek :toren :laag :dikte ; Tekent een rechthoek. setfc (:kleur) setxy (-418 + 208 * :toren ~ - 10 * :dikte) ~ (-20 + 28 * :laag) bitblock (5 + 20 * :dikte) 25 randen :toren :laag :dikte end to randen :toren :laag :dikte ... end

  13. Verwijderen maximaal 205 pixels 25 pixels 5 pixels breed (x, –20 + 28 × :laag)x = –208 als :toren = 1 x = 0 als :toren = 2 x = 208 als :toren = 3

  14. Verwijderen to verwijderen :toren :laag ; Verwijdert een rechthoek ; (en hertekent de lijn). setfc [255 255 255] setxy (-518 + 208 * :toren) (-20 + 28 * :laag) bitblock 205 25 ; Lijn hertekenen. setfc :lijn setxy (-418 + 208 * :toren) (-20 + 28 * :laag) bitblock 5 25 end

  15. Twee soorten functies • Procedures (of subroutines) • Voeren alleen instructies uit • Kunnen beëindigd worden door stop • Functies met uitvoer (output) • Voeren (eventueel) instructies uit • Geven een antwoord aan oproepende functie door output (beëindigt functie)

  16. Functies met uitvoer to gemiddelde :x :y; Geeft als output ; het gemiddelde van de 2 argumenten output (:x + :y) / 2 end to oproependefunctie make "gem gemiddelde 40 60 fd gemiddelde 10 :gemend

  17. Functies met uitvoer to kleur :dikte ; Geeft als output het kleur ; dat hoort bij een blok ; van dikte (:dikte). make "kleuren [[255 0 0] [255 0 102] ~ [255 0 204] [204 0 255] ~ [102 0 255] [0 0 255] ~ [102 0 255] [204 0 255] ~ [255 0 204] [255 0 102]] output (item :dikte :kleuren) end

  18. Set en get • make "toren1 0make "toren2 0make "toren3 0 • setaantal :toren :aantalVerandert 1 van de variabelen • getaantal :torenGeeft als output de waarde van 1 van de variabelen

  19. Set to setaantal :toren :aantal ; Verandert het aantal blokken in toren (:toren) ; naar (:aantal). if (:toren = 1) [ make "toren1 :aantal ] if (:toren = 2) [ make "toren2 :aantal ] if (:toren = 3) [ make "toren3 :aantal ] end

  20. Get to getaantal :toren ; Geeft als output het aantal blokken ; in toren (:toren). if (:toren = 1) [ output :toren1 ] if (:toren = 2) [ output :toren2 ] if (:toren = 3) [ output :toren3 ] end

  21. Beginsituatie • to begin :toren :aantal • Zet toren1, toren2en toren3 juist • Tekent de beginsituatie

  22. Beginsituatie to begin :toren :aantal ; Tekent de blokken voor de beginsituatie. ; De beginsituatie is (:aantal) blokken ; in toren (:toren), ; 0 blokken in de andere 2 torens. make "toren1 0 make "toren2 0 make "toren3 0 setaantal :toren :aantal lijnen for [i 1 :aantal 1] [ rechthoek :toren :i (1 + :aantal - :i) ] end

  23. Verplaatsen • to verplaatsen :dikte ~ • :van :naar :andere • Zet toren1, toren2 en toren 3 juist • Verwijdert een blok • (Wacht eventjes) • Tekent een blok

  24. Verplaatsen to verplaatsen :dikte :van :naar ; Verplaatst een blok met dikte (:dikte) ; van toren (:van) naar toren (:naar). make "vanaantal (getaantal :van) setaantal :van (:vanaantal - 1) verwijder :van :vanaantal wait(15) make "naaraantal (getaantal :naar) setaantal :naar (:naaraantal + 1) rechthoek :naar (:naaraantal + 1) :dikte end

  25. Algoritme Recursief (Voor n blokken:) • Verplaats de kleinste n – 1 blokken • Verplaats de grootste blok • (Wacht even) • Verplaats de kleinste n – 1 blokken Let op bij de kolomargumenten! to recursief :dikte :van :naar :andere

  26. Algoritme to recursief :dikte :van :naar :andere ; Het eigenlijke recursieve algoritme ; voor de animatie van de torens ; van Hanoi. if (:dikte = 0) [stop] recursief (:dikte - 1) :van :andere :naar verplaatsen :dikte :van :naar :andere wait(45) recursief (:dikte - 1) :andere :naar :van end

  27. Hoofdprogramma to torenhanoi :aantal :van :naar :andere ; Animatie van de toren van Hanoi. ; (:aantal) blokken worden verplaatst ; van toren (:van) naar (:naar). ct cs ht pu begin :van :aantal wait(100) recursief :aantal :van :naar :andere end

More Related