<!--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 &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. 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>
</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>

<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 &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>
<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 &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>
<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 &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 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 &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</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 &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="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 &lt; 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 &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 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>
