Piccolo manuale di LibreLogo/Testo completo - Wikibooks, manuali e libri di testo liberi\nPiccolo manuale di LibreLogo/Testo completo\nAutore: Andreas R. Formiconi\nVai ai contenuti >>\nFase di sviluppo:Piccolo manuale di LibreLogo\n2.1 La grafica di LibreLogo in Writer\n3 Due capitoli di Mindstorm di S.Papert da leggere...\n4 Comandi di movimento e disegno\n4.1 I comandi fondamentali\n4.1.4 PENUP PENDOWN\n4.2 I codici RGB per i colori\n4.3 Altri comandi\n4.3.4 Arrotondamento vertici, archi\n6 Lo spazio della pagina\n6.1 PRINT POSITION\n6.2 PRINT PAGESIZE\n7 Altri comandi grafici\n7.1 PENWIDTH (spessore tratto)\n7.2 PENJOINT (forma vertici)\n7.3 PENCAP (forma estremità segmenti)\n7.4 PENSTYLE (tratteggio segmenti)\n7.5 FILLSTYLE (tratteggio superfici)\n8 Conclusione capitolo\n9 Cicli - Loops\n10 Operazioni aritmetiche\n11 Un accorgimento per trovare gli errori – la tartaruga troppo veloce!\n13 Subroutine – Funzioni – Procedure\n15 IF – AND, OR, NOT\n16.1 Figura 1\n16.2 Figura 2\n16.3 Figura 3\n16.4 Figura 4\nQuesto piccolo manuale nasce per la necessità di fornire supporto di studio e consultazione nell'insegnamento “Laboratorio di Tecnologie Didattiche” al V anno del Corso di Laurea Magistrale a ciclo unico “Scienze della Formazione Primaria” e nell'insegnamento “Laboratorio di Gestione dei Processi Formativi” al II anno del Corso di Laurea Magistrale “Scienze dell'Educazione degli Adulti, della Formazione Continua e Scienze Pedagogiche”, presso l'Università di Firenze, e nell'insegnamento “Informatica” al I anno del Corso di Laurea Magistrale “Innovazione Educativa e Apprendimento Permanente” presso l'università telematica Italian University Line. Il manuale guida all'impiego del linguaggio Logo nella versione LibreLogo implementata all'interno del word processor Writer della suite di programmi di produttività personale LibreOffice. LibreLogo è un plugin disponibile di default in Writer a partire dalla versione 4.0 di LibreOffice. È stato scritto in linguaggio Python da László Németh. La documentazione disponibile si trova in http://librelogo.org, da dove, in particolare, si può scaricare una guida dei comandi di LibreLogo in italiano. Per il resto, sfortunatamente e per quanto è a mia conoscenza sino ad oggi, la documentazione disponibile è tutta in ungherese, principalmente sotto forma di un manualetto conciso scritto dallo stesso László Németh e da un manuale esteso scritto da Lakó Viktória. È a quest'ultimo lavoro che, in una prima fase si è ispirato il presente piccolo manuale, senza tuttavia esserne una traduzione, per vari motivi. In primo luogo io non so l'ungherese e non posso quindi pretendere di poterne fare una vera traduzione e i tempi e le circostanze non mi consentono di avvalermi di un traduttore. Posso tuttavia seguirne le tracce, aiutandomi con i codici (anche se in ungherese quelli si possono imparare), le figure e Google Translate. Del resto, alla fine una traduzione pedissequa non sarebbe nemmeno desiderabile perché viene naturale riformulare il materiale in funzione degli obiettivi specifici e della propria visione della materia. Inoltre, nel corso della traduzione, mi è capitato sempre più spesso di seguire la traccia dei miei pensieri e, alla fine, è stato inevitabile tornare alla fonte primigenia, ovvero al testo con cui Seymour Papert descrisse per la prima volta compiutamente il pensiero che aveva dato origine a Logo, Mindstorms. È così che ho introdotto la traduzione di due capitoli di Mindstorms: il secondo, “Mathofobia: the Fear of Learning”, e il terzo, “Turtle Geometry: A Mathematics Made for Learning”.\nL'immersione profonda nel pensiero di Papert ha poi prodotto un fenomeno interessante. Nei numerosi passaggi dove Papert insiste sulla necessità di proporre agli studenti nuove idee matematiche facendo leva sulle conoscenze già possedute (non solo scolastiche) dagli studenti e sul loro coinvolgimento personale, sempre più spesso mi venivano in mente le lezioni di Emma Castelnuovo, con le quali si impiegano materiali semplici per introdurre tanti concetti matematici.\nHo capito, insomma, che partendo da un materiale semplicissimo (sbarrette, spaghi, elastici ecc.) si potevano costruire i vari capitoli della geometria, motivando i ragazzi a partire da problemi reali. Bastava variare qualche elemento, lasciandone invariati altri, per stimolare delle problematiche anche di alta matematica. Bastava saper guardare attorno a noi perché si aprissero nuove vie del pensiero e si arrivasse, quasi da sé, a formare negli allievi uno spirito matematico.\nQuesto pensiero è in accordo completo con quello di Papert. L'unica differenza è costituita dal contesto nel quale i due autori vanno a ricercare l'interesse e il coinvolgimento degli allievi. Si può dire che la geometria della Tartaruga è un analogo dei materiali fisici usati da Emma Castelnuovo. Le due visioni e le pratiche che ne scaturiscono non sono affatto in opposizione bensì complementari. In questa prospettiva, con LOGO si continua e si estende il lavoro (necessariamente) iniziato con i materiali fisici mantenendo lo stesso identico approccio pedagogico.\nTutte le figure sono state prodotte con LibreLogo stesso. I codici, adeguatamente commentati, di alcune delle figure sono listati in appendice, come esempio e spunto per ulteriori sviluppi. Nel momento in cui scrivo queste righe ho completato solo il primo capitolo ma trovo utile rendere il lavoro disponibile anche per ricevere eventuali riscontri che potrebbero essere utili per il resto.\n↑ Seymour Papert (1980), Mindstorms, Children, Computers, and Powerful Ideas. New York: Basic Books.\n↑ E. Castelnuovo, L'officina matematica – ragionare con i materiali, p. 38, Edizioni la Meridiana, 2008. In questo libro si riportano alcune lezioni fatte da Emma Castelnuovo presso la Casa-laboratorio di Cenci (Franco Lorenzoni), fra il 2002 e il 2007. La ricerca didattica di Emma Castelnuovo ha riguardato molto l'impiego di materiali semplici per lo studio attivo della matematica.\nLibreLogo è l'unione del celebre programma Logo e il word processor Writer, che è l'equivalente di Word. Word fa parte della ben nota suite Microsoft Office mentre Writer fa parte di LibreOffice, che è software libero. Logo è stato creato negli anni '70 da Seymour Papert per facilitare l'insegnamento della matematica mediante il computer. Seymour Papert è un matematico nato in Sudafrica nel 1928. Ha studiato matematica a Johannesburg e poi a Cambridge. Ha fatto ricerca in una varietà di luoghi fra cui l'università di Ginevra, fra il 1958 e il 1963. È in questo periodo che ha lavorato con Jean Piaget, diventando uno dei suoi collaboratori preferiti – interessante connubio fra un matematico e un pedagogista. Nel 1963 è stato ricercatore presso il MIT (Massachusetts Institute of Technology) dove, nel 1967, è stato nominato codirettore del celebre MIT Artificial Intelligence Laboratory dal direttore fondatore, Marvin Minsky. Lo stesso laboratorio dove pochi anni dopo avrebbe operato Richard Stallman, ideatore del concetto di software libero e autore dei primi fondamentali componenti software su cui, negli anni '90, si sarebbe basato il software operativo Linux. Papert è famoso per avere inventato Logo, un linguaggio che consente di creare grafica manovrando il movimento di una “tartaruga” mediante opportuni comandi. Nella prima versione, ideata negli anni '70, la tartaruga era in realtà un robot che disegnava mentre si muoveva.\nSeymour Papert mostra una delle prime versioni di Logo, quando era ancora un vero e proprio robot per disegnare.\nQuando i computer arrivarono nelle case, negli anni '80, Logo divenne un software e come tale è stato descritto da Seymour Papert in Mindstorms. Per capire la valenza pedagogica del pensiero di Papert leggiamo questo brano, tratto proprio da Mindstorms (pp. 7-8):\nDa Piaget prendo il modello del bambino come costruttore delle proprie strutture mentali. I bambini hanno il dono innato di imparare da soli e sono in grado di assumere un'enorme quantità di conoscenza grazie a un processo che io chiamo “apprendimento piagetiano”, o “apprendimento senza insegnamento”. Per esempio, i bambini imparano a parlare, imparano la geometria intuitiva necessaria a muoversi nel loro ambiente, e imparano abbastanza logica e retorica per cavarsela con i genitori – tutto questo senza che venga insegnato loro niente. Ci dobbiamo domandare come mai vi sono cose che si imparano così presto e spontaneamente mentre altre vengono apprese molti anni dopo o non vengono apprese affatto, se non con l'imposizione di un'istruzione formale. Se prendiamo sul serio l'immagine del "bambino costruttore" allora siamo sulla buona strada per trovare una risposta a questa domanda. Tutti i costruttori hanno bisogno di qualche tipo di materiale per costruire qualcosa. Dove il mio pensiero diverge da quello di Piaget è nel ruolo che attribuisco al contesto culturale come fonte di tale materiale. In alcuni casi, il contesto ne fornisce in abbondanza, facilitando così l'apprendimento costruttivo piagetiano. Per esempio il fatto che così tante cose importanti (coltelli e forchette, madre e padre, scarpe, calze) compaiano usualmente in coppia rappresenta un "materiale" per la costruzione di un senso intuitivo di numero. Ma in molti casi dove Piaget invocherebbe la complessità o la natura formale di un concetto per spiegare la lentezza del suo sviluppo, io trovo che il fattore critico sia piuttosto la carenza dei materiali che avrebbero reso il concetto semplice e concreto.\nNegli anni '90 Logo circolava come un programma installabile da un floppy disk. Una volta lanciato produceva uno schermo nero sul quale si potevano scrivere delle istruzioni in sequenza, una dietro l'altra. Le istruzioni rappresentavano i movimenti da impartire alla tartaruga sulla schermo. Poi, con un comando speciale, si poteva “eseguire” la sequenza dei comandi, e così la tartaruga si muoveva tracciando un disegno sullo schermo. Logo ha avuto una grande risonanza come metodo sperimentale per l'insegnamento della matematica e ne sono state derivate una grande varietà di versioni, arrivando fino a generalizzazioni come l'attuale Scratch. Tuttavia non ha avuto una grande diffusione nelle scuole e forse si può dire che ha avuto più successo con gli scolari a cui è stato offerto che con gli insegnanti. Probabilmente era troppo presto. Usare Logo vuol dire scrivere codice, un'attività estranea alla preparazione della maggior parte degli insegnanti, anche di materie scientifiche.\nOggi forse è diverso, si parla molto di coding, anche se forse non sempre con cognizione di causa. La situazione si è talmente evoluta che coding può significare tante cose diverse. Del resto, dagli anni '80 ad oggi la varietà di linguaggi di programmazione si è allargata a dismisura. La cosa più affine a Logo è Scratch, che anzi, deriva proprio da Logo. Mitchel Resnick, leader del progetto Scratch, è stato un allievo di Papert e opera sempre nel Media Laboratory del MIT. Scratch va molto oltre la produzione di grafica e consente di realizzare animazioni e videogiochi, consentendo così anche di sperimentare tecniche di programmazione piuttosto sofisticate. Un altro aspetto innovativo consiste nel fatto di essere strutturato come un servizio web e questo ha consentito di realizzare una grande comunità viva di diffusione e scambio dei programmi.\nDal punto di vista operativo Scratch si differenzia da Logo per il fatto di essere un linguaggio visuale. I comandi infatti sono costituiti da blocchi colorati che possono essere incastrati fra loro. Il programma nasce dall'esecuzione di queste sequenze di comandi uniti fra loro, come in un puzzle. È un sistema attraente che si rifa un po' all'idea del Lego, dove le istruzioni da dare al computer vengono incastrate fra loro come mattoncini. Gli incastri garantiscono che le istruzioni vengano combinate solo in modi legittimi, mettendo al riparo dai tipici e frequenti errori ortografici e sintattici in cui incorre chiunque scriva un software nel modo testuale convenzionale. Ne sono emersi tanti di linguaggi di questo tipo, oltre a Scratch, i più noti sono Snap!, Alice, Blockly, Android App Inventor, giusto per menzionarne alcuni. La figura seguente illustra la differenza fra un codice di tipo testuale e uno di tipo visuale. Il codice serve a disegnare un quadrato. A sinistra la versione in LibreLogo e a destra la versione in Snap!. In Scratch questo semplice codice sarebbe identico. Ho utilizzato Snap! per una mia certa preferenza per questo linguaggio. Snap! rappresenta un potenziamento di Scratch, che lo rende più assimilabile ad un linguaggio di uso generico, pur mantenendo la forma visuale. Fra queste caratteristiche vi è quella di consentire il salvataggio del codice in un formato standard (XML) leggibile e alterabile con un qualsiasi editore di testo. Per chi è abituato a lavorare con il software questo è un elemento molto importante. Il codice non è, come si suole dire, “ottimale”, in nessun senso. È giusto il modo che utilizza le istruzioni più semplici, le prime che si imparano, in ambedue i linguaggi. L'esempio è pensato solo per confrontare le istruzioni nei due diversi ambienti.\nUna caratteristica particolare di Scratch è quella di avere dato vita ad una vasta comunità di condivisione dei software. Questo è avvenuto grazie al fatto di essere stato concepito come un servizio web, che consente la composizione dei programmi e la possibilità di farli girare ma anche la realizzazione dell'aspetto social, destinato alla condivisione e al riuso dei programmi.\nI linguaggi visuali non portano solo vantaggi. Sono (apparentemente) facili, divertenti e colorati, l'efficacia sembrerebbe garantita ma l'evidenza scientifica non è altrettanto chiara. Esistono infatti vari studi che mostrano come i linguaggi visuali non facilitino di fatto l'apprendimento dei linguaggi “veri”. Sembra che siano vantaggiosi per capire i più semplici costrutti della programmazione, questo sì, ma gli studi dove si testano le reali capacità di comprensione di quello che si ottiene con un certo codice non mostrano differenze sostanziali fra linguaggi visuali e testuali. Particolarmente interessante è la ricerca di Colleen Lewis dove si confrontano i risultati ottenuti con Logo e con Scratch in una classe di bambini fra 10 e 12 anni: se l'apprendimento di alcuni costrutti sembra facilitato da Scratch, non si sono osservate differenze nella percezione degli scolari che, anzi, hanno mostrato un livello di autostima superiore se introdotti alla programmazione con Logo. E anche se nelle fasi iniziali i giovani mostrano di gradire gli strumenti di tipo visuale, successivamente, una volta che sono entrati in contatto con la programmazione testuale convenzionale, talvolta sono loro stessi a denunciare i limiti del coding visuale, per\nla minore potenza, ovvero per i limiti imposti alla propria creatività\nper la maggiore lentezza nella programmazione quando questa si fa più complessa\nperché questi sistemi sono “meno veri”: “se devi fare una cosa vera nessuno ti chiederà mai di codificarla con un software didattico visuale”.\nÈ sulla base di tali considerazioni che abbiamo deciso di approfondire il linguaggio Logo, quale strumento introduttivo alla programmazione. Di versioni di Logo oggi ce ne sono una quantità. Noi qui ci concentriamo su una versione che si trova normalmente nel programma di word processing Writer, incluso nella suite per ufficio LibreOffice, l'analogo del ben noto Microsoft Office. Quest'ultimo è un “prodotto proprietario”, vale a dire che l'azienda che lo produce lo vende ma senza distribuire il codice sorgente in chiaro, secondo il modello industriale convenzionale, con il quale la proprietà intellettuale è tenuta gelosamente segreta. LibreOffice invece è un software libero, e come tale è l'ideale per l'impiego in qualsiasi contesto formativo. In primo luogo perché comporta un messaggio di natura etica. Infatti il software libero è definito da quattro tipi di libertà:\nlibertà di eseguire il programma come si desidera, per qualsiasi scopo\nlibertà di studiare come funziona il programma e di modificarlo in modo da adattarlo alle proprie necessità\nlibertà di ridistribuire copie in modo da aiutare il prossimo\nlibertà di migliorare il programma e distribuirne pubblicamente i miglioramenti eventualmente apportati, in modo tale che tutta la comunità ne tragga beneficio.\nPoiché le libertà n. 2 e 4, per potere essere esercitate, richiedono la lettura del codice sorgente del software, va da sé che il software libero, per essere tale, deve necessariamente rendere disponibile il codice sorgente.\nOccorre osservare – su questo punto molti fanno confusione – che il software di tipo open source non coincide con il software libero (free software) perché manca la connotazione etica: con il software open source si assume che il codice sorgente sia disponibile in chiaro, ma non si fa menzione delle suddette quattro libertà e, in particolare, delle due specificazioni che connotano la valenza etica del free software: “in modo da aiutare il prossimo” nella terza libertà e “in modo tale che tutta la comunità ne tragga beneficio” nella quarta libertà. Il software libero è sviluppato da comunità che al più si aggregano in società non a fini di lucro. L'open source è sviluppato da attori economici privati che aderiscono al paradigma di sviluppo condiviso perché lo trovano adeguato alle proprie strategie di marketing: vi sono aziende che curano progetti open source a fianco dei tradizionali prodotti proprietari perché lo trovano conveniente per le proprie strategie di marketing. Le funzionalità di LibreOffice possono essere arricchite da numerosi plugin, ovvero componenti che aggiungono le funzionalità più diverse. Ebbene, LibreLogo è uno di questi e, dalla versione 4.0 in poi, il plugin LibreLogo è incluso di default nel programma. Ma cosa significa usare Logo in un word processor come Writer, se questo è un normale word processor mentre Logo è un linguaggio per disegnare? Semplice: con il plugin LibreLogo si possono produrre immagini che risultano integrate nel documento, come se fossero importate. È un'idea geniale, dovuta a Németh László, che ha riprodotto tutte le funzionalità di Logo all'interno di LibreOffice. In realtà le ha ulteriormente incrementate, traendo vantaggio dal linguaggio Python, con cui ha scritto il plugin. Usare LibreLogo è semplicissimo: si apre un documento in Writer, si scrive un po' di codice in linguaggio Logo, come fosse un qualsiasi altro testo, e poi si esegue premendo l'apposito tasto nella toolbar di LibreLogo; se il codice è corretto, la tartaruga esegue il disegno codificato nel testo in mezzo alla pagina. Successivamente, questo disegno può essere gestito e manipolato come qualsiasi altra grafica di LibreOffice. Quando si lancia LibreOffice, se non si è mai usato LibreLogo, la toolbar di LibreLogo non è attiva.\nOccorre quindi attivarla, con l'appropriato comando di menu: View → Toolbars → Logo\nAttivazione della toolbar di LibreLogo\nFatto questo, occorre chiudere il programma e rilanciarlo per vedere fra le altre toolbar anche quella di LibreLogo.\nQuesta appare nel seguente modo:\ndove le icone hanno i seguenti significati:\nIstruzione (se applicabile)\nFORWARD 10 Avanti di 10 punti (vedremo successivamente il significato dei punti)\nBACK 10 Indietro di 10 punti\nLEFT 15 A sinistra di -15°\nRIGHT 15 A destra di 15°\nEsegue il programma scritto nel programma. Dalla versione 4.3 in poi, in un documento nuovo appena aperto esegue un programma di esempio.\nFerma il programma che sta girando (se dura troppo a lungo per qualche problema)\nHOME Riporta Logo nella condizione iniziale, con la tartaruga al centro che punta in alto.\nCLEARSCREEN Cancella il disegno appena fatto (non il testo presente nel documento)\nConsente di scrivere un comando qualsiasi per eseguirlo subito\nLa grafica di LibreLogo in WriterModifica\nL'interazione fra LibreLogo e Writer è particolare per quanto riguarda la grafica. All'inizio può sembrare farraginosa ma in realtà occorre abituarsi e imparare due o tre regolette. La caratteristica, probabilmente unica, di LibreLogo è che il risultato ottenuto girando uno script si ritrova sullo stesso supporto dove scriviamo il codice, ovvero un documento di tipo ODT di Writer. Di fatto in questo modo il documento ospita due tipi di informazioni diverse: una lista di istruzioni scritte in forma testuale e un oggetto grafico prodotto facendo funzionare quelle istruzioni. L'oggetto grafico è di tipo “vettoriale”, ovvero è composto da un insieme di oggetti geometrici. Altro sono le immagini tipo raster o bitmap, che sono composte da una matrice di pixel. Gli oggetti grafici prodotti da LibreLogo sono del tutto analoghi a quelli prodotti con il tool di disegno a mano disponibile in Writer, accessibile attraverso l'apposita toolbar, alla voce di menu View → Toolbars → Drawing:\nToolbar per disegnare in LibreOffice\nCome tali, i disegni fatti con LibreLogo possono essere spostati, copiati o salvati come qualsiasi altro oggetto grafico. Una cosa utile da capire è che spesso tali oggetti sono in realtà una composizione di oggetti distinti. In questo manuale ne faremo molti. Per utilizzarli come un unico oggetto occorre usare la funzione di raggruppamento, procedendo così: prima si delimita la regione che comprende gli oggetti da raggruppare, selezionando il pointer\nnella barra di disegno e poi delineando la regione rettangolare desiderata con il mouse e tenendo premuto il tasto sinistro. Attenzione che il cursore del mouse deve avere la forma della freccia\ne non quello tipico di quando si inserisce il testo, a forma di una I maiuscola, perché con questo si inserisce testo e non grafica. Il fatto che sia attivo il cursore grafico (e non testuale) si capisce anche dal fatto che contestualmente si attiva un'altra toolbar, che serve al controllo della grafica:\nToolbar grafica attiva\nQuando si seleziona la regione che contiene gli oggetti grafici, in questa barra si attivano alcune icone, fra cui quella della funzione raggruppamento:\n. Premendo questa tutti gli oggetti grafici compresi nella regione selezionata vengono raggruppati in un unico oggetto grafico che può essere copiato altrove o salvato. Un altro accorgimento utile è quello di “ancorare” appropriatamente la grafica al documento,laddove la dobbiamo usare. Sempre nella solita barra per la grafica, il tasto che consente di determinare l'ancoraggio è questo:\nCliccando sulla freccetta alla destra dell'ancora si possono selezionare quattro tipi di ancoraggio:\nNel primo caso la grafica è associata alla pagina e non si muove da questa, nel secondo ad un paragrafo, nel terzo ad un carattere e nel quarto si comporta come se fosse un carattere. Quale sia l'ancoraggio più opportuno è una cosa che si impara con l'esperienza. La maggior parte delle grafiche in questo manuale sono state ancorate “al paragrafo”, eccetto che per le piccole immagini che stanno in linea con il testo, come l'ancora precedente, queste sono ancorate “come carattere”. Queste cose appena dette riguardano la gestione della grafica in Writer in generale. Usando LibreLogo, l'unica differenza è che la grafica viene prodotta attraverso le istruzioni che mettiamo nel codice. LibreLogo piazza la grafica nel mezzo della prima pagina del documento, anche se il testo del codice si dilunga nelle pagine successive. Può succedere così che la grafica si sovrapponga al testo del codice medesimo. Di primo acchito sembra che il comportamento sia farraginoso se non errato. Niente di tutto questo. La grafica è prodotta per essere usata da qualche parte. Si tratta semplicemente di selezionarla, con gli accorgimenti appena descritti e portata altrove, in una pagina pulita semplicemente per vederla con chiarezza, oppure in qualche altro documento dove questa debba essere integrata.\n↑ D. Weintorp, http://dweintrop.github.io/papers/Weintrop-diss-4pager.pdf … e vari articoli ivi citati.\n↑ D. Weintorp e U. Wilensky, Using commutative assessments to compare conceptual understanding in blocks-based and text-based programs, Proceedings of the 11th annual International Computing Education Research (ICER) conference, ACM NY: 101-110, 2015. Reperibile in http://dweintrop.github.io/papers/Weintrop_Wilensky_ICER_2015.pdf, (luglio 2016)\n↑ C.M. Lewis, How programming environment shapes perception, learning and goals: Logo vs. Scratch, Proc. Of the 41st Annual ACM SIGCSE Conference, ACM NY: 346-350, 2015. Reperibile in http://ims.mii.lt/ims/konferenciju_medziaga/SIGCSE'10/docs/p346.pdf, (luglio 2016).\n↑ D. Weintorp e U. Wilensky, To Block or not to Block, That is the Question: Students’ Perceptions of Blocks-based Programming. Proceedings of the 14th International Conference on Interaction Design and Children, ACM NY: 199-208, 2015. Reperibile in http://dweintrop.github.io/papers/Weintrop_Wilensky_IDC_2015.pdf (luglio 2016).\n↑ Esiste un altro progetto analogo che si chiama OpenOffice. La domanda su quali siano le differenze rispetto a LibreOffice è molto frequente. Una piccola storia dell'evoluzione di questi due software, che hanno un origine comune, può essere trovata qui (luglio 2016): http://www.navigaweb.net/2014/04/differenze-tra-openoffice-e-libreoffice.html. Allo stato attuale, LibreOffice conviene perché incorpora più funzionalità e viene aggiornato più frequentemente.\n↑ In gergo con “girare un programma” si intende far funzionare un programma – in inglese to run a program. Oggi, con i moderni linguaggi spesso i programmi sono detti script. In generale un programma è un software completo e magari anche molto complesso. Uno script tende a essere un frammento di codice più piccolo e specifico. Ma sono categorie che si sovrappongono largamente.\n↑ Un approfondimento della distinzione fra immagini bitmap e vettoriali può essere trovato in http://iamarf.org...\nDue capitoli di Mindstorm di S.Papert da leggere...Modifica\nIn realtà il Piccolo Manuale di LibreLogo non è un manuale in senso stretto ma un testo didattico con una sua precisa pedagogia che si fonda essenzialmente sul pensiero di Seymour Papert. Deve essere chiara una cosa: invito calorosamente il lettore ad acquistare una copia di Mindstorms e a leggerlo, meglio se prima di usare questo manuale. I capitoli sono\n2 - Mathophobia: The Fear of Learning (pp. 38-54)\n3 - Turtle Geometry: A Mathematics Made for Learning (55-76)\nEsiste anche una traduzione di questo libro ma è esaurita. La casa editrice - Emme Editore - è confluita da tempo in Edizioni EL, che ho provato a contattare, ma senza esito. Copie di questa versione in italiano sono disponibili in varie biblioteche di università o istituti scolastici: invito calorosamente coloro che possono accedere ad una di queste biblioteche di prendere il libro in prestito e leggerlo'. Ma per tutti gli altri? Sto cercando una soluzione...\nComandi di movimento e disegnoModifica\nI comandi fondamentaliModifica\nIl programma consente di creare grafica mediante il movimento di una “tartaruga” che obbedisce a precisi comandi. Vediamo subito un esempio. Apri un nuovo documento di testo e scrivi questo comando:\nVedrai che è apparsa la tartaruga in mezzo al foglio con la testa verso l'alto:\nOra aggiungi un altro comando (d'ora in poi scriverò in grassetto solo i nuovi comandi che introdurremo):\nLa tartaruga si è mossa tracciando una linea; è così che si disegna dando comandi alla tartaruga.\nScriviamo ora le seguenti istruzioni:\nAbbiamo tracciato quattro lati, e alla fine di ogni lato abbiamo girato a destra di 90 gradi, ottenendo così un quadrato. Due parole sulla particolarità di LibreLogo. La sequenza di istruzioni che abbiamo scritto è un frammento di codice, è software. L'abbiamo scritto in un particolare linguaggio, che è quello di Logo, ed è anche molto semplice, ma è software come qualsiasi altro. Di solito il software si scrive in appositi documenti mediante editori di testo semplice e si salvano in questo modo. Poi, si fanno eseguire al computer. I modi con cui si eseguono queste operazioni variano molto a seconda del tipo di linguaggio e di contesto. Oggi ci sono centinaia di linguaggi diversi che servono per gli scopi più disparati. La particolarità di LibreLogo è che il software si scrive in un documento e la tartaruga “lavora” sul documento medesimo, lasciandovi la propria opera sotto forma di grafica; così uno si ritrova insieme il codice e il risultato grafico prodotto da esso, in un unico documento. La grafica può essere selezionata con il mouse e, eventualmente, trasportata in contesti diversi. Ad esempio, le figure qui sopra le ho generate giocando con la tartaruga in un altro documento, poi ho selezionato le grafiche e le ho riportate qui. Un'altra notazione: un gruppo di istruzioni da fare funzionare in sequenza si chiama script, espressione che useremo diffusamente. L'integrazione fra Logo e LibreOffice va oltre. È evidente che quando scriviamo il comando\nil numero 50 esprime la lunghezza del percorso che la tartaruga deve compiere. Puoi verificare subito cambiando il valore e guardando cosa fa la tartaruga. Ma cosa rappresenta quel 50? Sono punti tipografici (point): 50 pt. Un punto sono 0.35 mm. LibreLogo capisce le unità di misura, si può scrivere 50, 50pt, 50mm, 50cm, 50in (inch: pollice), 50” (“ sta per pollice). Ovviamente si tratta di lunghezze diverse. Usiamo per esempio i mm:\nIl quadrato è ovviamente più grosso perché il precedente aveva il lato di 50 pt = 17.6 mm. Proviamo a complicare il disegno, immaginando di fare una casetta. La tartaruga si trova nel vertice in basso a sinistra e guarda in alto. Come prima cosa dobbiamo farla salire fino al vertice in alto a sinistra. Proviamo, e allo stesso tempo approfittiamo anche del fatto che le istruzioni possono essere raggruppate in una stessa riga, a seconda della convenienza:\nNon ci sono regole precise per raggruppare le istruzioni in una stessa riga. Il raggruppamento si può decidere in base alla comodità con cui si rilegge il codice. È importante facilitarsi la vita perché via via che il codice cresce può complicarsi rapidamente e tutti gli accorgimenti per renderlo più chiaro sono utili.\nOra dobbiamo costruire il tetto sulla casa. Facciamo questo appoggiando sul quadrato un triangolo equilatero, con la base coincidente con il lato superiore del quadrato. Essendo equilatero, anche gli altri due lati del triangolo saranno lunghi 50mm. Quindi per fare la falda sinistra del tetto la tartaruga dovrà spostarsi di 50mm ma deve prima cambiare direzione. Di quanto? Siccome gli angoli interni di un triangolo equilatero sono di 60°, la tartaruga dovrà deviare di 90° – 60° = 30° a destra. Arrivata in cima, disegnando la falda sinistra del tetto, dovrà girare a destra di 120° per poi disegnare la falda destra. Infine, girerà di 30° a destra per riallinearsi alla parete della casa.\nFORWARD 50mm RIGHT 30\nFORWARD 50mm RIGHT 120\nSupponiamo ora di voler disegnare una finestra nel mezzo della parete. Per fare questo è necessario introdurre due nuovi comandi - PENUP e PENDOWN – che consentono di muovere la tartaruga senza disegnare.\ndove abbiamo evidenziato in rosso il percorso fatto senza disegnare.\nFORWARD 50mm RIGHT 90°\nFORWARD 50mm/3 RIGHT 90\nProviamo ora ad arricchire ulteriormente il disegno, per esempio facendolo a colori.\nE perché non colorare anche l'interno?\nFILLCOLOR “yellow” FILL\nFILLCOLOR “red” FILL\nFILLCOLOR “green” FILL\nAnche in questo caso siamo ricorsi al raggruppamento delle istruzioni: FILLCOLOR “green” FILL. Con la prima si stabilisce il colore da usare (FILLCOLOR “green”) e con la seconda si procede a colorare la figura – viene naturale inglobarle in una sola istruzione. L'istruzione FILL in realtà fa due cose: chiude una figura e la riempie di un colore. Facciamo questa prova:\nCosì abbiamo disegnato una figura che non è chiusa. Volendo fare un triangolo potremmo far disegnare alla tartaruga il terzo lato. Alternativamente possiamo chiudere la figura con FILL, come abbiamo visto prima:\nFORWARD 30mm RIGHT 90\nCosì la figura è stata chiusa e colorata. Possiamo anche chiuderla senza colorarla, usando l'istruzione CLOSE:\nÈ interessante notare che, sia con FILL che con CLOSE la figura viene chiusa senza che la tartaruga si sposti. Quindi se continuiamo ad aggiungere altri movimenti, questi prenderanno le mosse da tale posizione della tartaruga, che negli esempi precedenti è rimasta volta verso il basso. Proviamo a mettere i due precedenti blocchi di codice uno dietro l'altro:\nDopo avere chiuso e colorato di verde il triangolo superiore, la tartaruga con le successive istruzioni di FORWARD procede a disegnare due lati del triangolo inferiore. L'istruzione CLOSE fa chiudere questo secondo triangolo senza colorarlo.\nE se uno volesse togliere la tartaruga una volta finito il disegno? Semplice: basta aggiungere alla fine l'istruzione HIDETURTLE. Prova!\nI codici RGB per i coloriModifica\nNegli esempi precedenti abbiamo usato dei codici per esprimere i colori, per esempio “red” per indicare rosso. Si possono indicare così 24 colori:\nIn realtà i colori possibili sono molti di più. Questi possono essere espressi mediante il cosiddetto codice RGB, che sta per Red, Green, Blue. Nella grafica al computer i colori possono essere espressi come combinazione di tre colori fondamentali, che sono appunto rosso, verde e blu. Tutti gli altri possono essere espressi miscelando e dosando opportunamente questi tre colori fondamentali. Per fare questo si esprimono le intensità dei singoli colori con un numero che va da 0 a 255 e si miscelano scrivendo ad esempio [255, 0, 0] per il rosso, [0, 255, 0] per il verde o [0, 0, 255] per il blu. Tutti gli altri colori si ottengono variando i valori all'interno delle parentesi. Con [0, 0, 0] si ottiene il nero e con [255, 255, 255] il bianco. Poi questo tipo di codifica si utilizza in uno qualsiasi dei comandi che consentono di specificare il colore. Ad esempio\nPENCOLOR [45, 88, 200]\nFILLCOLOR [255, 200, 100]\nProvate a giocare un po' con questi numeri per vedere che colori vengono fuori. La tabella dei colori che abbiamo mostrato ha una stranezza: ci sono due elementi che hanno nome diverso ma il colore sembra lo stesso. Trovati? In realtà differiscono ma per via di un quarto attributo, che è la trasparenza. Vediamo giocando un po'.\nPer facilitarci, anticipiamo un nuovo comando. Negli esempi precedenti noi abbiamo già disegnato un quadrato, utilizzando le istruzioni FORWARD e RIGHT, opportunamente combinate. In realtà, per disegnare le principali figure geometriche, in Logo esistono delle istruzioni preconfezionate, che ci aiutano a scrivere il codice in maniera più sintetica. Il quadrato è una di queste. Per fare un quadrato di 50 mm di lato si scrive:\nIn questo modo la tartaruga disegna un quadrato e poi si piazza al centro con la testa rivolta in alto (il colore non l'abbiamo determinato noi ma venuto “automaticamente”, si dice che è il valore di default). Serviamoci allora di questa istruzione per disegnare prima un quadrato che coloriamo di rosso, poi spostiamoci un po' in basso e a destra, per disegnare un secondo quadrato, in modo che quest'ultimo si sovrapponga un poco al precedente, e poi lo coloriamo di bianco.\nFILLCOLOR [255, 0, 0]\nFILLCOLOR [255, 255, 255]\nBene, così il quadrato bianco si è sovrapposto a quello rosso. Un risultato prevedibile: i colori si sovrappongono perché sono opachi. Un pittore direbbe che “coprono”. In realtà con i codici RGB in Logo si può assegnare un quarto parametro che è la “trasparenza” che si vuole attribuire a quel certo colore, con la convenzione che un valore di 0 gli conferisce la completa opacità mentre il valore di 255 lo rende invece completamente trasparente. Con i valori compresi fra 0 e 255 si possono ottenere diversi livelli di trasparenza. Proviamo dunque a rendere trasparente il quadrato bianco, aggiungendo il quarto parametro uguale a 255:\nFILLCOLOR [255, 255, 255, 255]\nIl quadrato bianco è diventato trasparente. Se al posto di FILLCOLOR [255, 255, 255, 255] avessimo usato FILLCOLOR “invisible” allora avremmo ottenuto lo stesso risultato. Ecco in cosa consiste la differenza fra il colore “white” (bianco) e “invisible”, invisibile, nella tabella che abbiamo visto all'inizio.\nUn'ultima annotazione. A guardare bene, si vede che in questi disegni ci ritroviamo con la tartaruga di colori diversi. Di fatto, la tartaruga viene colorata con lo stesso colore che abbiamo selezionato per riempire l'ultima figura disegnata, magari con una trasparenza diversa. Dopo avere disegnato il quadrato verde chiaro, la tartaruga è venuta verde un po' più scuro. Dopo il quadrato bianco è venuta grigio chiaro e dopo il colore invisibile e venuta grigio scuro. Questo è un comportamento che comunque non inficia i risultati che vogliamo ottenere perché qualora volessimo usare in qualche maniera le grafiche che produciamo, alla fine non avremo da fare altro che aggiungere l'istruzione HIDETURTLE.\nCon i comandi di base che abbiamo visto fin qui è possibile produrre una gran quantità di grafiche. In Logo sono tuttavia disponibili dei comandi che consentono di abbreviare il disegno di alcune forme base. Abbiamo già anticipato l'istruzione SQUARE che consente di costruire un quadrato in un sol colpo. Le altre sono RECTANGLE, CIRCLE e ELLIPSE, che servono a costruire rispettivamente rettangoli, cerchi e ellissi. Proviamo i seguenti comandi:\nSi vede come l'effetto di disegnare due figure in sequenza sia quello di sovrapporle facendone coincidere il centro di simmetria e come la tartaruga si riposizioni sempre su tale centro. Si capisce anche come l'argomento del comando SQUARE rappresenti il lato del quadrato e quello del comando CIRCLE il diametro del cerchio che vogliamo costruire. Prova a esercitarti con i comandi SQUARE e CIRCLE, per esempio costruendo la locomotiva qui accanto. Puoi esercitarti a rispettare delle proporzioni date, come quelle in questo esempio, dove il lato del quadrato più grande è due o tre volte quelli dei quadrati più piccoli e il diametro dei cerchi è pari al lato del quadrato più piccolo. A pagina nuova c'è una possibile soluzione, ma prima prova da solo.\nUna cosa importante di cui rendersi conto con il codice è che lo stesso obiettivo può essere conseguito in tanti modi diversi. Non esiste un criterio assoluto per stabilire quale sia il procedimento migliore. Quindi non esiste un'unica “risposta giusta”. Un procedimento può essere meglio di un altro sotto un certo punto di vista: chiarezza del codice scritto, velocità di esecuzione, memoria totale impiegata dal codice, gestione di eventuali risorse ecc. Può succedere che un ottimo codice sotto uno di questi punti vista risulti pessimo sotto un altro.\nPENUP BACK 15 RIGHT 90 FORWARD 45 LEFT 90 PENDOWN\nPENUP FORWARD 25 PENDOWN\nPENUP BACK 40 PENDOWN\nPENUP LEFT 90 FORWARD 60 PENDOWN\nIl quadrato e il cerchio hanno bisogno di un solo parametro per essere specificati. Invece, il rettangolo e l'ellisse hanno bisogno di due parametri. Nel caso del rettangolo i due parametri sono le lunghezze del lato lungo e del lato corto. L'istruzione per costruire un rettangolo è la seguente:\nRECTANGLE [60, 40]\nQuesto comando produce un rettangolo largo 60 punti e alto 40. Rispetto ai casi del quadrato e del cerchio questo comando ha un'altra particolarità: in questo caso, per fornire i due parametri necessari, si è ricorsi alla scrittura [60, 40]. Questa è una “lista” di valori. Si tratta di un modo per considerare un insieme di valori come un'unica cosa, una lista appunto, e il modo per ottenere questo effetto è quello di elencare i valori separandoli con le virgole e richiudendo tutto fra parentesi quadre. Le liste possono servire in varie circostanze, non solo in questo caso, ma vedremo successivamente come. Esercizio: prova a realizzare un diagramma come questo qui sotto:\nAnche in questo caso, prova da solo. Poi, a pagina nuova puoi vedere un possibile modo di risolvere questo caso.\nRECTANGLE [40mm, 20mm]\nPENUP FORWARD 2,5mm LEFT 90\nFORWARD 2,5mm RIGHT 90 PENDOWN\nRECTANGLE [35mm, 15mm]\nRECTANGLE [30mm, 10mm]\nRECTANGLE [25mm, 5mm]\nUn'altra figura che può tornare utile è l'ellisse. Detto nel più semplice dei modi l'ellisse è un cerchio schiacciato. È perfettamente nello spirito della geometria della Tartaruga quello di aiutarsi con riferimenti ad attività fisiche: probabilmente il miglior modo di usare le tecnologie moderne è di continuare ad utilizzare quelle tradizionali, integrando al meglio le une con le altre. Niente di meglio qui che farsi aiutare da Emma Castelnuovo, in un suo brano dove l'ellisse emerge studiando la classe di triangoli isoperimetrici con uguale base.\nRiportiamo il brano per intero, al fine di rispettare l'intento didattico di Emma, che è di valore: Sempre un argomento di matematica, quale lo studio dei triangoli isoperimetrici con ugual base, porta a osservare quello che abbiamo sotto gli occhi.\nIl materiale è, anche questa volta, un pezzo di spago. Per costruire dei triangoli di uguale base e uguale perimetro facciamo così: fissiamo due chiodi – siano A e B – su un tavolo su cui è disteso un foglio di carta; AB sarà la base dei nostri triangoli. Leghiamo poi gli estremi di un pezzo di spago ai due chiodi, tenendo presente che lo spago deve essere più lungo del tratto AB. Facciamo in modo, valendoci di una matita, che lo spago resti sempre ben teso e... lasciamoci guidare dalla matita.\nQuesta, guidata dallo spago, disegnerà sul foglio una curva a forma di ovale: è un'ellisse. I punti A e B si chiamano fuochi dell'ellisse. Dunque: i vertici dei triangoli isoperimetrici e di uguale base si trovano su un'ellisse.\nUn problema di geometria ci ha condotti al disegno dell'ellisse. Con lo stesso pezzo di spago possiamo costruire un'ellisse più o meno “schiacciata”, a seconda della distanza fra i punti A e B. Si può ottenere anche un cerchio, se i due punti coincidono: il cerchio, infatti, è un'ellisse particolare.\nL'ellisse, dopo averla incontrata in problemi di geometria, la ritroviamo per la strada, quando la “calpestiamo” (perché un disco segnaletico dà, come ombra, un'ellisse). Nella nostra vita convulsa raramente ci soffermiamo a osservare l'ombra di un oggetto data dai raggi del sole o da una lampadina. Ma ecco che ora un'attività di geometria ci sollecita a guardare di più ed è proprio il confronto fra l'effetto-ombra dato dai raggi del sole e quello dato da una lampada puntiforme che stimola la nostra facoltà di osservazione.\nGuardiamo, ad esempio, due matite disposte in verticale su un tavolo. Se vengono illuminate dal sole accade che anche le ombre sono parallele; se invece è una lampada che le illumina le ombre si divaricano.\nDa qui lo studio matematico delle trasformazioni affini e delle trasformazioni proiettive, fino ad arrivare alla prospettiva, all'arte, a come si guarda un quadro, alla storia.\nÈ un piccolo problema di geometria che ha stimolato a osservare e a... guardarsi intorno.\nIn LibreLogo l'ellisse si disegna con il comando\nELLIPSE [60, 40]\nL'ellisse ovviamente non ha un diametro fisso, come il cerchio. Per questo per essere definita richiede due parametri che sono i due assi, maggiore e minore. Nell'esempio l'ellisse ha l'asse maggiore uguale a 60 punti e il minore uguale a 40 punti. È possibile combinare le varie forme e aggiustare i loro parametri per ottenere una varietà di effetti. Per esempio un cerchio inscritto in un quadrato si può ottenere anche partendo dalle istruzioni per disegnare rettangoli e ellissi:\nRECTANGLE [60, 60]\nELLIPSE [60, 60]\nProva a fare una figura come questa:\nELLIPSE [120, 80]\nPENUP FORWARD 10 PENDOWN\nELLIPSE [90, 60]\nELLIPSE [30, 20]\nArrotondamento vertici, archiModifica\nQueste istruzioni consentono di usare anche altri parametri per ottenere delle varianti di rettangoli ed ellissi. Nel caso dei rettangoli è possibile aggiustare un terzo parametro in maniera da arrotondare i vertici:\nRECTANGLE [60, 50, 10]\nSupponiamo ora che un amico ci abbia appena detto di questa possibilità ma che altro non si ricordi. Si può controllare la “rotondità” dei vertici? Probabilmente con quel terzo parametro, che l'amico ci ha detto potevamo fissare al valore di 10, ma come funziona? Questo è un ottimo esempio per mettere in luce lo strumento fondamentale di chi sviluppa software: la sperimentazione. Ecco, in questo caso, potremmo provare a fare dei tentativi, che potremmo (è solo una delle innumerevoli possibilità) sintetizzare così:\nRECTANGLE [200, 150, 0]\nRECTANGLE [200, 150, 10]\nRECTANGLE [200, 150, 20]\nRECTANGLE [200, 150, 30]\nRECTANGLE [200, 150, 40]\nRECTANGLE [200, 150, 50]\nRECTANGLE [200, 150, 60]\nRECTANGLE [200, 150, 70]\nRECTANGLE [200, 150, 80]\nRECTANGLE [200, 150, 90]\nRECTANGLE [200, 150, 100]\nIn questo modo ci siamo fatti un'idea di come possiamo controllare i rettangoli arrotondati. Ci siamo anche resi conto che, giocando con il terzo parametro, possiamo andare dal caso limite del rettangolo normale all'ellisse vera e propria. Vediamo ora le varianti possibili per l'istruzione ELLIPSE.\nNell'istruzione ELLIPSE possiamo quindi utilizzare 3 parametri aggiuntivi, che servono a disegnare solo un settore dell'ellisse. I primi due rappresentano l'angolo iniziale e finale, espressi in gradi, che delimitano il settore. Nell'esempio sopra, avendo scelto 0 e 90 abbiamo imposto di disegnare il primo quadrante dell'ellisse. Il quarto parametro stabilisce se si vuole disegnare un settore di ellisse (1), un segmento di ellisse (2) oppure giusto un arco (3).\nLe istruzioni che abbiamo visto sinora consentono di fare molte cose: abbiamo imparato a muovere la tartaruga in ogni parte del foglio, a farla disegnare o meno, abbiamo visto come controllare il colore del tratto e il riempimento delle figure. Si potrebbe avere la sensazione che per produrre grafica non occorra altro. Invece abbiamo solo scalfito la superficie delle potenzialità di un linguaggio di programmazione, anche se questo ha finalità esclusivamente didattiche, come nel caso di Logo e dei suoi derivati. Introdurremo via via le caratteristiche più importanti. Fra queste la prima, che ci serve subito per poter andare avanti, è il concetto di “variabile”. Fin qui abbiamo usato varie istruzioni che richiedono degli “argomenti”. L'argomento è il valore che un'istruzione può richiedere per poter essere eseguita. Ad esempio l'istruzione FORWARD non avrebbe senso senza un argomento che rappresenti la distanza che la tartaruga deve percorrere. L'espressione FORWARD 50 significa che la tartaruga deve muoversi in avanti di 50 punti; 50 è il valore dell'argomento. Vi sono anche istruzioni che richiedono più di un argomento, è per esempio il caso di RECTANGLE e ELLIPSE. In ogni caso, in tutti gli esempi visti precedentemente abbiamo sempre usato argomenti numerici per tutte le istruzioni. In realtà, tutti i linguaggi consentono di servirsi di un'importante generalizzazione che consiste nell'uso delle “variabili”. Si tratta di nomi simbolici ai quali possono essere assegnati vali numerici a piacimento. Proviamo ad eseguire il seguente codice:\nLATO = 100\nANGOLO = 90\nAbbiamo disegnato un quadrato, ma invece di utilizzare direttamente il valore 100 come argomento delle istruzioni FORWARD, abbiamo prima assegnato il valore 100 alla variabile di nome “LATO” e poi abbiamo utilizzato questa come argomento di tutte le istruzioni FORWARD. È evidente quale possa essere l'utilità di questo metodo: supponiamo che non sia soddisfatto delle dimensioni di questo quadrato e che voglia provare altri valori del lato. Ebbene, non ho altro che da cambiare il valore 100 nell'istruzione LATO = 100, cambiandola per esempio con LATO = 150. Prova a sperimentare! Puoi anche cambiare il valore di ANGOLO, sperimentando con valori diversi... Coloro che hanno studiato i primi rudimenti dell'algebra, avranno certamente riconosciuto il concetto di variabile, che in quella disciplina si utilizza ampiamente per eseguire calcoli simbolici. Si ricorderanno anche che il concetto di variabile si declina in vari modi, per esprimere quantità che si considerano effettivamente variabili – ad esempio una variabile dipendente in funzione di altre variabili indipendenti – poi quantità che si assumono costanti, infine quantità che assumono il significato di parametri, che sono come costanti che possiamo avere interesse a cambiare di tanto in tanto. In ogni caso tutte queste quantità vengono rappresentate in maniera simbolica. In realtà, coloro che hanno poi avuto modo di approfondire lo studio dell'algebra, sanno che il concetto di variabile è passibile di tutta una serie di generalizzazioni. Niente paura, questo non è un corso di matematica sottobanco, o forse un po' sì: in fin dei conti Logo rappresenta l'anelito di Seymour Papert di rendere la matematica più accessibile. Ma ciò che proponiamo qui non richiede doti o attitudini particolari. Introduciamo solo una delle generalizzazioni possibili, che ci servirà immediatamente. La generalizzazione che proponiamo attiene al concetto di posizione della tartaruga nel foglio. La posizione lungo una linea è determinata da un semplice numero – ad esempio la posizione lunga una strada: “si segnalano lavori in corso al Km 287...”. Diverso è il caso della posizione su di una superficie. In un navigatore satellitare, che oggi tutti conoscono, si può dare anche la posizione in termini geografici, ma questa deve essere somministrata mediante due valori: la latitudine e la longitudine, che designano il parallelo terrestre la prima e il meridiano la seconda. Per affondare una nave nel gioco della battaglia navale occorre fornire due coordinate, per esempio b7, dove "b" rappresenta la colonna e "7" la riga. Allo stesso modo si identificano le celle di un foglio di lavoro, e via dicendo. Anche alla nostra tartaruga occorrono due valori numerici per identificare una posizione precisa nel foglio, che possiamo immaginare come la x e la y della tartaruga nello spazio della pagina. Ebbene, il modo per esprimere questo concetto nel mondo della tartaruga (ma non solo!) è il seguente:\nP = [200, 300]\nSe si esegue questo codice, LibreLogo stampa il “valore” [200, 300]. Ovviamente abbiamo scelto questi numeri in maniera del tutto arbitraria, giusto per fare un esempio. Lo scopo è quello di mostrare come si rappresenta in maniera simbolica una posizione, che in realtà è espressa mediante un insieme di due numeri. Nell'algebra si dice che questo tipo di variabile è un “vettore”. C'è anche un modo per “isolare” i singoli elementi all'interno di un vettore. La cosa si descrive subito con questo esempio:\nSe si esegue questo frammento di codice, prima viene stampato il “valore” [200, 300], poi il valore 200, quindi 300. Da qui si capisce che con P  si ottiene il primo elemento del vettore posizione, che contiene il numero 200, e con P  il secondo elemento, che contiene il numero 300. Ecco, questo è quanto dovrebbe bastare per andare a vedere com'è che si può controllare con ancora maggiore agilità la posizione della tartaruga nel foglio.\nLo spazio della paginaModifica\nAbbiamo già visto vari comandi per muovere la tartaruga ma sono tutti finalizzati al disegno. È vero che si possono fare i movimenti con la “penna alzata” (comando PENUP) ma può essere utile “saltare” direttamente in una posizione qualsiasi del foglio, oppure puntare in una direzione precisa. Si tratta, in altre parole, di scegliere una posizione o una direzione in termini assoluti e non in modo relativo, rispetto alla posizione e direzione corrente, come si fa per esempio con istruzioni del tipo FORWARD oppure LEFT. Qui sorge la necessità di utilizzare dei riferimenti spaziali assoluti che sono una coppia di coordinate per la posizione nel foglio e un angolo per la direzione. Per sapere come funzionano tali riferimenti introduciamo e usiamo subito due nuove istruzioni: POSITION e HEADING. Inoltre, ci è utile anche l'istruzione PRINT, per conoscere il valore corrente della posizione e della direzione. Infatti i due comandi POSITION e HEADING, si possono usare con e senza parametri. Quando si usano senza parametri allora questi forniscono i valori correnti. Infatti, se apro un nuovo documento in Writer e faccio eseguire il comando\nsi ottiene la seguente risposta:\nI due numeri fra parentesi rappresentano le coordinate x e y della posizione nello spazio della pagina: 298 e 421 rispettivamente. Dal momento che abbiamo appena aperto il documento e che all'inizio la tartaruga viene piazzata al centro, possiamo assumere che queste coordinate rappresentino il centro della pagina. Tuttavia, per avere il controllo completo della situazione occorre conoscere precisamente l'estensione dello spazio dell'immagine.\nEbbene, le coordinate dell'angolo superiore sinistro sono [0, 0], dove il primo numero rappresenta la coordinata x e il secondo la y, mentre quelle dell'angolo inferiore destro si ottengono stampando il valore della variabile speciale PAGESIZE, che LibreLogo utilizza per conservare le dimensioni della pagina. In questo momento la mia versione di Writer è predisposta per pagine di dimensioni A4 e, conseguentemente, eseguendo l'istruzione\nQuesti numeri, arrotondati, 596 e 842, rappresentano le dimensioni di un foglio A4 espressi in “punti” alla densità di 72 DPI. In mm risultano 210 e 297 mm. Riassumiamo la situazione con la seguente figura.\nTutte le volte che vogliamo utilizzare le posizioni assolute possiamo fare riferimento a questo schema che ci fornisce l'orientamento del sistema di riferimento sul foglio e le sue dimensioni. Nella tabella successiva vediamo i valori numerici corrispondenti:\n[0, 0] [0, 0]\n[PAGESIZE, 0] [596, 0]\n[0, PAGESIZE] [0, 842]\n[PAGESIZE, PAGESIZE] [596, 842]\nRiallacciandosi al paragrafo precedente, PAGESIZE è una variabile, una variabile che all'interno di LibreLogo è trattata come una costante perché contiene le dimensioni della pagina. Inoltre è quel particolare tipo di variabile che si chiama vettore, perché composta da più elementi, precisamente due, le due dimensioni della pagina: PAGESIZE è la larghezza e PAGESIZE la lunghezza.\nCome facciamo dunque per spedire la tartaruga in una posizione precisa?\nPOSITION [350, 320]\nCon l'istruzione POSITION [350, 320] la tartaruga si dirige direttamente al punto di coordinate [350, 320], a partire dal punto dove si trova, in questo caso dal centro della pagina. Come possiamo usare l'istruzione POSITION per controllare la posizione, in modo analogo possiamo utilizzare l'istruzione HEADING per controllare la direzione in cui punta la tartaruga.\nInvocando l'istruzione HEADING senza alcun parametro si ottiene la posizione corrente. Utilizzando invece un parametro, per esempio HEADING , si impone alla tartaruga di ruotare di 30°. Nella figura seguente si mostra l'orientamento del sistema di riferimento.\nQuando si apre un documento nuovo, oppure dopo l'istruzione HOME, la tartaruga punta verso il lato superiore del foglio, e questa direzione corrisponde a 0°.\nAltri comandi graficiModifica\nÈ possibile controllare anche altri aspetti del disegno, oltre al colore.\nPENWIDTH (spessore tratto)Modifica\nCon il comando PENWIDTH si determina lo spessore del tratto:\nPENJOINT (forma vertici)Modifica\nCon il comando PENJOINT si controlla la forma dei vertici. Disegniamo per esempio un triangolo, nel modo seguente:\nFORWARD 40 RIGHT 120\nPossiamo alterare la rifinitura dei vertici facendo precedere il codice precedente dall'istruzione PENJOINT e un opportuno argomento. Le possibilità sono le seguenti:\nL'argomento “rounded” significa arrotondato – (default) non va scritto nel comando: lo abbiamo aggiunto per dire che quello è il comportamento standard se non si specifica nulla. Se tuttavia si è appena utilizzata una delle altre opzioni, allora va usato esplicitamente il comando PENJOINT “rounded”, per ottenere i vertici arrotondati. L'argomento “miter” significa “mitria” e sta per “giunto a mitria”, o “giunto a quartabono”, che è quello che si realizza nelle cornici dei quadri tagliando i singoli regoli della cornice in maniera che i vertici risultino a punta; “bevel” significa vertici smussati e "none" nessun effetto particolare.\nPENCAP (forma estremità segmenti)Modifica\nCon questo comando si possono controllare gli estremi di un segmento:\nPer commentare il comportamento di questo comando, e anche per ricapitolare un po' la scrittura del codice in Logo, analizziamo il codice che è servito a produrre questa figura, omettendo, per semplicità, la parte che produce le scritte a destra. Per capire più facilmente, orientiamoci mediante i punti cardinali, così orientati:\nVediamo quindi il codice seguente:\nCLEARSCREEN          ; cancello il foglio (solo parte grafica)\nHOME                 ; partenza: tartaruga al centro che punta a Nord\nHIDETURTLE           ; nascondo la tartaruga\nPENWIDTH 15          ; imposto lo spessore della linea a 15 pt\nRIGHT 90             ; ruoto 90° a destra così la tartaruga punta a Est in modo\n; da tracciare da sinistra a destra\nPENCAP “square”      ; imposto il modo “estremità quadrate”\nFORWARD 40           ; disegno 40 pt di linea (Ovest → Est)\nPENUP                ; alzo la penna\nRIGHT 90 FORWARD 20  ; giro a destra di 90° (punto a Sud) e calo di 20 pt\nLEFT 90 BACK 40      ; rigiro a sinistra (punto a Est) e torno\n; indietro ( Est → Ovest) di 40 pt\nPENDOWN              ; abbasso la penna\nPENCAP “round”       ; imposto il modo “estremità arrotondate”\nLEFT 90 BACK 40      ; rigiro a sinistra (punto a Est), torno indietro\n; ( Est → Ovest) di 40 pt\nPENCAP “none”        ; imposto il modo “estremità nessuna”\nAbbiamo evidenziato le istruzioni che realizzano i tre tratti, che riportiamo ancora qui:\nEcco, si vede che in realtà sono stati disegnati tutti e tre con la stessa lunghezza di 40 pt e invece non sembra che siano venuti uguali. Questo per capire come funziona il comando PENCAP. Il tratto disegnato con assenza di specifiche per le estremità (“effetto none”) è lungo 40 pt. Quindi quelli con gli effetti “round” e “square” vengono più lunghi. Si capisce da qui che gli arrotondamenti sono aggiunti alla lunghezza normale e che l'effetto “square” è ottenuto risquadrando gli arrotondamenti. Va da sè che si tratta di un aspetto marginale. Abbiamo colto l'occasione per mettere in luce la notevole raffinatezza di LibreLogo, per abituarci ulteriormente a muoversi nel foglio e pensare graficamente.\nPENSTYLE (tratteggio segmenti)Modifica\nCon questa istruzione si può determinare la continuità del tracciamento, per produrre linee tratteggiate di vario tipo:\nÈ anche possibile regolare in qualsiasi modo il tratteggio. Per esempio con l'istruzione\nPENSTYLE [3, 1mm, 2, 4mm, 1mm] si ottiene il tratteggio\nlunghezza dei punti\nnumero di tratti\nlunghezza dei tratti\nopzionale, se vale 2 allora i rettangoli sono forzati a quadrati\nFILLSTYLE (tratteggio superfici)Modifica\nL'istruzione FILLSTYLE 1, precedente al disegno di una figura, causa il tratteggio della medesima. Il parametro numerico determina lo stile del tratteggio, nel modo seguente:\nAnche qui, è possibile personalizzare lo schema del tratteggio, utilizzando dei parametri aggiuntivi:\nFILLSTYLE [2, “red”, 3pt, 15°]\ndove il significato dei singoli parametri è:# stile (1: tratteggio singolo, 2 doppio, 3 triplo)\nCon queste istruzioni si conclude la prima parte della nostra esplorazione di LibreLogo. Abbiamo imparato i comandi fondamentali per muovere la tartaruga nello spazio del foglio, sia per disegnare che per muoversi semplicemente. Abbiamo imparato a muoversi come farebbe una tartaruga vera, o come facciamo noi in città, seguendo un percorso continuo, immaginando un “avanti” di fronte alla nostra posizione corrente, un indietro, una destra e una sinistra. Ma abbiamo anche visto come fare a muoversi con il “teletrasporto”, come se inserendo le coordinate nel navigatore satellitare l'automobile ci portasse istantaneamente in quel luogo, senza dover seguire tutto un percorso sulla superficie terrestre; o come si muove il cavallo negli scacchi, saltando direttamente a una casella distante 1+2 o 2+1 posizioni. Abbiamo visto come si codificano i colori per decorare sia le linee che le superfici. Con tutto questo ci è sembrato di potere fare ormai disegnare tutto sul foglio, ma poi abbiamo subito scoperto delle istruzioni per disegnare direttamente le principali figure geometriche: quadrati, rettangoli, cerchi e ellissi, con alcune varianti, come settori, segmenti e archi di ellissi (o cerchi), oppure rettangoli con i vertici arrotondanti. Quindi abbiamo introdotto il primo degli elementi fondamentali che caratterizzano un vero e proprio linguaggio di programmazione: il concetto di variabile, con il quale possiamo usare dei simboli letterali generici per designare specifiche quantità – distanze, angoli e altro – senza doversi preoccupare di assegnare loro precisi valori numerici; una caratteristica fondamentale che conferisce al linguaggio una potenzialità simile a quella che sta alla base dell'algebra, con il calcolo simbolico. Non abbiamo esplorato tutta la potenzialità che soggiace al concetto di variabile, ma solo evidenziato quanto ci bastava per illustrare i movimenti nel foglio basati sull'impiego delle coordinate cartesiane. Per fare questo abbiamo dovuto considerare un particolare tipo di variabile che è il vettore, composto a sua volta da più numeri – due se si tratta di un “vettore posizione” su di una superficie. Infine abbiamo visto che si possono usare altri comandi ancora per determinare i particolari grafici sia del tratto (colore, spessore, estremità, giunzioni) che delle superfici (colore, tratteggi). A questo punto, nuovamente, ci può parere di avere a disposizione uno strumento potente per produrre grafica da inserire nei documenti. E effettivamente si possono fare senza dubbio tantissime cose con i comandi che abbiamo visto fino ad ora. In realtà, dal punto di vista del linguaggio di programmazione, abbiamo solo visto una piccola parte delle sue potenzialità. Si tratta di costrutti che stanno alla base di tutti i linguaggi di programmazione e che conferiscono le straordinarie capacità di flessibilità e generalizzazione agli innumerevoli tipi di software che tutti conosciamo ma soprattutto usiamo inconsapevolmente in ormai qualsiasi congegno.\n↑ S. Papert, Mindstorms – Children, Computers and Powerful Ideas, Basic Books, 1993 (I edizione 1980).\n↑ S. Papert, Mindstorms - Bambini computers e creatività, Emme Edizioni, Milano 1984.\n↑ La definizione precisa è: 1 pt = 1/72 pollici, dove 1 pollice = 25.4 mm. Quindi 1 pt = 2.54/72 = .352777… mm\n↑ Con “argomento” si intende il valore che un comando richiede per essere effettuato. Gli argomenti possono essere anche più di uno – vedremo degli esempi.\n↑ E. Castelnuovo, L'officina matematica – ragionare con i materiali, p. 20-21, Edizioni la Meridiana, 2008.\n↑ Abbiamo arrotondato i due numeri a quattro cifre significative, che sono adeguate a determinare la posizione nel foglio, ai nostri fini. Nella nota successiva diamo una breve spiegazione dell'unità di misura impiegata per questi numeri.\n↑ L'acronimo DPI sta per dots per inch: punti per pollice. Il valore di DPI dipende dal supporto fisico su cui si intende che un'immagine debba essere rappresentata. Poiché un pollice vale 2.54 cm, la densità di 72 DPI corrisponde a 72/2.54 = 28.3 punti per cm, o 2.83 punti per mm; giusto per avere un riferimento a noi più famigliare. Quando in Writer si sceglie l'unità di misura “punti” (anziché cm o pollici), questi si riferiscono alla densità di 72 DPI appena citata. In Writer, l'unità di misura si può cambiare con la voce di menu Tools->Options->LibreOffice Writer->General. Si può scegliere fra mm, cm, pollici, pica, punti.\nSubroutine – Funzioni – ProcedureModifica\nRiprendiamo il disegno del quadrato, così come lo avevamo fatto a pag. 27, usando le variabili:\nAbbiamo visto come siano comode le variabili, ad esempio per cambiare le dimensioni del disegno: se vogliamo fare un quadrato di lato 50 anziché 100 basta cambiare l'istruzione LATO = 100 in LATO = 50, invece di cambiare l'argomento di tutte e quattro le istruzioni FORWARD. Tuttavia, se vogliamo disegnare più quadrati, magari di diverse dimensioni e in parti diverse del foglio, dobbiamo riscrivere tutto il blocco di istruzioni, una volta per ogni quadrato. Possiamo ricorrere alle ripetizioni, in modo da ripetere tutto il blocco di istruzioni, cambiando solo ciò che serve ad ogni ciclo, ma non è detto che si possa ricorrere sempre a questo metodo con profitto. Inoltre, abbiamo già osservato come sia importante scrivere un codice chiaro e ordinato. Quasi sempre la concisione è una virtù. È qui che vengono in aiuto le “subroutine”, che in altri linguaggi sono dette “funzioni” e in altri ancora “metodi”, ma il concetto di base è lo stesso. L'idea consiste nell'incapsulare una sezione di codice che serva ad un compito ben definito, in modo che questa possa essere impiegata semplicemente invocando una sola istruzione. È un accorgimento straordinariamente potente che consente di semplificare grandemente la scrittura del codice, e di conseguenza, di ridurre la probabilità di commettere errori.\nNel codice accanto, l'istruzione TO QUADRATO segna l'inizio della subroutine e l'istruzione END la fine. La parte in blu contiene il codice della subroutine. Nell'istruzione di inizio, TO QUADRATO, la parte TO è la dichiarazione di inizio della subroutine, mentre QUADRATO rappresenta il nome che abbiamo deciso di darle. È importante capire che quando si chiede a LibreLogo di eseguire uno script, le parti di codice comprese fra TO e END non vengono eseguite ma solo “imparate”. Nel codice restante, quando LibreLogo arriva all'istruzione QUADRATO, in realtà va a eseguire le istruzioni blu della subroutine, poi continua con le seguenti. Ecco quindi che le subroutine sono un metodo per inventarsi delle istruzioni nuove, che ci dà la possibilità di arricchire a piacimento il linguaggio. Naturalmente, l'istruzione QUADRATO funziona solo perché nello script è incluso il codice che la esprime, fra TO e END.\nCLEARSCREEN; operazioni di preparazione\nHOME; che vengono eseguite subito\n; subroutine QUADRATO: viene solo “imparata” ma non eseguita\nLATO = 100; fisso il lato del quadrato\nANGOLO = 90; angolo di rotazione ai vertici\nFORWARD LATO; primo lato\nRIGHT ANGOLO; giro di 90° a destra, ecc.\n; script che viene eseguito\nQUADRATO; qui si eseguono le istruzioni blu\nSe provassimo ad utilizzarla in un altro script allora LibreLogo darebbe un errore. Ecco il risultato del codice precedente:\nIn 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:\nQui, dopo la dichiarazione del nome della subroutine, abbiamo introdotto l'argomento LATO. Nel codice successivo alla subroutine, l'istruzione QUADRATO viene invocata con un argomento, pari a 100 la prima volta e 50 la seconda.\nRicapitolando, quando si fa eseguire il codice, premendo il tasto PLAY\n, LibreLogo esegue le prime tre istruzioni, poi “impara” tutte quelle contenute nella subroutine QUADRATO; quindi esegue le istruzioni sottostanti, invocando QUADRATO con un valore LATO di 100, spostandosi e poi di nuovo QUADRATO con un valore di LATO di 50.\nTO QUADRATO LATO ANGOLO = 90\nCosì 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 dire il vero un'istruzione per disegnare i quadrati in LibreLogo esiste già: l'abbiamo incontrata a pag. 21, si chiama SQUARE e funziona allo stesso modo. O quasi, in realtà una differenza c'è: con SQUARE, una volta che il quadrato è stato disegnato, la tartaruga la ritroviamo al suo centro rivolta nella stessa direzione che aveva prima. Nel nostro caso invece la tartaruga rimane dove si trova dopo avere terminato di disegnare l'ultimo lato del quadrato. Effettivamente il comportamento di SQUARE sembra essere preferibile ma non è difficile far fare la stessa cosa alla nostra istruzione QUADRATO, ecco come:\nTO QUADRATO LATO\nANGOLO = 90 ; angoli di deviazione\nPENUP ; alzo la penna\nFORWARD LATO/2 ; mi dirigo su lato che ho di fronte\n; così mi ritrovo a metà del lato di fronte\nRIGHT ANGOLO ; giro a destra\nPENDOWN ; abbasso la penna\nFORWARD LATO/2 ; disegno mezzo del primo lato\nFORWARD LATO ; disegno il secondo lato\nFORWARD LATO ; disegno il terzo lato\nFORWARD LATO ; disegno il quarto lato\nFORWARD LATO/2 : ; disegno la metà rimanente del quarto lato\nRIGHT ANGOLO : ; giro a destra (per dirigersi verso il centro del quadrato)\nFORWARD LATO/2 ; torno nel centro del quadrato\nLEFT ANGOLO*2 ; mi rigiro nella direzione in cui mi trovavo inizialmente\nLa 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 FILLCOLOR, che abbiamo già visto. Lasciamo questa modifica come esercizio, per chi lo voglia fare.\nSi 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 verticale. Lasciamo come esercizio le variazioni da apportare alla subroutine QUADRATO vista sopra, per ottenere una subroutine RETTANGOLO, nel modo accennato. Come lasciamo per esercizio la possibilità di introdurre il controllo dei colori, sia nella funzione QUADRATO che RETTANGOLO.\nOvviamente, se può avere senso la creazione di varianti di istruzioni esistenti, a maggior ragione, ne avrà la creazione di nuovi. Non c'è limite a quello che possiamo pensare di incapsulare in una subroutine. Prendiamo per esempio il codice che avevamo scritto a pagina 15 e proviamo a incapsularlo in una subroutine:\n; subroutine CASA: viene solo “imparata” ma non eseguita\n; istruzioni eseguite\nSe si prova ad eseguire questo codice si ottiene la stessa casetta che avevamo ottenuto a pagina 15. A questo punto è facilissimo introdurre delle varianti, per esempio la dimensione delle case, che possiamo controllare mediante un'apposita variabile, che chiamiamo LATO e che passiamo come argomento nella subroutine CASA:\nTO CASA LATO\nFORWARD LATO RIGHT 90\nFORWARD LATO RIGHT 30\nFORWARD LATO RIGHT 120\nFORWARD LATO/3 RIGHT 90\nPENUP POSITION [150,400] HEADING 0 PENDOWN\nPENUP POSITION [200,400] HEADING 0 PENDOWN\nPENUP POSITION [270,400] HEADING 0 PENDOWN\nIl codice della subroutine CASA è lo stesso di prima eccetto per la presenza dell'argomento LATO. Nello script l'istruzione CASA 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] (per esempio), mi dirigo in su, riabbasso la penna. Ecco il risultato:\nNon 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 conoscenze matematiche, salti senz'altro l'esempio!). Riprendiamo le successioni di poligoni che avevamo visto a pag. 45 e 46. Lì avevamo rappresentato la successione incolonnando i poligoni. L'idea ora è di sovrapporli anziché incolonnarli, in modo da apprezzare l'evoluzione verso il cerchio al crescere del numero dei lati. Scegliamo di costruire i poligoni inscritti in un cerchio di raggio dato, formando così la successione dei poligoni inscritti nel cerchio. Potremmo egualmente considerare la successione dei poligoni circoscritti al cerchio. Nel primo caso il parametro chiave è il raggio dei poligoni, sempre eguale al raggio del cerchio in cui sono inscritti. Nel secondo sarebbe invece l'apotema, sempre eguale al raggio del cerchio che circoscrivono. L'esempio che segue descrive il primo caso. Il codice che segue è commentato minuziosamente. Ciò nonostante descriviamo puntualmente la struttura del codice e il procedimento.\nIntanto 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). Invece SIN e ABS sono funzioni matematiche: SIN calcola il valore della funzione trigonometrica seno e richiede un argomento espresso in radianti, per esempio SIN PI fornisce il valore 0; ABS calcola il valore assoluto dell'argomento, ovvero se è positivo lo lascia positivo mentre se è negativo lo trasforma in positivo. Successivamente vengono le istruzioni che disegnano il poligono, ovvero il viaggio della tartaruga. In sintesi, la tartaruga va nel centro indicato, di coordinate [X0P, Y0P], si volge in alto e percorre senza disegnare il raggio, gira a destra di 90° (questa è la direzione della tangente al cerchio circoscritto), poi gira di quanto basta per allinearsi al primo lato del poligono (si poteva girare in un sol colpo verso questa direzione, ma abbiamo lasciato il codice in questa forma sotto-ottimale per chiarire la geometria). A questo punto si abbassa la penna e si iniziano a disegnare i lati in successione, mediante il semplice ciclo REPEAT N [FORWARD L RIGHT A]. Le istruzioni finali all'interno della subroutine servono a scrivere un'etichetta, poco sotto al centro del poligono, con il numero di lati. Siccome è un codice che ci mette un certo tempo a girare (ovviamente questo dipende anche dal computer che si usa), quando il numero di lati diventa elevato, è utile per sapere a che punto si trova il processo – noi abbiamo provato fino a 500 lati. Da segnalare qui l'uso della variabile riservata (in LibreLogo) di REPCOUNT, che è il contatore di cicli. Inoltre, si usa la funzione STR che serve a trasformare il valore di REPCOUNT, che è un numero espresso internamente al computer in binario, nell'espressione alfanumerica del medesimo, che possa essere stampata sul foglio come qualsiasi altro testo. La stampa dell'etichetta è subordinata la fatto che si tratti dell'ultimo poligono. Questo controllo viene effettuato con l'istruzione di controllo IF, descritta nel capitolo successivo. Dopo il codice della subroutine, di nuovo in nero, c'è lo script vero e proprio, molto semplice. Le tre istruzioni HOME, X0P=POSITION e Y0P=POSITION servono per piazzare il centro dei poligoni nel centro del foglio, ma qui potremmo scegliere una qualsiasi altra posizione. Infine, la realizzazione della successione è affidata al ciclo REPEAT NP […]. Anche qui si usa il contatore di cicli, in questo caso, per chiamare la subroutine POLIGONO con il giusto numero di lati. Come dicevamo, questo script può richiedere del tempo, se fatto girare con un numero elevato di poligoni, diciamo da 10 in su, in dipendenza della velocità del processore che equipaggia il computer. Se capita di farlo partire inavvertitamente con un numero di lati eccessivo, o se lo si vuole fermare per qualsiasi altro motivo, lo si può fare con il tasto STOP\n. Se si supera il valore di circa 30 lati, si inizia a vedere un contorno apparentemente circolare. Più che si aumenta il numero di lati e più che la circolarità è “vera”.\n; Script per disegnare una successione di poligoni inscritti in un cerchio di raggio R dato\nHIDETURTLE; tartaruga invisibile\nNP = 20; numero poligoni\nR = 100; raggio poligoni – tengo fisso il raggio per tutti i poligoni cosicché risultano tutti inscritti nello stesso cerchio di raggio R\n; subroutine POLIGONO\n; argomenti:X0P: X del centro del poligono\n;Y0P: Y del centro del poligono\n;N: numero lati poligono\n;R: misura raggio\n;NP: numero poligoni (serve a scrivere l'etichetta)\nTO POLIGONO X0P Y0P N R NP\nA = 360/N; angoli supplementari degli angoli interni: quelli di cui gira\n; la tartaruga ad ogni vertice (N→∞ => A→0)\nAI = 180*(N-2)/N; angoli interni (N→∞ => AI→180)\nL = ABS(2*R*SIN(A/2*PI/180)); lato\nFILLCOLOR “white” PENDOWN CIRCLE 3 PENUP\nPOSITION [X0P,Y0P]; vado al centro\nHEADING 0; mi dirigo in su\nFORWARD R; percorro il raggio\nRIGHT 90; 90° a destra (direzione tangente al cerchio circoscritto)\nRIGHT (180 – AI)/2; direzione primo lato da disegnare\nPENDOWN; giù la penna\nPOSITION [X0P,Y0P]; torno al centro\nIF REPCOUNT = NP [\nFORWARD 10; vado un po' sotto per scrivere etichetta\nHEADING 0; mi giro in su per...\nLABEL “N = ” + STR REPCOUNT; … scrivere etichetta corrente\nHEADING 6h; mi rigiro in giù\nBACK 10; torno al centro\nEND; fine subroutine POLIGONO ; script vero e proprio HOME; vado al centro ma potrei andare anche altrove X0P = POSITION; X del centro del poligono Y0P = POSITION; Y del centro del poligono REPEAT NP [; ciclo sui poligoni N = REPCOUNT+2; numero lati poligono POLIGONO X0P Y0P N R NP ]\nDove sono sovrapposti i poligoni regolari, a partire dal triangolo equilatero (N=3), fino a quello con 30 lati.\nRiprendendo l'esempio della costruzione di case con un'apposita subroutine, si provi ad arricchire il paesaggio...\n↑ Ricordiamo che π rappresenta il rapporto fra la misura della circonferenza e il diametro di un cerchio, e che si tratta di numero irrazionale, quindi con un numero infinito di cifre decimali.\n↑ Questa è una nozione che a qualcuno può sembrare oscura. Molto in sintesi: una cosa sono i numeri espressi in un formato con il quale il computer possa fare i calcoli e un'altra sono i numeri espressi come caratteri, che possono essere inframezzati in un testo qualsiasi. Nel primo caso si tratta di una codifica per il computer che è binaria, l'unico modo che consenta al computer di fare operazioni matematiche. Nel secondo di tratta di una codifica che serve a rappresentare i caratteri sullo schermo, o in una stampa; questa è una codifica che ha una finalità puramente grafica e che il computer non può usare per fare i calcoli. Esistono molti tipi di codifiche, le più note delle quali sono ASCII E UNICODE. Chi desidera chiarimenti si può rivolgere all'autore di questo testo.\nIF – AND, OR, NOTModifica\nIn questa versione proponiamo questo capitolo in forma estremamente sintetica. Giusto per completezza, perché il costrutto che si descrive è uno di quelli fondamentali in qualsiasi linguaggio di programmazione, oltre alle variabili, le ripetizioni e le procedure. Si tratta di disporre del modo per interrompere il flusso normale delle istruzioni, passando eventualmente a eseguire sezioni di codice diverse in dipendenza dello stato di certe variabili. L'istruzione che realizza questo in LibreLogo è IF, che per essere eseguita richiede la definizione di una condizione logica. Vediamo un esempio, riprendendo il codice per disegnare un cerchio, così come introdotto da Papert nel capitolo 2:\nSe facciamo girare questo codice la Tartaruga disegna un cerchio ma non si ferma mai, ripassandolo infinite volte. Naturalmente noi possiamo fermarla con il tasto STOP\n, ma è possibile insegnarle a fermarsi da sola. Ecco come:\nIF REPCOUNT = 90 [ STOP ]\nCome si vede, abbiamo aggiunto una sola istruzione, IF REPCOUNT = 90 [ STOP ], che equivale a dire alla Tartaruga: se il contatore dei cicli ha raggiunto il valore di 90 allora fermati. Siccome ad ogni ciclo ruota di 1 grado, in questo modo ne interrompiamo il disegno quando in totale avrà ruotato di 90 gradi, ovvero quando avrà disegnato un quarto di cerchio. Provare e variare per vedere...\nLa condizione in questo esempio è espressa da REPCOUNT = 90. Si possono usare anche gli operatori “minore di”, <, e “maggiore di”, >, e le condizioni si possono combinare insieme con gli operatori logici AND, OR e NOT. L'AND posto fra due condizioni crea una condizione globale vera se sono ambedue vere. L'OR posto fra due condizioni crea una condizione globale vera se sono ambedue vere oppure anche una sola delle due. Il NOT posto prima di una condizione ne inverte l'esito: la rende falsa se è vera e viceversa. Inoltre si può costruire l'istruzione in maniera che se questa è vera esegue una prima sezione di codice, mentre se è falsa ne esegue un'altra. In questa versione del manuale ci limitiamo a riportare giusto un esempio riassuntivo:\nIF A < 10 AND NOT A = 5 [ PRINT “Vero!” ] [ PRINT “Falso!” ]\nTradotto in parole:\nse la variabile A è minore di 10 e allo stesso tempo (AND), è diversa da 5 (NOT), allora esegui PRINT “Vero!”, altrimenti esegui PRINT “Falso!”.\nQui 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.\nI 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.\nÈ 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.\nIl 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.\n; FIGURA 1\n; Le coordinate della pagina\n; Versione 1.\n; A.R. Formiconi\n; 25 luglio 2016\n; Versione scritta come viene, senza particolari ottimizzazioni\n; Predispone tutto\nA = 200\t\t; lato corto del rettangolo che rappresenta la pagina\nB = 282\t\t; lato lungo\nFILLCOLOR [230, 230, 230]\t; fissa a grigio chiaro il colore di riempimento\nFORWARD B/2\t\t; si dirige verso l'angolo in alto a sinistra\nHEADING 3h\t\t; e punta verso destra (ore 3)\n; disegna il rettangolo, ruotando in senso orario\nFILL\t\t\t; riempie il rettangolo\nFORWARD B\t\t; si posiziona nell'angolo in alto a sinistra del foglio\n; ripete il giro marcando gli angoli e ponendo le scritte\nHEADING 3h\t\t; angolo alto destro\nFILLCOLOR [50, 50, 50]\t; fissa un grigio più scuro per i cerchietti\nFORWARD 10 LEFT 90 FORWARD 15\nLABEL “[PAGESIZE, 0]”\nBACK 15 RIGHT 90 BACK 10\nRIGHT 90\t\t; angolo basso destro\nFORWARD 15 LEFT 90 FORWARD 30 LEFT 90\nLEFT 90 FORWARD 30 RIGHT 90 FORWARD 15\nRIGHT 90\t\t; angolo basso sinistro\nLABEL “[0, PAGESIZE]”\nFORWARD B\t\t; angolo alto sinistro\nLEFT 90 FORWARD 10 RIGHT 90\nLABEL “[0, 0]”\nHIDETURTLE\t\t; mando la tartaruga a dormire\n; FIGURA 2\n; L'effetto dell'istruzione POSITION e le coordinate della pagina\n; disegna il percorso della tartaruga in seguito all'istruzione POSITION [350,320]\nHOME\t\t\t; mi posiziono al centro\nPENUP\t\t\t; senza disegnare...\nPOSITION [298, 430]\t; vado dove voglio piazzare...\nHEADING 0\t\t; l'etichetta con le...\nLABEL “[298, 421]”\t; coordinate del centro\nHOME\t\t\t; torno al centro e...\nPENDOWN\t\t; disegno...\nCIRCLE 5\t\t; il cerchietto centrale\nFILLCOLOR “green”\t; fisso il colore verde per la tartaruga, che mostrerò\nPOSITION [350,320]\t; applico POSITION [350, 320]\nP = POSITION\t\t; memorizzo tale posizione...\nH = HEADING\t\t; e direzione\nPENUP\t\t\t; alzo la penna\nPOSITION [300,320]\t; mi sposto un po' per piazzare...\nHEADING 0\t\t; orientata correttamente\nLABEL “[350, 320]”\t; l'etichetta\nPOSITION P\t\t; ritorno alla posizione e direzione\nHEADING H\t\t; per lasciarvi visibile la tartaruga\n; FIGURA 3\n; I riferimenti per l'istruzione HEADING\n; Versione scritta in maniera più ordinata e strutturata, facendo uso delle “subroutine”\n; La strutturazione del software di questo tipo consente di rendere il codice più modulare\n; e più mantenibile\n; Prima vengono le subroutine e alla fine il programma vero e proprio. Prima vanno messi\n; i frammenti più elementari, in maniera che LibreLogo li legga per primi. Questo serve\n; perché quando nel codice viene citata una subroutine, questa deve essere già stata\n; analizzata da LibreLogo.\n; Subroutine BR per disegnare un segmento lungo 10 pt dalla posizione e lungo la\n; direzione corrente senza muoversi (come risultato finale)\n; \tP: posizione corrente\n;\tH: direzione corrente\nTO BR P H\n; Subroutine TARROW per disegnare la punta di una freccia\nH = HEADING\nBR P H\n; Subroutine LBA scrivere il testo contenuto in T in vetta al segmento\n; di lunghezza L e ruotato dell'angolo A\n; \tL: lunghezza del segmento\n;\tA: angolo di rotazione del segmento\n;\tT: testo da scrivere nell'etichetta\nTO LBA L A T\nFORWARD L/10 + L/5 * SIN A*PI/180\n; Subroutine LB scrivere il testo contenuto in T in una posizione determinata in\n; coordinate polari rispetto alla posizione corrente, mediante la\n; distanza L e l'angolo A\n; \tL: distanza\n;\tA: angolo\nTO LB L A T\nP0 = POSITION\nS =  SIN A*PI/180\nC =  COS A*PI/180\nPOSITION [P0 + L * C, P0 - L * S]\n; Subroutine ARROW per disegnare, a partire dalla posizione corrente,\n; una freccia di lunghezza L, inclinata di un angolo A, e in vetta una\n; etichetta con il testo contenuto in T\n; \tL: lunghezza della freccia\n;\tA: angolo di rotazione della freccia\nTO ARROW P0 A0 L A T\nLBA L A T\n; Questo è il programma vero e proprio che, come si vede, grazie al ricorso\n; alle subroutine, è abbastanza conciso.\nCLEARSCREEN\t\t\t; cancello il foglio\nHOME\t\t\t\t\t; mando a casa la tartaruga\nHIDETURTLE\t\t\t; faccio il disegno senza vedere la tartaruga\nFILLCOLOR [230, 230, 230]\t; fisso il riempimento a un grigio scuro\nCIRCLE 5\t\t\t\t; disegno un cerchietto nella posizione centrale\nP0 = POSITION\t\t\t; memorizzo tale posizione iniziale...\nA0 = HEADING\t\t\t; e anche la direzione iniziale\nL = 150\t\t\t\t; faccio la freccia lunga 150 pt\nA = 60\t\t\t\t\t; e la voglio inclinata di 60°\nPENSIZE 1 ARROW P0 A0 L 0 “HEADING 0”\t; freccia verticale\nPENSIZE 0.5 ARROW P0 A0 L A “HEADING 30”\t; freccia a 60°\nPENSIZE 1 ARROW P0 A0 L 90 “HEADING 90”\t\t; freccia orizzontale\nELLIPSE [L/3, L/3, 0, A, 3]\t\t\t\t\t; arco di cerchio piccolo\nLB L/4 A “30°” \t\t\t\t\t\t; etichetta “30°”\nELLIPSE [L*2, L*2, 0, 90, 3] \t\t\t\t; arco di cerchio grande\n; FIGURA 4\n; Esempi di spessore del tratto\n; In questo esempio si illustra l'impiego dell'istruzione REPEAT, per realizzare i “cicli” (“loop”)\nREPEAT  10 [\nPENUP FORWARD 50\nLABEL  “PENWIDTH ” + STR REPCOUNT-1\nEstratto da "https://it.wikibooks.org/w/index.php?title=Piccolo_manuale_di_LibreLogo/Testo_completo&oldid=330438"\nUltima modifica il 9 ago 2017 alle 19:39\nQuesta pagina è stata modificata per l'ultima volta il 9 ago 2017 alle 19:39.


Amici: quarto giudice Carlo Verdone, ospiti i Modà e The Kolors - Dtti\nHome » Amici: quarto giudice Carlo Verdone, ospiti i Modà e The Kolors\nAmici: quarto giudice Carlo Verdone, ospiti i Modà e The Kolors\nDopo l’esordio spettacolare e leader negli ascolti della prima puntata, secondo appuntamento sabato 9 aprile in prima serata su Canale 5 con Amici di Maria de Filippi, il talent show dei record della tv italiana. A raccogliere il testimone di quarto giudice dopo il premio Oscar Kevin Spacey un’altra eccellenza tutta italiana del cinema, l’attore, regista e sceneggiatore Carlo Verdone che avrà il delicato compito di valutare le performance dei talenti in gara, insieme ai colleghi di giuria Sabrina Ferilli, Loredana Bertè e Anna Oxa.\nDall’altra parte J-Ax e Nek, direttori artistici dei blu, forti della vittoria della prima puntata, non hanno subito alcuna defezione e possono ancora schierare la squadra al gran completo composta da Cristiano Cosa, Chiara Grispo, e Sergio Sylvestre, per il canto e Michele Lanzeroti, Alessio Gaudino e Patrizio Ratto per il ballo. Nella seconda puntata la sfida a squadre si arricchisce della presenza di due ospiti musicali d’eccezione i Modà e i The Kolors, vincitori della passata edizione di Amici. Durante la gara i direttori artistici potranno avvalersi del prezioso giudizio di Morgan, novità assoluta dell’edizione numero quindici, nella valutazione delle esibizione dei ragazzi, togliendo la voce ad uno dei tre giurati fissi del programma.\nIl racconto di storie di attualità e di sentimenti attraverso la danza, è affidato ai quadri creati da Giuliano Peparini, direttore artistico del programma e regista e coreografo di fama internazionale.\nL’appuntamento con la seconda puntata di #Amici15 è sabato 9 aprile in prima serata su Canale 5.


Sarà presente anche Confindustria che presenterà il proprio punto di vista sul tessuto produttivo del nostro Sud. Per poter partecipare agli incontri sarà necessario la registrazione. Le scuole interessate ad aderire alla proposta devono compilare il format entro il 21 novembre Valentina Piersanti Vedi dettagli. Questo indirizzo email è protetto dagli spambots. La nuova programmazione è stata avviata rafforzando la cooperazione istituzionale e la programmazione coordinata con le regioni attraverso la Cabina di Regia del Fondo Sviluppo e Coesione FSC e una nuova politica meridionalista attraverso il Masterplan e i Patti per il Sud, una politica fondata su un ruolo attivo del Governo e su una forte responsabilizzazione delle Amministrazioni Territoriali. Obbligo presenza sino al termine del seminario previsto per le ore Tra questi ne abbiamo selezionati cento e dieci di questi, ritenuti i più interessanti, saranno presentati a FORUM PA in questo evento. Successivamente, grazie all'intenso networking realizzato in alcune sedi decisive nazionali, nella Legge 11 dicembre , n. Il convegno rappresenterà un'occasione di confronto sulle principali leve necessarie ad abilitare lo sviluppo di servizi digitali "by design", e in particolare:. Il futuro è una città a misura di cittadino munito di smartphone e device mobili.