Piccolo manuale di LibreLogo/Incapsulare: differenze tra le versioni
Contenuto cancellato Contenuto aggiunto
Riga 62:
<span style="color:#000000;">Se provassimo ad utilizzarla in un altro </span><span style="color:#000000;">''script''</span><span style="color:#000000;"> allora LibreLogo darebbe un errore. </span><span style="color:#000000;">Ecco il risultato del codice precedente:</span><span style="color:#000000;"> </span>
[[File:
In realtà a noi piacerebbe controllare meglio il modo con cui vengono disegnati i quadrati, per esempio determinando la lunghezza del lato. Questo si può fare assegnando degli argomenti alla subroutine:
Riga 71:
Qui, dopo la dichiarazione del nome della subroutine, abbiamo introdotto l'argomento <span style="color:#ff00cc;">'''LATO'''</span>. Nel codice successivo alla subroutine, l'istruzione <span style="color:#ff0000;">'''QUADRATO'''</span> viene invocata con un argomento, pari a <span style="color:#ff00cc;">'''100'''</span> la prima volta e <span style="color:#ff00cc;">'''50'''</span> la seconda.
Ricapitolando, quando si fa eseguire il codice, premendo il tasto PLAY [[File:PlayLO.png|senza_cornice]], LibreLogo esegue le prime tre istruzioni, poi “impara” tutte quelle contenute nella subroutine <span style="color:#ff0000;">'''QUADRATO'''</span><nowiki>; quindi esegue le istruzioni sottostanti, invocando </nowiki><span style="color:#ff0000;">'''QUADRATO'''</span> con un valore <span style="color:#ff00cc;">'''LATO'''</span> di <span style="color:#ff00cc;">'''100'''</span>,
|-
|
Riga 103:
Ecco il risultato:
[[File:
Così siamo liberi di invocare la nostra nuova funzione QUADRATO ogni volta che ne abbiamo bisogno, specificando liberamente la dimensione: QUADRATO 10, QUADRATO 30 o quello che vogliamo. Ora, a
{| class="wikitable"
|-
Riga 113:
SHOWTURTLE
TO QUADRATO LATO
ANGOLO = 90 ; angoli
PENUP ; alzo la penna
FORWARD LATO/2 ; mi dirigo su lato che ho di fronte
Riga 127:
FORWARD LATO ; disegno il quarto lato
RIGHT ANGOLO ; giro a destra
FORWARD LATO/2 : ; disegno la metà rimanente
RIGHT ANGOLO : ; giro a destra (per
PENUP ; alzo la penna
FORWARD LATO/2 ; torno nel centro del quadrato
LEFT ANGOLO*2 ; mi rigiro nella direzione in cui mi trovavo
END
QUADRATO 100
Riga 142:
[[File:IncapsulareLO_04.svg|380px|senza_cornice]]
La tartaruga è rivolta a destra perché per disegnare il secondo quadrato ha viaggiato da sinistra verso destra. Per rendere il comportamento dell'istruzione RETTANGOLO proprio identico a quello di SQUARE si dovrebbe intervenire anche sul colore del riempimento, mentre con il codice che abbiamo scritto questo non accade. Potremmo fare anche questo, utilizzando le istruzioni FILL e
Si può obiettare che tutto questo lavoro sia inutile, visto che serve a fare una cosa che in LibreLogo già esiste. L'intento è primariamente pedagogico: le cose si spiegano bene a partire da esempi semplici; inoltre, è interessante constatare come si possano costruire da soli parti di un sistema che esistono già, perché questo ci aiuta ad acquistare fiducia e, al tempo stesso, a rendersi conto che il sistema che stiamo usando non è chiuso e composto di una materia inaccessibile; infine, ci rendiamo conto di poter contribuire al sistema stesso, magari anche costruendo delle varianti di istruzioni preesistenti – ad esempio, potrebbe esserci utile una versione dell'istruzione SQUARE che oltre alla dimensione del lato accetti anche il colore con il quale questo debba essere dipinto, o magari anche il colore del contorno. Qui si introduce un'altra generalizzazione: possiamo definire subroutine con più di un argomento. Per esempio possiamo provare a definire un'istruzione rettangolo, che possa essere invocata così: RETTANGOLO A B, dove A rappresenta il lato orizzontale e B quello
Ovviamente, se può avere senso la creazione di varianti di istruzioni esistenti, a
{| class="wikitable"
|-
Riga 225:
|}
Il codice della subroutine <span style="color:#ff0000;">'''CASA'''</span> è lo stesso di prima eccetto per la presenza dell'argomento <span style="color:#ff00ff;">'''LATO'''</span>. Nello script l'istruzione <span style="color:#ff0000;">'''CASA '''</span>viene chiamata tre volte, sempre con dimensioni diverse. La posizione viene controllata mediante sequenze di istruzioni del tipo '''PENUP POSITION [150, 400] HEADING 0 PENDOWN''': alzo la penna, mi trasferisco nel punto di coordinate [150, 400] (
[[File:IncapsulareLO_05.svg|380px|senza_cornice]]
Non c'è limite alla fantasia. Non è difficile scrivere una subroutine che disegni un albero e usarla per arricchire così il paesaggio. Lo proponiamo come esercizio dopo, ma prima vediamo un altro esempio più avanzato, intendendo con questo che potrebbe essere utilizzato in un contesto di scuola secondaria superiore (la descrizione che segue è molto dettagliata, chi non è interessato a un contesto del genere e non ha dimestichezza con questo livello di
Intanto l'esercizio utilizza, in un contesto un po' più complicato, i tre costrutti fondamentali del software che abbiamo sin qui introdotto: le variabili e le operazioni fra di esse, le ripetizioni di sequenze di istruzioni e l'incapsulamento di sezioni di codice nelle subroutine. Abbiamo mantenuto l'evidenziazione cromatica che abbiamo usato in alcuni degli esempi precedenti, per aiutare la lettura del codice. Nella prima sezione (in nero) si eseguono le operazioni preparatorie: cancellazione del foglio, tartaruga a casa, tartaruga invisibile (sarebbe troppo “invasiva” su un disegno più articolato come questo), penna alzata; inoltre si fissano i parametri necessari per iniziare, ovvero numero dei poligoni che dovranno comporre la successione, e raggio dei poligoni, espresso in punti. Poi viene il codice della subroutine '''POLIGONO''', con le istruzioni in blu, eccetto il nome della subroutine in rosso e i suoi argomenti in viola. La subroutine '''POLIGONO''' richiede 5 argomenti: X0P e Y0P sono le coordinate del centro del poligono, che possiamo quindi piazzare dove vogliamo; N è il numero di lati che deve avere il poligono; R è il raggio del poligono. All'interno della subroutine '''POLIGONO''' si sviluppa la geometria. Si calcola l'ampiezza degli angoli interni '''AI''', l'ampiezza degli angoli supplementari degli angoli '''AI''', che chiamiamo '''A''' e la lunghezza dei lati '''L'''. Qui troviamo una novità, anzi due: '''SIN''' e '''ABS''' sono funzioni matematiche e '''PI''' è una costante. Scopriamo quindi che LibreLogo “sa” un bel po' di matematica! '''PI''' è una variabile speciale, per meglio dire una costante, la più importante della matematica: il '''π''' (pi greco), di cui LibreLogo esprime un'approssimazione con 15 cifre decimali (provare ad eseguire l'istruzione '''PRINT PI''')<ref>Ricordiamo che '''π''' rappresenta il rapporto fra la misura della circonferenza e il
{| class="wikitable"
|-
Riga 247:
'''NP = 20<nowiki>; </nowiki>numero poligoni'''
'''R <nowiki>= 100</nowiki><nowiki>; </nowiki>raggio poligoni – tengo
<div style="color:#000080;">'''<nowiki>; </nowiki>subroutine POLIGONO'''</div>
<div style="color:#000080;">'''<nowiki>; </nowiki>argomenti:X0P: X del centro del poligono'''</div>
|