<!--Dear translator: please NEVER translate the id or anything inside the tags as they are needed in english by the application Thanks a lot in advance.--> <chapter id="reference"> <title >Guida di &kturtle; alla programmazione &logo;</title> <para >Questa è la guida del &logo; di &kturtle;. In questo capitolo accenniamo brevemente a tutti i <link linkend="different-instructions" >diversi tipi di istruzioni</link >. Quindi vengono spiegati uno ad uno i <link linkend="commands" >comandi</link >. Poi vengono spiegati i <link linkend="containers" >contenitori</link >, la <link linkend="math" >matematica</link >, le <link linkend="questions" >domande</link > e le <link linkend="controlling-execution" >istruzioni di controllo dell'esecuzione</link >. Infine ti viene mostrato come creare i tuoi comandi con <link linkend="learn" >impara</link >.</para> <sect1 id="different-instructions"> <title >Differenti tipi di istruzioni</title> <para >Come in qualsiasi altro linguaggio, il LOGO ha differenti tipi di parole e di simboli. Qui vengono brevemente spiegate le differenze tra i tipi.</para> <sect2 id="command"> <title >Comandi</title> <para >Usando i comandi tu dici alla tartaruga o a &kturtle; di fare qualcosa. Alcuni comandi richiedono argomenti, alcuni restituiscono risultati. <screen ># avanti è un comando che richiede un argomento, in questo caso il numero 100: avanti 100 </screen> </para> <para >Per una panoramica dettagliata di tutti i comandi che &kturtle; supporta vai <link linkend="commands" >qui</link >.</para> </sect2> <sect2 id="number"> <title >Numeri</title> <para >Molto probabilmente conosci già i numeri. Il modo in cui i numeri sono usati in &kturtle; non è molto differente dalla lingua parlata o dalla matematica. </para> <para >Abbiamo i cosiddetti numeri naturali: <userinput >0</userinput >, <userinput >1</userinput >, <userinput >2</userinput >, <userinput >3</userinput >, <userinput >4</userinput >, <userinput >5</userinput >, ecc. I numeri negativi: <userinput >-1</userinput >, <userinput >-2</userinput >, <userinput >-3</userinput >, ecc. E i numeri decimali, o numeri con la virgola, per esempio: <userinput >0.1</userinput >, <userinput >3.14</userinput >, <userinput >33.3333</userinput >, <userinput >-5.05</userinput >, <userinput >-1.0</userinput >. </para> <para >I numeri possono essere usati in <link linkend="math" >calcoli matematici</link > e in <link linkend="questions" >domande</link >. Possono anche essere inseriti in <link linkend="containers" >contenitori</link >.</para> <para >I numeri sono <glossterm >evidenziati</glossterm > con il blu nell'<link linkend="the-code-editor" >editor del codice</link >.</para> </sect2> <sect2 id="string"> <title >Stringhe</title> <para >Prima un esempio: <screen> scrivi "Ciao, sono una stringa." </screen > In questo esempio <userinput >scrivi</userinput > è un comando dove <userinput >"Ciao, sono una stringa."</userinput > è una stringa. Le stringhe iniziano e finiscono con il carattere <userinput >"</userinput >, e grazie a questi caratteri &kturtle; sa che è una stringa.</para> <para >Le stringhe possono essere inserite in <link linkend="containers" >contenitori</link >. Tuttavia non possono essere usate in <link linkend="math" >calcoli matematici</link > e <link linkend="questions" >domande</link >.</para> <para >Le stringhe sono <glossterm >evidenziate</glossterm > con il rosso scuro nell'<link linkend="the-code-editor" >editor del codice</link >.</para> </sect2> <sect2 id="name"> <title >Nomi</title> <para >Quando usi il linguaggio di programmazione &logo; crei nuove cose. Se scrivi un programma spesso avrai bisogno di <link linkend="containers" >contenitori</link > e, in alcuni casi, di <link linkend="learn" >impara</link > per creare nuovi comandi. Quando crei un <link linkend="containers" >contenitore</link > o un nuovo comando con <link linkend="learn" >impara</link > dovrai specificare un nome.</para> <para >Puoi scegliere qualsiasi nome, a meno che non abbia già un significato. Per esempio non puoi chiamare <link linkend="forward" >avanti</link > un contenitore, dato che quel nome è già usato per un comando, e per questo ha un significato. <screen> # qui avanti è usato come contenitore, ma ha già un significato # così questa riga genererà un errore: avanti = 20 # questa funziona: avanti 20 </screen > I nomi possono contenere solo lettere, numeri e trattini bassi (_). Devono tuttavia iniziare con una lettera. </para> <para >Per una spiegazione più esauriente e per vedere più esempi leggi la documentazione sui <link linkend="containers" >contenitori</link > e sul comando <link linkend="learn" >impara</link >. </para> </sect2> <sect2 id="assignment"> <title >Assegnamenti</title> <para >Un assegnamento viene effettuato con il simbolo <userinput >=</userinput >. Nei linguaggi di programmazione è meglio leggere il singolo <userinput >=</userinput > non come "uguale" ma come "diventa". La parola "uguale" è più appropriata per <userinput >==</userinput > che è una <link linkend="questions" >domanda</link >.</para> <para >Gli assegnamenti sono usati generalmente per due motivi, (1) per aggiungere <link linkend="containers" >contenitori</link > e (2) per modificare il contenuto di un contenitore. Per esempio: <screen >x = 10 # il contenitore x ora contiene il numero 10 W = "La mia età è: " # il contenitore W ora contiene la stringa "La mia età è: " # questa riga scrive il contenuto dei contenitori 'W' e 'x' sull'area di disegno scrivi W + x </screen> </para> <para >Per vedere più esempi leggi la sezioni che spiega i <link linkend="containers" >contenitori</link >.</para> </sect2> <sect2 id="math-symbols"> <title >Simboli matematici</title> <para >&kturtle; supporta tutti i simboli matematici base: addizione (<userinput >+</userinput >), sottrazione (<userinput >-</userinput >), moltiplicazione (<userinput >*</userinput >), divisione (<userinput >/</userinput >) e le parentesi <userinput >(</userinput > e <userinput >)</userinput >.</para> <para >Per una spiegazione più esauriente e per vedere più esempi leggi la sezione sulla <link linkend="math" >matematica</link >.</para> </sect2> <sect2 id="question"> <title >Domande</title> <para >Possiamo chiedere semplici domande la cui risposta sarà "vero" o "falso".</para> <para >L'uso delle domande è ampiamente spiegato nella sezione sulle <link linkend="questions" >domande</link >.</para> </sect2> <sect2 id="questions-glue"> <title >I "collanti" delle domande</title> <para >Le domande posso essere unite assieme con i cosiddetti "collanti delle domande". Le parole "collanti" sono <userinput >e</userinput > <userinput >o</userinput >, e un "collante" speciale: <userinput >non</userinput >.</para> <para >L'uso dei "collanti" delle domande è spiegato nella sezione <link linkend="question-glue" >I "collanti" delle domande</link >.</para> </sect2> <sect2 id="comment"> <title >Commenti</title> <para >I commenti sono linee che iniziano con <userinput >#</userinput >. Per esempio: <screen> # questo è un commento! scrivi "questo non è un commento" # la linea precedente non è un commento, ma la linea successiva sì: # scrivi "questo non è un commento" </screen > Noi possiamo aggiungere commenti al codice, affinché lo leggiamo noi stessi o lo leggano altri. I commenti sono usati per: (1) aggiungere una piccola descrizione al programma, (2) spiegare come funziona un pezzo di codice nel caso sia un po' complesso, e (3) per "commentare via" linee di codice che dovrebbero essere (temporaneamente) ignorate (guarda l'ultima linea dell'esempio).</para> <para >Le linee commentate sono <glossterm >evidenziate</glossterm > con il giallo scuro nell'<link linkend="the-code-editor" >editor del codice</link >.</para> </sect2> </sect1> <sect1 id="commands"> <title >Comandi</title> <para >Usando i comandi tu dici alla tartaruga o a &kturtle; di fare qualcosa. Alcuni comandi richiedono argomenti, alcuni restituiscono risultati. In questa sezione spieghiamo tutti i comandi che possono essere usati in &kturtle;. Nota che tutti i comandi predefiniti di cui discutiamo qui sono <glossterm >evidenziati</glossterm > con il verde scuro nell'<link linkend="the-code-editor" >editor del codice</link >, ciò può aiutarti a distinguerli.</para> <sect2 id="moving-the-turtle"> <title >Muovere la tartaruga</title> <para >Ci sono vari comandi per muovere la tartaruga sullo schermo.</para> <sect3 id="forward"> <title >avanti (av)</title> <variablelist> <varlistentry > <term >avanti</term> <listitem ><para ><screen >avanti X</screen> <userinput >avanti</userinput > muove la tartaruga avanti di X pixel. Quando la penna è giù la tartaruga lascerà un tratto. <userinput >avanti</userinput > può essere abbreviato in <userinput >av</userinput ></para ></listitem> </varlistentry> </variablelist> </sect3> <sect3 id="backward"> <title >indietro (in)</title> <variablelist> <varlistentry > <term >indietro</term> <listitem ><para ><screen >indietro X</screen> <userinput >indietro</userinput > muove la tartaruga indietro di X pixel. Quando la penna è giù la tartaruga lascerà un tratto. <userinput >indietro</userinput > può essere abbreviato in <userinput >in</userinput >.</para ></listitem> </varlistentry> </variablelist> </sect3> <sect3 id="turnleft"> <title >sinistra (sx)</title> <variablelist> <varlistentry > <term >sinistra</term> <listitem ><para ><screen >sinistra X</screen> <userinput >sinistra</userinput > comanda alla tartaruga di girare X gradi a sinistra. <userinput >sinistra</userinput > può essere abbreviato in <userinput >sx</userinput >.</para ></listitem> </varlistentry> </variablelist> </sect3> <sect3 id="turnright"> <title >destra (dx)</title> <variablelist> <varlistentry > <term >destra</term> <listitem ><para ><screen >destra X</screen> <userinput >destra</userinput > comanda alla tartaruga di girare X gradi a destra. <userinput >destra</userinput > può essere abbreviato in <userinput >dx</userinput >.</para ></listitem> </varlistentry> </variablelist> </sect3> <sect3 id="direction"> <title >direzione (dir)</title> <variablelist> <varlistentry > <term >direzione</term> <listitem ><para ><screen >direzione X</screen> <userinput >direzione</userinput > imposta la direzione della tartaruga a X gradi partendo da zero, e così non è relativo alla precedente direzione della tartaruga. <userinput >direzione</userinput > può essere abbreviato in <userinput >dir</userinput >.</para ></listitem> </varlistentry> </variablelist> </sect3> <sect3 id="center"> <title >centro</title> <variablelist> <varlistentry > <term >centro</term> <listitem ><para ><screen >centro</screen> <userinput >centro</userinput > muove la tartaruga al centro dell'area di disegno.</para ></listitem> </varlistentry> </variablelist> </sect3> <sect3 id="go"> <title >vai</title> <variablelist> <varlistentry > <term >vai</term> <listitem ><para ><screen >vai X,Y</screen> <userinput >vai</userinput > comanda alla tartaruga di andare in un certo punto dell'area di disegno. Questo punto dista X <glossterm linkend="pixels" >pixel</glossterm > da sinistra e Y <glossterm linkend="pixels" >pixel</glossterm > dall'alto dell'area di disegno. Nota che usando il comando <userinput >vai</userinput > la tartaruga non disegnerà una linea.</para ></listitem> </varlistentry> </variablelist> </sect3> <sect3 id="gox"> <title >vaix</title> <variablelist> <varlistentry > <term >vaix</term> <listitem ><para ><screen >vaix X</screen> <userinput >vaix</userinput > usando questo comando la tartaruga si muoverà a X <glossterm linkend="pixels" >pixel</glossterm > dalla sinistra dell'area di disegno mantenendo la sua altezza.</para ></listitem> </varlistentry> </variablelist> </sect3> <sect3 id="goy"> <title >vaiy</title> <variablelist> <varlistentry > <term >vaiy</term> <listitem ><para ><screen >vaiy Y</screen> <userinput >vaiy</userinput > usando questo comando la tartaruga si muoverà a Y <glossterm linkend="pixels" >pixel</glossterm > dall'alto dell'area di disegno mantenendosi alla stessa distanza dal bordo sinistro dell'area di disegno.</para ></listitem> </varlistentry> </variablelist> </sect3> </sect2> <sect2 id="pen"> <title >La tartaruga ha una penna</title> <para >La tartaruga ha una penna che disegna una linea quando la tartaruga si muove. Ci sono alcuni comandi che controllano la penna. In questa sezione vengono spiegati questi comandi.</para> <sect3 id="penup"> <title >pennasu (ps)</title> <variablelist> <varlistentry > <term >pennasu</term> <listitem ><para ><screen >pennasu</screen> <userinput >pennasu</userinput > alza la penna dall'area di disegno. Quando la penna è <quote >su</quote > non sarà disegnata alcuna linea quando la tartaruga si muove. Vedi anche <userinput >pennagiu</userinput >. <userinput >pennasu</userinput > può essere abbreviato in <userinput >ps</userinput >.</para ></listitem> </varlistentry> </variablelist> </sect3> <sect3 id="pendown"> <title >pennagiu (pg)</title> <variablelist> <varlistentry > <term >pennagiu</term> <listitem ><para ><screen >pennagiu</screen> <userinput >pennagiu</userinput > abbassa la penna sull'area di disegno. Quando la penna è <quote >giù</quote > sull'area di disegno sarà disegnata una linea quando la tartaruga si muove. Vedi anche <userinput >pennasu</userinput >. <userinput >pennagiu</userinput > può essere abbreviato in <userinput >pg</userinput >.</para ></listitem> </varlistentry> </variablelist> </sect3> <sect3 id="setpenwidth"> <title >spessorepenna (sp)</title> <variablelist> <varlistentry > <term >spessorepenna</term> <listitem ><para ><screen >spessorepenna X</screen> <userinput >spessorepenna</userinput > imposta lo spessore della penna (lo spessore della linea) a X <glossterm linkend="pixels" >pixel</glossterm >. <userinput >spessorepenna</userinput > può essere abbreviato in <userinput >sp</userinput >.</para ></listitem> </varlistentry> </variablelist> </sect3> <sect3 id="setfgcolor"> <title >colorepenna (cp)</title> <variablelist> <varlistentry > <term >colorepenna</term> <listitem ><para ><screen >colorepenna R,G,B</screen> <userinput >colorepenna</userinput > imposta il colore della penna. <userinput >colorepenna</userinput > richiede una <glossterm linkend="rgb" >combinazione RGB</glossterm > come argomento. <userinput >colorepenna</userinput > può essere abbreviato in <userinput >cp</userinput >.</para ></listitem> </varlistentry> </variablelist> </sect3> </sect2> <sect2 id="canvas"> <title >Comandi per controllare l'area di disegno</title> <para >Ci sono vari comandi per controllare l'area di disegno.</para> <sect3 id="resizecanvas"> <title >dimensionesfondo (ds)</title> <variablelist> <varlistentry> <term >dimensionesfondo</term> <listitem ><para ><screen >dimensionesfondo X,Y</screen> Con il comando <userinput >dimensionesfondo</userinput > puoi impostare la dimensione dell'area di disegno. Richiede X e Y come argomenti, dove X è la nuova larghezza dell'area di disegno in <glossterm linkend="pixels" >pixel</glossterm >, e Y è la nuova altezza dell'area di disegno in <glossterm linkend="pixels" >pixel</glossterm >. <userinput >dimensionesfondo</userinput > può essere abbreviato in <userinput >ds</userinput >.</para ></listitem> </varlistentry> </variablelist> </sect3> <sect3 id="setbgcolor"> <title >coloresfondo (cs)</title> <variablelist> <varlistentry > <term >coloresfondo</term> <listitem ><para ><screen >coloresfondo R,G,B</screen> <userinput >coloresfondo</userinput > imposta il colore dell'area di disegno. <userinput >coloresfondo</userinput > richiede una <glossterm linkend="rgb" >combinazione RGB</glossterm > come argomento. <userinput >coloresfondo</userinput > può essere abbreviato in <userinput >cs</userinput >.</para ></listitem> </varlistentry> </variablelist> </sect3> <sect3 id="wrapon"> <title >attorno</title> <variablelist> <varlistentry > <term >attorno</term> <listitem ><para ><screen >attorno</screen> Con il comando <userinput >attorno</userinput > puoi attivare l'<glossterm linkend="wrapping" >avvolgimento</glossterm > per l'area di disegno. Consulta il glossario se vuoi sapere cosa è <glossterm linkend="wrapping" >l'<quote >avvolgimento</quote ></glossterm >.</para ></listitem> </varlistentry> </variablelist> </sect3> <sect3 id="wrapoff"> <title >muro</title> <variablelist> <varlistentry > <term >muro</term> <listitem ><para ><screen >muro</screen> Con il comando <userinput >muro</userinput > puoi disattivare l'<glossterm linkend="wrapping" >avvolgimento</glossterm > per l'area di disegno: ciò significa che la tartaruga può muoversi al di fuori dell'area di disegno e <quote >perdersi</quote >. Consulta il glossario se vuoi sapere cosa è <glossterm linkend="wrapping" >l'<quote >avvolgimento</quote ></glossterm >.</para ></listitem> </varlistentry> </variablelist> </sect3> </sect2> <sect2 id="clean"> <title >Comandi per fare pulizia</title> <para >Ci sono due comandi per pulire l'area di disegno dopo che hai fatto confusione.</para> <sect3 id="clear"> <title >pulisci (cls)</title> <variablelist> <varlistentry > <term >pulisci</term> <listitem ><para ><screen >pulisci</screen> Con <userinput >pulisci</userinput > puoi pulire tutti i disegni dall'area di disegno. Tutte le altre cose rimangono: la posizione e l'angolo della tartaruga, il colore dell'area di disegno, la visibilità della tartaruga e la dimensione dell'area di disegno. <userinput >pulisci</userinput > può essere abbreviato in <userinput >cls</userinput >.</para ></listitem> </varlistentry> </variablelist> </sect3> <sect3 id="reset"> <title >ricomincia</title> <variablelist> <varlistentry > <term >ricomincia</term> <listitem ><para ><screen >ricomincia</screen> <userinput >ricomincia</userinput > pulisce molto più accuratamente del comando <userinput >pulisci</userinput >. Dopo un comando <userinput >ricomincia</userinput > tutto ritorna come era quando hai avviato &kturtle;. La tartaruga è posizionata al centro dello schermo, il colore dell'area di disegno è bianco e la tartaruga disegna linee nere sull'area di disegno.</para ></listitem> </varlistentry> </variablelist> </sect3> </sect2> <sect2 id="sprites"> <title >La tartaruga è un folletto</title> <para >Prima una breve spiegazione di cosa sono i folletti: i folletti sono piccoli disegni che possono essere mossi in giro per lo schermo, come spesso vediamo nei giochi per il computer. Anche la nostra tartaruga è un folletto. Per maggiori informazioni vedi la voce di glossario sui <glossterm linkend="sprites" >folletti</glossterm >. </para> <para >Di seguito troverai una descrizione completa di tutti i comandi che lavorano con i folletti.</para> <para >[L'attuale versione di &kturtle; non supporta ancora l'uso di folletti diversi dalla tartaruga. Con le future versioni potrai cambiare la tartaruga in qualcos'altro creato da te]</para> <sect3 id="spriteshow"> <title >mostra</title> <variablelist> <varlistentry > <term >mostra (ms)</term> <listitem ><para ><screen >mostra</screen> <userinput >mostra</userinput > rende nuovamente visibile la tartaruga dopo che è stata nascosta. <userinput >mostra</userinput > può essere abbreviato in <userinput >ms</userinput >.</para ></listitem> </varlistentry> </variablelist> </sect3> <sect3 id="spritehide"> <title >nascondi (ns)</title> <variablelist> <varlistentry > <term >nascondi</term> <listitem ><para ><screen >nascondi</screen> <userinput >nascondi</userinput > nasconde la tartaruga. Ciò può essere usato se non conviene che la tartaruga appaia nel tuo disegno. <userinput >nascondi</userinput > può essere abbreviato in <userinput >ns</userinput >.</para ></listitem> </varlistentry> </variablelist> </sect3> </sect2> <sect2 id="writing"> <title >Possono le tartarughe scrivere del testo?</title> <para >La risposta è: <quote >sì</quote >. La tartaruga può scrivere: scrive tutto quello che tu le comandi di scrivere.</para> <sect3 id="print"> <title >scrivi</title> <variablelist> <varlistentry > <term >scrivi</term> <listitem ><para ><screen >scrivi X</screen> Il comando <userinput >scrivi</userinput > è usato per comandare alla tartaruga di scrivere qualcosa sull'area di disegno. <userinput >scrivi</userinput > accetta numeri e stringhe come parametri. Puoi scrivere vari numeri e stringhe usando il simbolo <quote >+</quote >. Guarda qui un piccolo esempio: <screen >anno = 2003 autore = "Cies" scrivi autore + " ha iniziato il progetto KTurtle nel " + anno + " e ancora si diverte a lavorarci!" </screen> </para ></listitem> </varlistentry> </variablelist> </sect3> <sect3 id="fontsize"> <title >dimensionecarattere</title> <variablelist> <varlistentry > <term >dimensionecarattere</term> <listitem ><para ><screen >dimensionecarattere X</screen> <userinput >dimensionecarattere</userinput > imposta la dimensione del tipo di carattere usato dal comando <userinput >scrivi</userinput >. <userinput >dimensionecarattere</userinput > richiede un argomento che dovrebbe essere un numero. La dimensione è impostata in <glossterm linkend="pixels" >pixel</glossterm >.</para ></listitem> </varlistentry> </variablelist> </sect3> </sect2> <sect2 id="random"> <title >Un comando che lancia dadi per te</title> <para >C'è comando che lancia un dado per te, ed è chiamato <userinput >casuale</userinput >, ed è molto utile per avere "risultati inattesi".</para> <variablelist> <varlistentry > <term >casuale</term> <listitem ><para ><screen >casuale X,Y</screen> <userinput >casuale</userinput > è un comando che richiede parametri e restituisce un valore. Come parametri richiede due numeri, il primo(X) imposta il valore minimo restituito, il secondo (Y) imposta il massimo. Il valore restituito è un numero scelto casualmente maggiore o uguale del minimo e minore o uguale del massimo. Qui vi è un piccolo esempio: <screen> ripeti 500 [ x = casuale 1,20 avanti x sinistra 10 - x ] </screen > Usando il comando <userinput >casuale</userinput > puoi aggiungere un po' di caos al tuo programma.</para ></listitem> </varlistentry> </variablelist> </sect2> <sect2 id="dialogs"> <title >Inserire dati e visualizzare messaggi con finestre di dialogo</title> <para >Una finestra di dialogo è una piccola finestra a comparsa che mostra un messaggio o chiede di inserire qualcosa. &kturtle; ha due comandi per le finestre di dialogo, chiamati: <userinput >messaggio</userinput > e <userinput >finestrainserimento</userinput ></para> <sect3 id="message"> <title >messaggio</title> <variablelist> <varlistentry > <term >messaggio</term> <listitem ><para ><screen >messaggio X</screen> Il comando <userinput >messaggio</userinput > richiede una <link linkend="string" >stringa</link > come argomento. Mostra una finestra a comparsa che contiene il testo della <link linkend="string" >stringa</link >. <screen >anno = 2003 autore = "Cies" scrivi autore + " ha iniziato il progetto KTurtle nel " + anno + " e ancora si diverte a lavorarci!" </screen> </para ></listitem> </varlistentry> </variablelist> </sect3> <sect3 id="inputwindow"> <title >finestrainserimento</title> <variablelist> <varlistentry > <term >finestrainserimento</term> <listitem ><para ><screen >finestrainserimento X</screen> <userinput >finestrainserimento</userinput > richiede una <link linkend="string" >stringa</link > come argomento. Mostra una finestra a comparsa che contiene il testo della stringa, allo stesso modo di <link linkend="message" >messaggio</link >. Ma in più vi è un campo di inserimento nella finestra di dialogo. Attraverso questo campo di inserimento l'utente può inserire un <link linkend="number" >numero</link > o una <link linkend="string" >stringa</link > che può essere memorizzata in un <link linkend="containers" >contenitore</link >. Per esempio <screen> in = finestrainserimento "Qual è la tua età?" diff = 2003 - in scrivi "Ad un certo punto del 2003 avevi " + diff + " anni." </screen > Quando un utente annulla la finestra di dialogo, o non inserisce niente, il <link linkend="containers" >contenitore</link > è svuotato.</para ></listitem> </varlistentry> </variablelist> </sect3> </sect2> </sect1> <sect1 id="containers"> <title >Contenitori</title> <para >I contenitori sono lettere o parole che possono essere usate dal programmatore per memorizzare un numero o del testo. I contenitori che contengono un numero sono chiamati <link linkend="variables" >variabili</link >, quelli che possono contenere del testo sono chiamati <link linkend="strings" >stringhe</link >.</para> <para >I contenitori che non sono usati non contengono nulla. Un esempio: <screen> scrivi N </screen > Questo non scriverà niente. Se proviamo ad eseguire dei <link linkend="math" >calcoli matematici</link > con contenitori vuoti otterremo degli errori. </para> <sect2 id="variables"> <title >Variabili: contenitori numerici</title> <para >Iniziamo con un esempio: <screen> x = 3 scrivi x </screen > Nella prima linea la lettera <userinput >x</userinput > è trasformata in una variabile (contenitore numerico). Come vedi il valore della variabile <userinput >x</userinput > è impostato a 3. Nella seconda linea viene stampato a video il valore.</para> <para >Nota che se volevamo scrivere una <quote >x</quote > avremmo dovuto scrivere <screen >scrivi "x" </screen> </para> <para >Quello era semplice, vediamo ora un esempio un po' più complesso: <screen> A = 2004 B = 25 C = A + B # il comando seguente scrive "2029" scrivi C indietro 30 # il comando seguente scrive "2004 più 25" scrivi A + " più " + B indietro 30 # il comando seguente scrive "1979" scrivi A - B </screen > nelle prime due righe le variabili <userinput >A</userinput > e <userinput >B</userinput > sono impostare a 2004 e 25. Nella terza riga la variabile <userinput >C</userinput > è impostata ad <userinput >A + B</userinput >, che è 2029. Il resto dell'esempio è costituito da 3 comandi <userinput >scrivi</userinput > con <userinput >indietro 30</userinput > in mezzo. Il comando <userinput >indietro 30</userinput > ci assicura che ogni testo è scritto in una nuova riga. In questo esempio puoi anche vedere che le variabili possono essere usate nei <link linkend="math" >calcoli matematici</link >.</para> </sect2> <sect2 id="strings"> <title >Contenitori che contengono testo (stringhe)</title> <para >Nel codice della programmazione il testo regolare di solito inizia e finisce con le virgolette doppie. Come abbiamo già visto: <screen> scrivi "Ciao programmatore!" </screen > Il testo regolare è delimitato dalle virgolette doppie. Chiamiamo questi pezzi di testo regolare <link linkend="strings" >stringhe</link >.</para> <para >Le stringhe possono essere memorizzate in <link linkend="containers" >contenitori</link > allo stesso modo dei <link linkend="number" >numeri</link >. Le stringhe sono molto simili alle variabili. La più grande differenza è che le stringhe contengono testo invece che numeri. Per questo motivo le stringhe non possono essere usate in <link linkend="math" >calcoli matematici</link > e <link linkend="questions" >domande</link >. Un esempio di uso di stringhe: <screen> x = "Ciao " nome = finestrainserimento "Inserisci il tuo nome..." scrivi x + nome + ", come va?" </screen > Nella prima riga la stringa <userinput >x</userinput > è impostata a <quote >Ciao </quote >. Nella seconda riga la stringa <userinput >nome</userinput > è impostata al risultato del comando <userinput >finestrainserimento</userinput >. Nella terza riga il programma scrive nell'area di disegno una stringa composta da tre stringhe.</para> <para >Questo programma ti chiede di inserire il tuo nome. Quando inserisci, per esempio, il nome <quote >Paolo</quote >, il programma scrive <quote >Ciao Paolo, come va?</quote >. Nota che il segno più (+) è l'unico segno matematico che puoi usare con le stringhe.</para> </sect2> </sect1> <sect1 id="math"> <title >Può la tartaruga eseguire calcoli?</title> <para >Sì, &kturtle; farà la matematica per te. Puoi aggiungere (+), sottrarre (-), moltiplicare (*) e dividere (/). Ecco qui un esempio nel quale usiamo tutte le operazioni: <screen> a = 20 - 5 b = 15 * 2 c = 30 / 30 d = 1 + 1 scrivi "a: "+a+", b: "+b+", c: "+c+", d: "+d </screen > Lo sai che valori hanno a, b, c e d? Nota l'uso del simbolo di <link linkend="assignment" >assegnamento</link > <userinput >=</userinput >.</para> <para >Se vuoi eseguire un semplice calcolo puoi scrivere qualcosa di simile a questo: <screen >scrivi 2004-12 </screen ></para> <para >Ora un esempio con le parentesi: <screen> scrivi ( ( 20 - 5 ) * 2 / 30 ) + 1 </screen > Ciò che si trova dentro le parentesi sarà calcolato prima. In questo esempio, sarà calcolato 20-5, quindi moltiplicato per 2, diviso per 30, e viene infine aggiunto 1 (avendo 2 come risultato).</para> </sect1> <sect1 id="questions"> <title >Chiedere domande, avere risposte...</title> <para ><link linkend="if" ><userinput >se</userinput ></link > e <link linkend="while" ><userinput >mentre</userinput ></link > sono <link linkend="controlling-execution" >comandi di controllo dell'esecuzione</link > di cui parleremo nella prossima sezione. In questa sezione usiamo il comando <link linkend="if" ><userinput >se</userinput ></link > per spiegare le domande.</para> <sect2 id="q"> <title >Domande</title> <para >Un semplice esempio di domanda: <screen> x = 6 se x > 5 [ scrivi "ciao" ] </screen > In questo esempio la domanda è costituita da <userinput >x > 5</userinput >. Se la risposta a questa domanda è "vero", sarà eseguito il codice tra le parentesi quadre. Le domande sono una parte molto importante della programmazione e sono spesso usate insieme ai <link linkend="controlling-execution" >comandi di controllo dell'esecuzione</link >, come <link linkend="if" ><userinput >se</userinput ></link >. Tutti i numeri e le <link linkend="variables" >variabili</link > (contenitori numerici) possono essere confrontati l'un l'altro con le domande.</para> <para >Qui vi sono tutte le possibili domande: <table> <title >Tipi di domande</title> <tgroup cols="3"> <tbody> <row> <entry ><userinput >a == b</userinput ></entry> <entry >uguale</entry> <entry >la risposta è <quote >vero</quote > se <userinput >a</userinput > è uguale a <userinput >b</userinput ></entry> </row> <row> <entry ><userinput >a != b</userinput ></entry> <entry >non uguale</entry> <entry >la risposta è <quote >vero</quote > se <userinput >a</userinput > non è uguale a <userinput >b</userinput ></entry> </row> <row> <entry ><userinput >a > b</userinput ></entry> <entry >maggiore</entry> <entry >la risposta è <quote >vero</quote > se <userinput >a</userinput > è maggiore di <userinput >b</userinput ></entry> </row> <row> <entry ><userinput >a < b</userinput ></entry> <entry >minore</entry> <entry >la risposta è <quote >vero</quote > se <userinput >a</userinput > è minore di <userinput >b</userinput ></entry> </row> <row> <entry ><userinput >a >= b</userinput ></entry> <entry >maggiore o uguale</entry> <entry >la risposta è <quote >vero</quote > se <userinput >a</userinput > è maggiore o uguale a <userinput >b</userinput ></entry> </row> <row> <entry ><userinput >a <= b</userinput ></entry> <entry >minore o uguale</entry> <entry >la risposta è <quote >vero</quote > se <userinput >a</userinput > è minore o uguale a <userinput >b</userinput ></entry> </row> </tbody> </tgroup> </table> </para> <para >Le domande sono <glossterm >evidenziate</glossterm > con il blu chiaro nell'<link linkend="the-code-editor" >editor del codice</link >.</para > </sect2> <sect2 id="question-glue"> <title >I "collanti" delle domande</title> <para >I "collanti" delle domande ci permettono di unire più domande in una domanda più grande. <screen> a = 1 b = 5 se (a < 5) e (b == 5) [ scrivi "ciao" ] </screen > In questo esempio è usato il "collante" <userinput >e</userinput > per unire insieme due domande (<userinput >a < 5</userinput >, <userinput >b == 5</userinput >). Se un lato di <userinput >e</userinput > avrà come risposta <quote >falso</quote >, l'intera domanda avrà come risposta <quote >falso</quote >, poiché con il "collante" <userinput >e</userinput > entrambi i lati devono essere <quote >vero</quote > per poter rispondere <quote >vero</quote >. Non ti dimenticare di usare le parentesi attorno ad ogni domanda!</para> <para >Qui vi è una descrizione schematica; sotto segue una spiegazione più dettagliata: <table> <title >I "collanti" delle domande</title> <tgroup cols="2"> <tbody> <row> <entry ><userinput >e</userinput ></entry> <entry >Entrambi i lati devono essere "vero" per poter rispondere "vero"</entry> </row> <row> <entry ><userinput >o</userinput ></entry> <entry >Se uno dei lati è "vero" la risposta è "vero"</entry> </row> <row> <entry ><userinput >non</userinput ></entry> <entry >Caso speciale: funziona solo con una domanda! Cambia "vero" in "falso" e "falso" in "vero".</entry> </row> </tbody> </tgroup> </table> </para> <para >I "collanti" delle domande sono <glossterm >evidenziati</glossterm > con il viola nell'<link linkend="the-code-editor" >editor del codice</link >.</para> <sect3 id="and"> <title >e</title> <para >Quando due domande sono incollate l'un l'altra con <userinput >e</userinput >, entrambi i lati di <userinput >e</userinput > devono essere "vero" per poter dare come risultato "vero". Un esempio: <screen> a = 1 b = 5 se ((a < 10) e (b == 5)) e (a < b) [ scrivi "ciao" ] </screen > In questo esempio puoi vedere una domanda incollata, unita ad un'altra domanda.</para> </sect3> <sect3 id="or"> <title >o</title> <para >Se una delle due domande unite assieme con <userinput >o</userinput > è "vera", il risultato sarà "vero". Un esempio: <screen> a = 1 b = 5 se ((a < 10) o (b == 10)) o (a == 0) [ scrivi "ciao" ] </screen > In questo esempio puoi vedere una domanda incollata, unita ad un'altra domanda.</para> </sect3> <sect3 id="not"> <title >non</title> <para ><userinput >non</userinput > è uno speciale "collante" delle domande poiché funziona solo con una domanda alla volta. <userinput >non</userinput > cambia "vero" in "falso" e "falso" in "vero". Un esempio: <screen> a = 1 b = 5 se non ((a < 10) e (b == 5)) [ scrivi "ciao" ] altrimenti [ scrivi "non ciao ;-)" ] </screen > In questo esempio la domanda "incollata" è "vera", tuttavia <userinput >non</userinput > la cambia in "falsa". Così alla fine viene scritto <userinput >"non ciao ;-)"</userinput > sull'<link linkend="the-canvas" >area di disegno</link >.</para> </sect3> </sect2> </sect1> <sect1 id="controlling-execution"> <title >Controllare l'esecuzione</title> <para >I comandi di controllo dell'esecuzione ti permettono — come dicono il loro nomi — di controllare l'esecuzione.</para> <para >I comandi di controllo dell'esecuzione sono <glossterm >evidenziati</glossterm > di verde scuro con un tipo di carattere grassetto. Le parentesi quadre usate principalmente con i comandi di controllo dell'esecuzione e sono <glossterm >evidenziate</glossterm > di verde chiaro.</para> <sect2 id="wait"> <title >Far aspettare la tartaruga</title> <para >Se hai programmato in &kturtle; devi aver notato che la tartaruga può essere molto veloce a disegnare. Questo comando fa sì che la tartaruga attenda per un tempo specificato.</para> <variablelist> <varlistentry> <term >attendi</term> <listitem ><para ><screen >attendi X</screen> <userinput >attendi</userinput > fa sì che la tartaruga attenda X secondi. <screen> ripeti 36 [ avanti 5 destra 10 attendi 0.5 ] </screen > Questo codice disegna un cerchio, ma la tartaruga attenderà mezzo secondo dopo ogni passo. Ciò da' l'impressione di una tartaruga che si muove lentamente.</para ></listitem> </varlistentry> </variablelist> </sect2> <sect2 id="if"> <title >Eseguire "se"</title> <variablelist> <varlistentry> <term >se</term> <listitem ><para ><screen >se <link linkend="questions" >domanda</link > [ ... ]</screen> Il codice che si trova tra le parentesi quadre sarà eseguito solo <userinput >se</userinput > la risposta alla <link linkend="questions" >domanda</link > è <quote >vero</quote >. Per maggiori informazioni leggi sulle <link linkend="questions" >domande</link > nella <link linkend="questions" >sezione sulle domande</link >. <screen> x = 6 se x > 5 [ scrivi "x è più grande di cinque!" ] </screen > Nella prima linea <userinput >x</userinput > è impostato a 6. Nella seconda linea è chiesta la <link linkend="questions" >domanda</link > <userinput >x > 5</userinput >. Dato che la risposta a questa domanda è <quote >vero</quote > il comando di controllo dell'esecuzione <userinput >se</userinput > permetterà che venga eseguito il codice tra le parentesi quadre</para ></listitem> </varlistentry> </variablelist> </sect2> <sect2 id="while"> <title >Il ciclo "mentre"</title> <variablelist> <varlistentry> <term >mentre</term> <listitem ><para ><screen >mentre <link linkend="questions" >domanda</link > [ ... ]</screen> Il comando di controllo dell'esecuzione <userinput >mentre</userinput > è molto simile a <link linkend="if" ><userinput >se</userinput ></link >. La differenza è che <userinput >mentre</userinput > continua a ripetere (in modo ciclico) il codice tra le parentesi quadre fino a quando la risposta alla <link linkend="questions" >domanda</link > è <quote >falso</quote >. <screen> x = 1 mentre x < 5 [ avanti 10 attendi 1 x = x + 1 ] </screen > Nella prima linea <userinput >x</userinput > è impostato a 1. Nella seconda linea viene chiesta la <link linkend="questions" >domanda</link > <userinput >x < 5</userinput >. Dato che la risposta a questa domanda è <quote >vero</quote > il comando di controllo dell'esecuzione <userinput >mentre</userinput > inizia ad eseguire il codice tra le parentesi quadre fino a quando la risposta alla <link linkend="questions" >domanda</link > è <quote >falso</quote >. In questo caso il codice tra le parentesi quadre sarà eseguito 4 volte, dato che ogni volta che viene eseguita la quinta linea <userinput >x</userinput > è incrementato di 1.</para ></listitem> </varlistentry> </variablelist> </sect2> <sect2 id="else"> <title >Se no, in altre parole: "altrimenti"</title> <variablelist> <varlistentry> <term >altrimenti</term> <listitem ><para ><screen >se domanda [ ... ] altrimenti [ ... ]</screen> <userinput >altrimenti</userinput > può essere usato in aggiunta al comando di controllo dell'esecuzione <link linkend="if" ><userinput >se</userinput ></link >. Il codice tra le parentesi quadre dopo <userinput >altrimenti</userinput > è eseguito solo se la risposta alla <link linkend="questions" >domanda</link > chiesta è <quote >falso</quote >. <screen> ricomincia x = 4 se x > 5 [ scrivi "x è più grande di cinque!" ] altrimenti [ scrivi "x è più piccolo di cinque!" ] </screen > La <link linkend="questions" >domanda</link > chiede se <userinput >x</userinput > è più grande di 5. Dato che <userinput >x</userinput > è stato impostato a 4 nella prima linea, la risposta alla domanda è <quote >falso</quote >. Ciò significa che viene eseguito il codice tra le parentesi dopo <userinput >altrimenti</userinput >.</para ></listitem> </varlistentry> </variablelist> </sect2> <sect2 id="for"> <title >Il ciclo "per", un ciclo <quote >contato</quote ></title> <variablelist> <varlistentry> <term >per</term> <listitem ><para ><screen >per <userinput >punto di partenza</userinput > finoa <userinput >punto di arrivo</userinput > [ ... ]</screen> Il ciclo <userinput >per</userinput > è un <quote >ciclo contato</quote >, &ie; conta per te. <screen> per x = 1 finoa 10 [ scrivi x * 7 avanti 15 ] </screen > Ogni volta che viene eseguito il codice tra le parentesi quadre, <userinput >x</userinput > viene incrementato di 1, fino a quando <userinput >x</userinput > raggiunge il valore di 10. Il codice tra le parentesi quadre scrive il valore di <userinput >x</userinput > moltiplicato per 7. Alla fine dell'esecuzione di questo programma vedrai scritta sull'area di disegno la tabellina del 7.</para ></listitem> </varlistentry> </variablelist> </sect2> </sect1> <sect1 id="learn"> <title >Crea i tuoi comandi con <quote >impara</quote ></title> <para ><userinput >impara</userinput > è un comando molto particolare, dato che è usato per creare comandi personalizzati. Il comando che crei può richiedere <glossterm linkend="input-output" >parametri</glossterm > e restituire <glossterm linkend="input-output" >valori</glossterm >. Diamo un'occhiata a come creare un nuovo comando: <screen> impara cerchio x [ ripeti 36 [ avanti x sinistra 10 ] ] </screen > Il nuovo comando è chiamato <userinput >cerchio</userinput >. <userinput >cerchio</userinput > richiede un <glossterm linkend="input-output" >parametro</glossterm >, un numero, per impostare la dimensione del cerchio. <userinput >cerchio</userinput > non restituisce <glossterm linkend="input-output" >valori</glossterm >. Il comando <userinput >cerchio</userinput > può essere ora usato nel resto del codice come un normale comando. Guarda questo esempio: <screen >impara cerchio X [ ripeti 36 [ avanti X sinistra 10 ] ] vai 30,30 cerchio 20 vai 40,40 cerchio 50 </screen> </para> <para >Nell'esempio seguente viene creato un comando con un valore restituito. <screen> ricomincia impara moltiplicatoPerSeStesso n [ r = n * 1 r = n * n restituisci r ] i = finestrainserimento "Inserisci un numero e premi OK" scrivi i + " moltiplicato per se stesso è: " + moltiplicatoPerSeStesso i </screen > In questo esempio viene creato un nuovo comando chiamato <userinput >moltiplicatoPerSeStesso</userinput >. Il parametro di questo comando è moltiplicato per se stesso e quindi restituito, usando il comando <anchor id="return"/><userinput >restituisci</userinput >. Il comando <userinput >restituisci</userinput > è il modo per restituire un valore da una funzione che hai creato. </para> </sect1> </chapter>