In informatica ci sono sempre più modi per fare qualcosa, a volte si tratta di cercare il modo più efficiente per quel particolare problema, altre volte si tratta di trovare il sistema più efficiente per quella particolare architettura.
Creare un programma per disegnare un quadrato si presta molto bene a mostrare questo.
Lo si può provare anche facendo provare a disegnare un quadrato su un foglio a quadretti con una matita. Ci sono quattro angoli e ciascuno comincerà da un angolo differente. La prima direzione per tracciare il primo lato potrà essere in verticale ma anche in orizzontale. E poi verso l’alto o verso il basso, verso destra o verso sinistra (più naturale per i mancini), e poi qualcuno ama tracciare linee solo verticali e quindi ruoterà il foglio e non la mano e così anche per chi si sente più sicuro solo sulle righe orizzontali. E poi ci sarà anche chi traccerà prima due rette parallele e poi le altre perpendicolari.
Tanti approcci diversi per lo stesso risultato, un quadrato sarà sempre un quadrato qualsiasi approccio si scelga e così anche per un algoritmo che disegna un quadrato, ci possono essere approcci differenti, istruzioni differenti disposte in modo differente in numero differente, ma il risultato sarà sempre e comunque il disegno di un quadrato.
Perché il quadrato?
Il quadrato è riconoscibile, semplice, immediato, familiare, basico. Porta con sé alcune caratteristiche che lo rendono interessante per manifestare alcuni costrutti logici come: la ripetizione del gesto, l’andamento circolare del disegno che riporta direttamente al ciclo; il cambio di direzione sempre nello stesso verso; lunghezze e angoli, e quindi valori, sempre uguali.
L’algoritmo del quadrato è scalabile, con l’introduzione di una sola variabile è possibile trasformarlo in un algoritmo generale per il disegno di un qualsiasi poligono regolare e questo, trovo, che sia la potenza degli algoritmi, è la cosa che più mi ha affascinato all’inizio del mio percorso da programmatrice, anzi ancora prima, quando guardavo chi programmava per imparare. Partire da uno specifico caso per arrivare ad una possibile generalizzazione. L’essenza della programmazione è proprio tutta qui, studiare un caso particolare per poterne replicare l’algoritmo su casi diversi con caratteristiche comuni. Il parametro, o i parametri, necessari alla procedura, alla funzione determinano il risultato finale, il prodotto della funzione.
Per me è semplicemente magia, anche ora che so come ci si arriva, anche ora che immagino costrutti e funzioni dietro qualsiasi processo, questo è ancora magia, quella dei bambini di fronte alle cose belle. E prima di qualsiasi altra cosa vorrei riuscire a trasmettere questo stupore ai bambini, vorrei che lo conservassero il più a lungo possibile.
Il quadrato unplugged – quattro passi per quattro volte
Lo spostamento in avanti è di una casella per volta.
La rotazione è sul posto.
Si ritorna nella posizione iniziale con la direzione iniziale.
Si ripete quattro volte.
Il quadrato con Scratch – dal quadrato al poligono
L’algoritmo che disegna il quadrato è quello di destra, vengono passati alla procedura due parametri: lati e passi. Con lati si definisce il numero dei lati necessari e con passi la lunghezza del lato.
A sinistra la preparazione con le coordinate di partenza e la direzione di partenza, il blocco di richiamo della procedura con il valore per i parametri, 4 per i lati e 100 per i passi.
E’ evidente come modificando il numero dei lati si possa ottenere un qualsiasi poligono regolare fino ad ottenere una figura paragonabile al cerchio.
Il quadrato con LibreLogo – dal quadrato al poligono con lettere
PENUP
FONTSIZE 20
TO disegnaPoligono nLati parola
iCount = 0
REPEAT nLati [
REPEAT len(parola) [
FORWARD 20
LABEL parola[iCount]
iCount = iCount + 1
]
RIGHT 360/nLati
iCount = 0
]
END
disegnaPoligono 4 “quadrato”
L’istruzione PENUP toglie la penna, in questo modo non verrà tracciata alcuna linea.
FONTSIZE è l’altezza del font che verrà utilizzato per “disegnare” la figura.
Le parole chiave TO e END racchiudono le istruzioni della procedura chiamata disegnaPoligono a cui vengono passati i parametri nLati, il numero dei lati del poligono, e parola, la parola che verrà utilizzata per disegnare il lato.
iCount è una variabile contatore.
L’istruzione REPEAT è il ciclo per disegnare il poligono, al suo interno un altro ciclo sulla lunghezza di parola per scrivere lettera per lettera, dopo aver scritto ogni lettera ci si sposta della misura del font e si incrementa di uno il contatore.
Dopo aver ruotato si riporta il contatore a 0.
disegnaPoligono richiama la procedura a cui vengono passati i parametri.
Per un effetto straniante provare a passare una parola che non corrisponda alla figura geometrica, ad esempio passare 6 per il numero dei lati e passare la parola cerchio.
Il quadrato con micro:bit – tutti dietro al led tartaruga
In questo caso sono stati utilizzati i blocchi dell’estensione Turtle (logo di micro:bit).
Il quadrato con il drone Tello Edu – XY, XZ, YZ o XYZ
E perché non sperimentare sui tre assi?