<!--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 &gt; 5 [
  scrivi "ciao"
]
</screen
> In questo esempio la domanda è costituita da <userinput
>x &gt; 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 &gt; 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 &lt; 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 &gt;= 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 &lt;= 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 &lt; 5) e (b == 5) [
  scrivi "ciao"
]
</screen
> In questo esempio è usato il "collante" <userinput
>e</userinput
> per unire insieme due domande (<userinput
>a &lt; 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 &lt; 10) e (b == 5)) e (a &lt; 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 &lt; 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 &lt; 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 &mdash; come dicono il loro nomi &mdash; 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 &gt; 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 &gt; 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 &lt; 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 &lt; 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 &gt; 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>
