SOLUZIONE DI UN PROBLEMA COMPLESSO IN LOGO CON IL METODO TOP DOWN
Prerequisiti: passaggio di parametri
alle procedure; comando assegna; uso della variabile di sistema iterazioni
all’interno di un ciclo ripeti.
Vogliamo trovare il codice più semplice per riprodurre una piastrella tipo le classiche finestrelle a vetri, come in figura:
Vogliamo inoltre avere la possibilità di cambiare i parametri significativi.
Cominciamo
a scomporre il compito in sottoproblemi più semplici. Innanzitutto notiamo una
simmetria che ci permette di scomporre la piastrella in quattro moduli, che
possiamo chiamare bersaglio:
A sua volta bersaglio può essere costruito iterando la sequenza:
Costruiamo così le due procedure:
Per Quadrato :Lato
ripeti 4 [ a :Lato d 90]
Fine
Per Sposta :Passo
su d 90 a :Passo s 90 a :Passo giu
Fine
Ora la parte più difficile: dobbiamo costruire la procedura che costruisce il bersaglio. Innanzitutto individuiamo i parametri che vogliamo poter variare:
Poiché la procedura è piuttosto complessa, la costruiremo innanzitutto per il caso in figura, e solo successivamente la esprimeremo in funzione delle grandezze variabili.
Il nucleo della procedura è costituito da un ciclo ripeti, in cui per 4 volte disegnamo un quadrato e poi spostiamo la tartaruga di 8 pixel. Il lato del quadrato deve essere ogni volta 2*8 pixel più piccolo. Possiamo allora partire da un lato immaginario di 16 pixel più grande del primo lato vero, e usare la variabile iterazioni all’interno del ripeti per ottenere questa sequenza:
iterazioni |
lato |
come ottenerlo |
1 |
148 |
164 - 1*16 |
2 |
132 |
164 - 2*16 |
3 |
116 |
164 - 3*16 |
4 |
100 |
164 - 4*16 |
Come abbiamo ottenuto 164? E’ 100 + 4*16. Scriviamo così la procedura:
Per Bersaglio
assegna "Partenza 100 + 4 * 2
* 8
ripeti 4 [ quadrato :partenza - 2
* iterazioni * 8
sposta 8]
Fine
Sarà poi utile riportare la tartaruga all’origine: basta fare uno sposta di 4 passi all’indietro.
Per Bersaglio
assegna "Partenza 100 + 4 * 2
* 8
ripeti 4 [ quadrato :partenza - 2
* iterazioni * 8
sposta 8]
sposta
-4*8
Fine
Funziona! Ora, con molta attenzione, dobbiamo sostituire ai numeri le rispettive variabili:
Per Bersaglio :N :Passo :Piccolo
assegna "partenza :Piccolo +
2 * :N * :Passo
ripeti :N [ Quadrato :Partenza - 2
* iterazioni * :Passo
Sposta :Passo]
Sposta -:N*:Passo
Fine
Proviamo bersaglio 4 8 100. Dovremmo riottenere la stessa figura di prima. Infine la nostra piastrella sarà data dalla procedura:
Per Piastrella :N :Spazio :Piccolo
ripeti 4 [Bersaglio :N :Spazio
:Piccolo
d 90]
Fine
Proviamo Piastrella 3 5 50
Dovremmo ottenere questa figura:
Infine, ecco tutto il codice che costituisce la libreria per la piastrella:
Per Quadrato :Lato ripeti 4 [ a :Lato d 90] Fine Per Sposta :Passo su d 90 a :Passo s 90 a :Passo giu Fine Per Bersaglion :N :Passo :Piccolo assegna "Partenza 100 + 2 * 4 * 8 ripeti 4 [ Quadrato :Partenza - 2 * 4 * 8 Sposta 8] Sposta -4*8 Fine Per Bersaglio :N :Passo :Piccolo assegna "Partenza :Piccolo + 2 * :N * :Passo ripeti :N [ Quadrato :Partenza - 2 * iterazioni * :Passo Sposta :Passo] Sposta -:N*:Passo Fine Per Piastrella :N :Spazio :Piccolo ripeti 4 [Bersaglio :N :spazio :Piccolo d 90] Fine
Se lo incolliamo in un file di testo con il nome piastrella.lgi, si può caricare in LOGO.
Buon lavoro!