Piccolo manuale di LibreLogo/Appendice
Appendice
modificaQui raccogliamo i listati dei codici usati per costruire alcune delle figure usate nel manuale. Naturalmente, questi codici talvolta possono contenere dei costrutti che non sono stati ancora affrontati nel punto del testo cui appare la figura corrispondente. Non importa se non si capisce tutto subito, il lettore può sempre tornarci successivamente, quando sarà più esperto. Li mettiamo a disposizione perché può essere interessante e utile per vedere che cosa si può fare in pratica.
I listati sono commentati. In LibreLogo i commenti si ottengono preponendo un punto e virgola: in qualsiasi riga, tutto quello che segue il punto e virgola non viene eseguito ma serve solo a rendere più facile da leggere il codice. Questo significa che se salviamo il codice di una di queste figure, così com'è, con tutti i commenti, questo può essere eseguito per produrre la figura.
È molto importante inserire nel codice commenti chiari e accurati, sia per rileggerlo più facilmente molto tempo dopo, sia per facilitare la collaborazione con altre persone. Scrivendo codice, specie quando si è acquisita una certa confidenza, è facile farsi prendere la mano, cercando di arrivare quanto più velocemente al risultato desiderato. È bene invece controllarsi, imponendosi di documentare adeguatamente il lavoro man mano che si procede. Tanto più si aspetta quanto più sarà faticoso andare a commentare il lavoro fatto, sia per la mole che per la maggiore difficoltà a ricordare i particolari. Naturalmente questo vale per il codice destinato a durare un certo tempo e ad essere condiviso, come potrebbe essere il caso di quello scritto per costruire alcune delle figure di questo manuale. Non certo per piccoli frammenti estemporanei.
Il codice riportato nelle seguenti pagine è un po' al limite. Ma lo abbiamo commentato per mostrare la buona pratica, ivi inclusa l'apposizione di un'intestazione che riporti anche il nome dell'autore, il numero della versione e la data. Intestazione che andrà aggiornata con eventuali successive modifiche.
Figura 1
modifica; FIGURA 1 ; Le coordinate della pagina ; Versione 1. ; A.R. Formiconi ; 25 luglio 2016 ; Versione scritta come viene, senza particolari ottimizzazioni ; Predispone tutto CLEARSCREEN HOME A = 200 ; lato corto del rettangolo che rappresenta la pagina B = 282 ; lato lungo FILLCOLOR [230, 230, 230] ; fissa a grigio chiaro il colore di riempimento PENUP FORWARD B/2 ; si dirige verso l'angolo in alto a sinistra HEADING 9h FORWARD A/2 HEADING 3h ; e punta verso destra (ore 3) PENDOWN ; disegna il rettangolo, ruotando in senso orario FORWARD A RIGHT 90 FORWARD B RIGHT 90 FORWARD A FILL ; riempie il rettangolo PENUP RIGHT 90 FORWARD B ; si posiziona nell'angolo in alto a sinistra del foglio ; ripete il giro marcando gli angoli e ponendo le scritte HEADING 3h ; angolo alto destro FILLCOLOR [50, 50, 50] ; fissa un grigio più scuro per i cerchietti FORWARD A PENDOWN CIRCLE 5 PENUP FORWARD 10 LEFT 90 FORWARD 15 LABEL “[PAGESIZE[0], 0]” BACK 15 RIGHT 90 BACK 10 RIGHT 90 ; angolo basso destro FORWARD B PENDOWN CIRCLE 5 PENUP FORWARD 15 LEFT 90 FORWARD 30 LEFT 90 LABEL “[PAGESIZE[0],PAGESIZE[1]]” LEFT 90 FORWARD 30 RIGHT 90 FORWARD 15 RIGHT 180 RIGHT 90 ; angolo basso sinistro FORWARD A PENDOWN CIRCLE 5 RIGHT 90 PENUP BACK 15 LABEL “[0, PAGESIZE[1]]” FORWARD 15 FORWARD B ; angolo alto sinistro PENDOWN CIRCLE 5 PENUP FORWARD 15 LEFT 90 FORWARD 10 RIGHT 90 LABEL “[0, 0]” BACK 15 PENDOWN HIDETURTLE ; mando la tartaruga a dormire
Figura 2
modifica; FIGURA 2 ; L'effetto dell'istruzione POSITION e le coordinate della pagina ; Versione 1. ; A.R. Formiconi ; 25 luglio 2016 ; Versione scritta come viene, senza particolari ottimizzazioni ; Predispone tutto CLEARSCREEN HOME A = 200 ; lato corto del rettangolo che rappresenta la pagina B = 282 ; lato lungo FILLCOLOR [230, 230, 230] ; fissa a grigio chiaro il colore di riempimento PENUP FORWARD B/2 ; si dirige verso l'angolo in alto a sinistra HEADING 9h FORWARD A/2 HEADING 3h ; e punta verso destra (ore 3) PENDOWN ; disegna il rettangolo, ruotando in senso orario FORWARD A RIGHT 90 FORWARD B RIGHT 90 FORWARD A FILL ; riempie il rettangolo PENUP RIGHT 90 FORWARD B ; si posiziona nell'angolo in alto a sinistra del foglio ; ripete il giro marcando gli angoli e ponendo le scritte HEADING 3h ; angolo alto destro FILLCOLOR [50, 50, 50] ; fissa un grigio più scuro per i cerchietti FORWARD A PENDOWN CIRCLE 5 PENUP FORWARD 10 LEFT 90 FORWARD 15 LABEL “[PAGESIZE[0], 0]” BACK 15 RIGHT 90 BACK 10 RIGHT 90 ; angolo basso destro FORWARD B PENDOWN CIRCLE 5 PENUP FORWARD 15 LEFT 90 FORWARD 30 LEFT 90 LABEL “[PAGESIZE[0],PAGESIZE[1]]” LEFT 90 FORWARD 30 RIGHT 90 FORWARD 15 RIGHT 180 RIGHT 90 ; angolo basso sinistro FORWARD A PENDOWN CIRCLE 5 RIGHT 90 PENUP BACK 15 LABEL “[0, PAGESIZE[1]]” FORWARD 15 FORWARD B ; angolo alto sinistro PENDOWN CIRCLE 5 PENUP FORWARD 15 LEFT 90 FORWARD 10 RIGHT 90 LABEL “[0, 0]” BACK 15 PENDOWN ; disegna il percorso della tartaruga in seguito all'istruzione POSITION [350,320] HOME ; mi posiziono al centro PENUP ; senza disegnare... POSITION [298, 430] ; vado dove voglio piazzare... HEADING 0 ; l'etichetta con le... LABEL “[298, 421]” ; coordinate del centro HOME ; torno al centro e... PENDOWN ; disegno... CIRCLE 5 ; il cerchietto centrale FILLCOLOR “green” ; fisso il colore verde per la tartaruga, che mostrerò POSITION [350,320] ; applico POSITION [350, 320] P = POSITION ; memorizzo tale posizione... H = HEADING ; e direzione PENUP ; alzo la penna POSITION [300,320] ; mi sposto un po' per piazzare... HEADING 0 ; orientata correttamente LABEL “[350, 320]” ; l'etichetta POSITION P ; ritorno alla posizione e direzione HEADING H ; per lasciarvi visibile la tartaruga
Figura 3
modifica; FIGURA 3 ; I riferimenti per l'istruzione HEADING ; Versione 1. ; A.R. Formiconi ; 25 luglio 2016 ; Versione scritta in maniera più ordinata e strutturata, facendo uso delle “subroutine” ; La strutturazione del software di questo tipo consente di rendere il codice più modulare ; e più mantenibile ; Prima vengono le subroutine e alla fine il programma vero e proprio. Prima vanno messi ; i frammenti più elementari, in maniera che LibreLogo li legga per primi. Questo serve ; perché quando nel codice viene citata una subroutine, questa deve essere già stata ; analizzata da LibreLogo. ; Subroutine BR per disegnare un segmento lungo 10 pt dalla posizione e lungo la ; direzione corrente senza muoversi (come risultato finale) ; Parametri: ; P: posizione corrente ; H: direzione corrente TO BR P H FORWARD 10 POSITION P HEADING H END ; Subroutine TARROW per disegnare la punta di una freccia TO TARROW P = POSITION H = HEADING LEFT 160 BR P H RIGHT 160 BR P H END ; Subroutine LBA scrivere il testo contenuto in T in vetta al segmento ; di lunghezza L e ruotato dell'angolo A ; Parametri: ; L: lunghezza del segmento ; A: angolo di rotazione del segmento ; T: testo da scrivere nell'etichetta TO LBA L A T PENUP FORWARD L/10 + L/5 * SIN A*PI/180 H = HEADING HEADING 0 LABEL T PENDOWN END ; Subroutine LB scrivere il testo contenuto in T in una posizione determinata in ; coordinate polari rispetto alla posizione corrente, mediante la ; distanza L e l'angolo A ; Parametri: ; L: distanza ; A: angolo ; T: testo da scrivere nell'etichetta TO LB L A T P0 = POSITION PENUP S = SIN A*PI/180 C = COS A*PI/180 POSITION [P0[0] + L * C, P0[1] - L * S] HEADING 0 LABEL T POSITION P0 HEADING 0 PENDOWN END ; Subroutine ARROW per disegnare, a partire dalla posizione corrente, ; una freccia di lunghezza L, inclinata di un angolo A, e in vetta una ; etichetta con il testo contenuto in T ; Parametri: ; L: lunghezza della freccia ; A: angolo di rotazione della freccia ; T: testo da scrivere nell'etichetta TO ARROW P0 A0 L A T PENDOWN HEADING A FORWARD L TARROW LBA L A T PENUP POSITION P0 HEADING A0 PENDOWN END ; Questo è il programma vero e proprio che, come si vede, grazie al ricorso ; alle subroutine, è abbastanza conciso. CLEARSCREEN ; cancello il foglio HOME ; mando a casa la tartaruga HIDETURTLE ; faccio il disegno senza vedere la tartaruga FILLCOLOR [230, 230, 230] ; fisso il riempimento a un grigio scuro CIRCLE 5 ; disegno un cerchietto nella posizione centrale P0 = POSITION ; memorizzo tale posizione iniziale... A0 = HEADING ; e anche la direzione iniziale L = 150 ; faccio la freccia lunga 150 pt A = 60 ; e la voglio inclinata di 60° PENSIZE 1 ARROW P0 A0 L 0 “HEADING 0” ; freccia verticale PENSIZE 0.5 ARROW P0 A0 L A “HEADING 30” ; freccia a 60° PENSIZE 1 ARROW P0 A0 L 90 “HEADING 90” ; freccia orizzontale PENSIZE 0.5 ELLIPSE [L/3, L/3, 0, A, 3] ; arco di cerchio piccolo LB L/4 A “30°” ; etichetta “30°” ELLIPSE [L*2, L*2, 0, 90, 3] ; arco di cerchio grande
Figura 4
modifica; FIGURA 4 ; Esempi di spessore del tratto ; Versione 1. ; A.R. Formiconi ; 25 luglio 2016 ; In questo esempio si illustra l'impiego dell'istruzione REPEAT, per realizzare i “cicli” (“loop”) CLEARSCREEN HOME RIGHT 90 PENCOLOR “BLACK” REPEAT 10 [ PENWIDTH REPCOUNT FORWARD 100 PENUP FORWARD 50 HEADING 0h LABEL “PENWIDTH ” + STR REPCOUNT-1 HEADING 3h BACK 50 PENUP RIGHT 90 FORWARD 20 RIGHT 90 FORWARD 100 LEFT 180 PENDOWN ] PENWIDTH 0 HIDETURTLE