de torens van hanoi

27
De torens van Hanoi Stijn Vandamme [email protected] http://studwww.rug.ac.be/~spvdamme/ ailo/

Upload: xenon

Post on 22-Jan-2016

49 views

Category:

Documents


0 download

DESCRIPTION

De torens van Hanoi. Stijn Vandamme [email protected] http://studwww.rug.ac.be/~spvdamme/ailo/. Herhaling. Stijn Vandamme [email protected] http://studwww.rug.ac.be/~spvdamme/ailo/. Recursie en if (herhaling). - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: De torens van Hanoi

De torens van Hanoi

Stijn [email protected]

http://studwww.rug.ac.be/~spvdamme/ailo/

Page 2: De torens van Hanoi

Herhaling

Stijn [email protected]

http://studwww.rug.ac.be/~spvdamme/ailo/

Page 3: De torens van Hanoi

Recursie en if (herhaling)

Teken concentrische cirkeltjes van een (op)gegeven straal en kleiner.

to cirkeltjes :straalif (:straal > 0) [

; Teken de buitenste cirkelcircle :straal; Teken de rest via recursiecirkeltjes (:straal – 10)

]end

to cirkeltjes :straalif (:straal < 0) [ stop ]; Teken de buitenste cirkelcircle :straal; Teken de rest via recursiecirkeltjes (:straal – 10)

end

Page 4: De torens van Hanoi

Commando’s (herhaling)

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

Page 5: De torens van Hanoi

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

Page 6: De torens van Hanoi

De Torens van Hanoi

• Mythe:Toren van Brahma (64 blokken)

• Als spel op de markt gebrachtin 1863 door prof. Claus(College van Li-Sou-Stian)pseudoniem vanEdouard Lucas(College van Saint-Louis)

Page 7: De torens van Hanoi

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

Page 8: De torens van Hanoi

Lijnen

631 pixels

Breedte van de lijnen: 5 pixels

290

pixe

ls

208 pixels

(–315, 0)

(–210, 0)203 pixels

(0, 0)

Page 9: De torens van Hanoi

Lijnen

to lijnen; Tekent de lijnen; (zowel het grondvlak als de staven); voor de beginsituatie.

setfc :lijnsetxy -315 0bitblock 631 5for [i -210 206 208] [

setxy :i 0bitblock 5 290

]end

Page 10: De torens van Hanoi

Rechthoek

• Eventueel met een rand• Eventueel kleur in functie van :dikte

(5 + 20 × :dikte) pixels25

pix

els

(x, –20 + 28 × :laag)x = –208 als :toren = 1x = 0 als :toren = 2x = 208 als :toren = 3

Page 11: De torens van Hanoi

Rechthoek(5 + 20 × :dikte) pixels

25 p

ixel

s

(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

Page 12: De torens van Hanoi

Rechthoek

to rechthoek :toren :laag :dikte; Tekent een rechthoek.

setfc (:kleur)setxy (-418 + 208 * :toren ~ - 10 * :dikte) ~ (-20 + 28 * :laag)bitblock (5 + 20 * :dikte) 25randen :toren :laag :dikte

end

to randen :toren :laag :dikte...

end

Page 13: De torens van Hanoi

Verwijderenmaximaal 205 pixels

25 p

ixel

s

(x, –20 + 28 × :laag)x = –208 als :toren = 1x = 0 als :toren = 2x = 208 als :toren = 3

5 pixels breed

Page 14: De torens van Hanoi

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 :lijnsetxy (-418 + 208 * :toren) (-20 + 28 * :laag)bitblock 5 25

end

Page 15: De torens van Hanoi

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)

Page 16: De torens van Hanoi

Functies met uitvoer

to gemiddelde :x :y; Geeft als output; het gemiddelde van de 2 argumenten

output (:x + :y) / 2

end

to oproependefunctiemake "gem gemiddelde 40 60fd gemiddelde 10 :gem

end

Page 17: De torens van Hanoi

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

Page 18: De torens van Hanoi

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

Page 19: De torens van Hanoi

Setto 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

Page 20: De torens van Hanoi

Getto 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

Page 21: De torens van Hanoi

Beginsituatie

to begin :toren :aantal• Zet toren1, toren2

en toren3 juist• Tekent de beginsituatie

Page 22: De torens van Hanoi

Beginsituatieto 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 0make "toren2 0make "toren3 0setaantal :toren :aantallijnenfor [i 1 :aantal 1] [

rechthoek :toren :i (1 + :aantal - :i)]

end

Page 23: De torens van Hanoi

Verplaatsen

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

Page 24: De torens van Hanoi

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 :vanaantalwait(15)make "naaraantal (getaantal :naar)setaantal :naar (:naaraantal + 1)rechthoek :naar (:naaraantal + 1) :dikte

end

Page 25: De torens van Hanoi

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

Page 26: De torens van Hanoi

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 :naarverplaatsen :dikte :van :naar :anderewait(45)recursief (:dikte - 1) :andere :naar :van

end

Page 27: De torens van Hanoi

Hoofdprogramma

to torenhanoi :aantal :van :naar :andere; Animatie van de toren van Hanoi.; (:aantal) blokken worden verplaatst; van toren (:van) naar (:naar).

ctcshtpubegin :van :aantalwait(100)recursief :aantal :van :naar :andere

end