<!--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 alla programmazione &turtlelang;</title> <para >Questa è la guida del &turtlelang; 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 &turtlelang; 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 rosso scuro nell'<link linkend="the-code-editor" >editor del codice</link >.</para> </sect2> <!-- constants like pi? --> <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 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 &turtlelang; 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 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 interno, e per questo ha un significato. <screen> # qui avanti è usato come nuovo comando, # ma ha già un significato # così questa riga genererà un errore: impara avanti { scrivi "questo non è valido" } # questo funziona: impara mio_avanti { scrivi "questo va bene" } </screen > I nomi possono contenere solo lettere, numeri e trattini bassi (_). Devono tuttavia iniziare con una lettera. I nomi di contenitori devono iniziare con il prefisso dei contenitori ($). <screen ># qui avanti è usato come contenitore # e inizia con il prefisso $, quindi # non va in conflitto con il comando avanti $avanti = 20 scrivi $avanti </screen> </para> <para >I contenitori sono <glossterm >evidenziati</glossterm > con il viola grassetto nell'<link linkend="the-code-editor" >editor del codice</link >.</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 di 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 grigio chiaro 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 blu 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> <variablelist> <anchor id="forward"/> <varlistentry > <term >avanti (av)<indexterm ><primary >avanti (av)</primary ></indexterm ></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> <variablelist> <anchor id="backward"/> <varlistentry > <term >indietro (in)<indexterm ><primary >indietro (in)</primary ></indexterm ></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> <variablelist> <anchor id="turnleft"/> <varlistentry > <term >sinistra (sx)<indexterm ><primary >sinistra (sx)</primary ></indexterm ></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> <variablelist> <anchor id="turnright"/> <varlistentry > <term >destra (dx)<indexterm ><primary >destra (dx)</primary ></indexterm ></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> <variablelist> <anchor id="direction"/> <varlistentry > <term >direzione (dir)<indexterm ><primary >direzione (dir)</primary ></indexterm ></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> <variablelist> <anchor id="center"/> <varlistentry > <term >centro<indexterm ><primary >centro</primary ></indexterm ></term> <listitem ><para ><screen >centro</screen> <userinput >centro</userinput > muove la tartaruga al centro dell'area di disegno.</para ></listitem> </varlistentry> </variablelist> <variablelist> <anchor id="go"/> <varlistentry > <term >vai<indexterm ><primary >vai</primary ></indexterm ></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. </para ></listitem> </varlistentry> </variablelist> <variablelist> <anchor id="gox"/> <varlistentry > <term >vaix<indexterm ><primary >vaix</primary ></indexterm ></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> <variablelist> <anchor id="goy"/> <varlistentry > <term >vaiy<indexterm ><primary >vaiy</primary ></indexterm ></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> <note ><para >Usando i comandi <userinput >vai</userinput >, <userinput >vaix</userinput >, <userinput >vaiy</userinput > e <userinput >centra</userinput > la tartaruga non disegnerà una linea, non importa che la penna sia attiva o meno.</para> </note> </sect2> <sect2 id="locate-the-turtle"> <title >Dove è la tartaruga?</title> <para >Ci sono due comandi che restituiscono la posizione della tartaruga sullo schermo.</para> <variablelist> <anchor id="getx"/> <varlistentry > <term >coordinatax<indexterm ><primary >coordinatax</primary ></indexterm ></term> <listitem ><para ><userinput >coordinatax</userinput > restituisce il numero di pixel dalla sinistra dell'area di disegno fino alla posizione corrente della tartaruga.</para ></listitem> </varlistentry> </variablelist> <variablelist> <anchor id="gety"/> <varlistentry > <term >coordinatay<indexterm ><primary >coordinatay</primary ></indexterm ></term> <listitem ><para ><userinput >coordinatay</userinput > restituisce il numero di pixel dall'alto dell'area di disegno fino alla posizione corrente della tartaruga.</para ></listitem> </varlistentry> </variablelist> </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> <variablelist> <anchor id="penup"/> <varlistentry > <term >pennasu (ps)<indexterm ><primary >pennasu (ps)</primary ></indexterm ></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> <variablelist> <anchor id="pendown"/> <varlistentry > <term >pennagiu (pg)<indexterm ><primary >pennagiu (pg)</primary ></indexterm ></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> <variablelist> <anchor id="setpenwidth"/> <varlistentry > <term >spessorepenna (sp)<indexterm ><primary >spessorepenna (sp)</primary ></indexterm ></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> <variablelist> <anchor id="setfgcolor"/> <varlistentry > <term >colorepenna (cp)<indexterm ><primary >colorepenna (cp)</primary ></indexterm ></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> </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> <variablelist> <anchor id="resizecanvas"/> <varlistentry> <term >dimensionesfondo (ds)<indexterm ><primary >dimensionesfondo (ds)</primary ></indexterm ></term> <listitem ><para ><screen >dimensionesfondo X,Y</screen> Con il comando <userinput >dimensionesfondo</userinput > puoi impostare la dimensione dell'area di disegno. Prende X e Y come argomenti, dove X è la nuova larghezza in <glossterm linkend="pixels" >pixel</glossterm > dell'area di disegno, mentre Y è la nuova altezza in <glossterm linkend="pixels" >pixel</glossterm >. <userinput >dimensionesfondo</userinput > può essere abbreviato in <userinput >ds</userinput >.</para ></listitem> </varlistentry> </variablelist> <variablelist> <anchor id="setbgcolor"/> <varlistentry > <term >coloresfondo (cs)<indexterm ><primary >coloresfondo (cs)</primary ></indexterm ></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 id="wrapon"> <title >wrapon</title> <variablelist> <varlistentry > <term >wrapon</term> <listitem ><para ><screen >wrapon</screen> With the <userinput >wrapon</userinput > command you can set <glossterm linkend="wrapping" >wrapping</glossterm > <quote >on</quote > for the canvas. Please see the glossary if you want to know what <glossterm linkend="wrapping" >wrapping</glossterm > is.</para ></listitem> </varlistentry> </variablelist> </sect3> <sect3 id="wrapoff"> <title >wrapoff</title> <variablelist> <varlistentry > <term >wrapoff</term> <listitem ><para ><screen >wrapoff</screen> With the <userinput >wrapoff</userinput > command you can set <glossterm linkend="wrapping" >wrapping</glossterm > <quote >off</quote > for the canvas: this means the turtle can move off the canvas and can get <quote >lost</quote >. Please see the glossary if you want to know what <glossterm linkend="wrapping" >wrapping</glossterm > is.</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> <variablelist> <anchor id="clear"/> <varlistentry > <term >pulisci (cls)<indexterm ><primary >pulisci (cls)</primary ></indexterm ></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.</para ></listitem> </varlistentry> </variablelist> <variablelist> <anchor id="reset"/> <varlistentry > <term >ricomincia<indexterm ><primary >ricomincia</primary ></indexterm ></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, la tartaruga disegna linee nere sull'area di disegno e la dimensione dell'area di disegno è 400 x 400 pixel.</para ></listitem> </varlistentry> </variablelist> </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> <variablelist> <anchor id="spriteshow"/> <varlistentry > <term >mostra (ms)<indexterm ><primary >mostra (ms)</primary ></indexterm ></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> <variablelist> <anchor id="spritehide"/> <varlistentry > <term >nascondi (ns)<indexterm ><primary >nascondi (ns)</primary ></indexterm ></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> </sect2> <sect2 id="writing"> <title >Può la tartaruga scrivere del testo?</title> <para >La risposta è: <quote >sì</quote >. La tartaruga può scrivere: scrive tutto quello che tu le comandi di scrivere.</para> <variablelist> <anchor id="print"/> <varlistentry > <term >scrivi<indexterm ><primary >scrivi</primary ></indexterm ></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> <variablelist> <anchor id="fontsize"/> <varlistentry > <term >dimensionecarattere<indexterm ><primary >dimensionecarattere</primary ></indexterm ></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> </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 >numerocasuale (casuale)<indexterm ><primary >numerocasuale (casuale)</primary ></indexterm ></term> <listitem ><para ><screen >numerocasuale X,Y</screen> <userinput >numerocasuale</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 = numerocasuale 1,20 avanti $x sinistra 10 - $x } </screen > Usando il comando <userinput >numerocasuale</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 >chiedi</userinput ></para> <variablelist> <anchor id="message"/> <varlistentry > <term >messaggio<indexterm ><primary >messaggio</primary ></indexterm ></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 >messaggio "Cies ha iniziato il progetto KTurtle nel 2003 e ancora si diverte a lavorarci!" </screen> </para ></listitem> </varlistentry> </variablelist> <variablelist> <anchor id="ask"/> <varlistentry > <term >chiedi<indexterm ><primary >chiedi</primary ></indexterm ></term> <listitem ><para ><screen >chiedi X</screen> <userinput >chiedi</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 = chiedi "Qual è la tua età?" $out = 2003 - $in scrivi "Ad un certo punto del 2003 avevi " + $out + " 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> </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 >. I contenitori possono essere identificati dal carattere <quote >$</quote > che ne precede l'uso.</para> <para >I contenitori che non sono usati non contengono nulla. Un esempio: <screen> scrivi $N </screen > Questo non scriverà niente e otterrai un messaggio d'errore. </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 = chiedi "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 >chiedi</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> <para >&kturtle; ha funzionalità matematiche avanzate. Conosce il numero <userinput >pi</userinput > e funzione trigonometriche come <userinput >sen</userinput >, <userinput >cos</userinput >, <userinput >tan</userinput >, <userinput >arcsen</userinput >, <userinput >arccos</userinput >, <userinput >arctan</userinput > e le funzioni <userinput >sqrt</userinput > e <userinput >exp</userinput >. <indexterm ><primary >pi</primary ></indexterm> <indexterm ><primary >sen, cos, tan</primary ></indexterm> <indexterm ><primary >arcsen, arccos, arctan</primary ></indexterm> <indexterm ><primary >sqrt, exp</primary ></indexterm> </para> <sect2 id="round"> <title >Permette alla tartaruga di arrotondare i numeri</title> <para >Se hai bisogno di valori interi per i calcoli, usa questa funzione.</para> <variablelist> <varlistentry> <term >round<indexterm ><primary >round</primary ></indexterm ></term> <listitem ><para ><screen >round(x)</screen> <userinput >round</userinput > arrotonda il numero dato all'intero più vicino. <screen> scrivi round(10.8) avanti 20 scrivi round(10.3) avanti 20 </screen > Con questo codice la tartaruga scriverà i numeri 11 e 10.</para ></listitem> </varlistentry> </variablelist> </sect2> </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. 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> </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> <sect3 id="and"> <title >e</title> <indexterm ><primary >e</primary ></indexterm> <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> <indexterm ><primary >o</primary ></indexterm> <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> <indexterm ><primary >non</primary ></indexterm> <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 sono 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 >aspetta<indexterm ><primary >aspetta</primary ></indexterm ></term> <listitem ><para ><screen >aspetta X</screen> <userinput >aspetta</userinput > fa sì che la tartaruga attenda X secondi. <screen> ripeti 36 { avanti 5 destra 10 aspetta 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<indexterm ><primary >se</primary ></indexterm ></term> <listitem ><para ><screen >se <link linkend="questions" >domanda</link > { ... }</screen> Il codice che si trova tra le parentesi 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</para ></listitem> </varlistentry> </variablelist> </sect2> <sect2 id="else"> <title >Se no, in altre parole: "altrimenti"</title> <variablelist> <varlistentry> <term >altrimenti<indexterm ><primary >altrimenti</primary ></indexterm ></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 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="while"> <title >Il ciclo "mentre"</title> <variablelist> <varlistentry> <term >mentre<indexterm ><primary >mentre</primary ></indexterm ></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 fino a quando la risposta alla <link linkend="questions" >domanda</link > è <quote >falso</quote >. <screen> $x = 1 mentre $x < 5 { avanti 10 aspetta 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 fino a quando la risposta alla <link linkend="questions" >domanda</link > è <quote >falso</quote >. In questo caso il codice tra le parentesi 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="repeat"> <title >Il ciclo "ripeti"</title> <variablelist> <varlistentry> <term >ripeti<indexterm ><primary >ripeti</primary ></indexterm ></term> <listitem ><para ><screen >ripeti numero { ... }</screen> Il comando di controllo dell'esecuzione <userinput >ripeti</userinput > è molto simile a <link linkend="while" ><userinput >mentre</userinput ></link >. La differenza è che <userinput >ripeti</userinput > continua a ripetere (iterare) il codice tra le parentesi il numero di volte specificato.</para ></listitem> </varlistentry> </variablelist> </sect2> <sect2 id="for"> <title >Il ciclo "per", un ciclo contato</title> <variablelist> <varlistentry> <term >per<indexterm ><primary >per</primary ></indexterm ><indexterm ><primary >passo</primary ></indexterm ></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, <userinput >x</userinput > viene incrementato di 1, fino a quando <userinput >x</userinput > raggiunge il valore di 10. Il codice tra le parentesi 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> <para >Il passo predefinito di un ciclo è 1, puoi usare un altro valore con <screen >per <userinput >punto di partenza</userinput > finoa <userinput >punto di arrivo</userinput > passo <userinput >valore del passo</userinput > { ... }</screen ></para ></listitem> </varlistentry> </variablelist> </sect2> <sect2 id="break"> <title >Lascia un ciclo</title> <variablelist> <varlistentry> <term >interrompi<indexterm ><primary >interrompi</primary ></indexterm ></term> <listitem ><para ><screen >interrompi</screen> Interrompe il ciclo corrente immediatamente e trasferisce il controllo all'istruzione che segue subito dopo quel ciclo</para ></listitem> </varlistentry> </variablelist> </sect2> <sect2 id="exit"> <title >Fermare la tartaruga</title> <variablelist> <varlistentry> <term >esci<indexterm ><primary >esci</primary ></indexterm ></term> <listitem ><para ><screen >esci</screen> Termina l'esecuzione del codice.</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 200,200 cerchio 20 vai 300,200 cerchio 40 </screen> </para> <para >Nell'esempio seguente viene creato un comando con un valore restituito. <screen> ricomincia impara moltiplicatoPerSeStesso $n { $r = $n * $n restituisci r } $i = chiedi "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> <para >I comandi possono avere più di un <glossterm linkend="input-output" >argomento</glossterm >. Nell'esempio che segue, viene creato un comando che disegna un rettangolo. <screen> impara scatola $X, $Y { avanti $Y destra 90 avanti $X destra 90 avanti $Y destra 90 avanti $X destra 90 } </screen > Adesso puoi eseguire <userinput >scatola 50, 100</userinput > e la tartaruga disegnerà un rettangolo nell'area di disegno. </para> </sect1> </chapter>