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:

  1. disegna un quadrato con un certo lato (variabile :Lato)
  2. spostati di un certo numero (variabile :passo) di pixel a destra e in alto

 

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:

  1. il numero di quadrati (variabile :N). Nel disegno vale 4.
  2. La distanza tra i quadrati (variabile :Passo). Nel disegno vale 8 pixel.
  3. La dimensione dell’ultimo quadrato da disegnare, quello più interno (variabile :Piccolo). Nel disegno vale 100 pixel.

 

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!