> For the complete documentation index, see [llms.txt](https://overleaf-pro.ayaka.space/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://overleaf-pro.ayaka.space/latex/it/altri-argomenti/02-algorithms.md).

# Algoritmi

## Introduzione

*(Per scrivere elenchi di codice di programma, fai riferimento a* [*questa pagina di aiuto*](/latex/it/formattazione/11-code-listing.md) *invece.)*

Per impaginare algoritmi o pseudocodice in LaTeX puoi usare una delle seguenti opzioni:

* Scegli UNO dei (`algpseudocode` OPPURE `algcompatible` OPPURE `algorithmic`) pacchetti per impaginare i corpi degli algoritmi, e il pacchetto `algorithm` per la didascalia dell'algoritmo.
* Il `algorithm2e` pacchetto.

**Nota che dovresti scegliere solo uno dei gruppi di pacchetti sopra, e usare solo i comandi e la sintassi forniti dal pacchetto che scegli.** Questi pacchetti non possono essere caricati contemporaneamente; altrimenti riceverai molti errori.

## I pacchetti algpseudocode e algorithm

Il `algpseudocode` pacchetto fornisce un `algorithmic` ambiente e alcuni comandi utili. Puoi [aprire un esempio completo su Overleaf](https://www.overleaf.com/project/new/template/20763?id=71202437\&templateName=algpseudocode+%2B+algorithm+example\&latexEngine=pdflatex\&texImage=texlive-full%3A2020.1\&mainFile=) , e in questa sezione entreremo in alcuni dettagli.

Ecco il nostro primo algoritmo, usando ambienti e comandi del `algpseudocode` pacchetto:

```latex
\documentclass{article}
\usepackage{algpseudocode}
\begin{document}
\begin{algorithmic}
\State $i \gets 10$
\If{$i\geq 5$}
    \State $i \gets i-1$
\Else
    \If{$i\leq 3$}
        \State $i \gets i+2$
    \EndIf
\EndIf
\end{algorithmic}

\end{document}
```

[Apri questo breve esempio di algpseudocode su Overleaf](https://www.overleaf.com/docs?engine=\&snip_name=algpseudocode+short+example\&snip=%5Cdocumentclass%7Barticle%7D%0A%5Cusepackage%7Balgpseudocode%7D%0A%5Cbegin%7Bdocument%7D%0A%5Cbegin%7Balgorithmic%7D%0A%5CState+%24i+%5Cgets+10%24%0A%5CIf%7B%24i%5Cgeq+5%24%7D+%0A++++%5CState+%24i+%5Cgets+i-1%24%0A%5CElse%0A++++%5CIf%7B%24i%5Cleq+3%24%7D%0A++++++++%5CState+%24i+%5Cgets+i%2B2%24%0A++++%5CEndIf%0A%5CEndIf+%0A%5Cend%7Balgorithmic%7D%0A%0A%5Cend%7Bdocument%7D)

Ecco il risultato:

![Algpseudocode-0.png](/files/5f784aefc32332749c05d3d328eaec2a6a28765c)

*Non dovresti caricare i `algorithm2e`, `algcompatible`, `algorithmic` pacchetti se hai già caricato `algpseudocode`.*

Nota che i nomi dei comandi forniti da `algpseudocode` sono in genere in maiuscole iniziali, ad es. `\State`, `\While`, `\EndWhile`.

Se desideri aggiungere numeri di riga all'algoritmo, puoi aggiungere il primo numero di riga all' `algorithmic` ambiente in questo modo: `\begin{algorithmic}[1]` e ottenere questo risultato:

![Algpseudocode-00.png](/files/788c10fd15a8d5e68ac291e3e11eb35cbe438c58)

L'esempio di algoritmo sopra non ha né didascalia né numerazione. Se ti serve un algoritmo con didascalia, dovrai caricare anche il `algorithm` pacchetto, e aggiungere

```latex
\begin{algorithm}
\caption{...}
...
\end{algorithm}
```

attorno al tuo `algorithmic` ambiente. Puoi usare `\label{...}` dopo il `\caption{...}`, così il numero dell'algoritmo può essere richiamato con riferimento incrociato con `\ref{...}`.

```latex
\documentclass{article}
\usepackage{algorithm}
\usepackage{algpseudocode}
\begin{document}
\begin{algorithm}
\caption{Un algoritmo con didascalia}\label{alg:cap}
\begin{algorithmic}
\Require $n \geq 0$
\Ensure $y = x^n$
\State $y \gets 1$
\State $X \gets x$
\State $N \gets n$
\While{$N \neq 0$}
\If{$N$ is even}
    \State $X \gets X \times X$
    \State $N \gets \frac{N}{2}$  \Comment{Questo è un commento}
\ElsIf{$N$ is odd}
    \State $y \gets y \times X$
    \State $N \gets N - 1$
\EndIf
\EndWhile
\end{algorithmic}
\end{algorithm}

\end{document}
```

[Apri questo breve esempio di algoritmo+algpseudocode su Overleaf](https://www.overleaf.com/docs?engine=\&snip_name=Captioned+algorithm%2Balgpseudocode+example\&snip=%5Cdocumentclass%7Barticle%7D%0A%5Cusepackage%7Balgorithm%7D%0A%5Cusepackage%7Balgpseudocode%7D%0A%5Cbegin%7Bdocument%7D%0A%5Cbegin%7Balgorithm%7D%0A%5Ccaption%7BAn+algorithm+with+caption%7D%5Clabel%7Balg%3Acap%7D%0A%5Cbegin%7Balgorithmic%7D%0A%5CRequire+%24n+%5Cgeq+0%24%0A%5CEnsure+%24y+%3D+x%5En%24%0A%5CState+%24y+%5Cgets+1%24%0A%5CState+%24X+%5Cgets+x%24%0A%5CState+%24N+%5Cgets+n%24%0A%5CWhile%7B%24N+%5Cneq+0%24%7D%0A%5CIf%7B%24N%24+is+even%7D%0A++++%5CState+%24X+%5Cgets+X+%5Ctimes+X%24%0A++++%5CState+%24N+%5Cgets+%5Cfrac%7BN%7D%7B2%7D%24++%5CComment%7BThis+is+a+comment%7D%0A%5CElsIf%7B%24N%24+is+odd%7D%0A++++%5CState+%24y+%5Cgets+y+%5Ctimes+X%24%0A++++%5CState+%24N+%5Cgets+N+-+1%24%0A%5CEndIf%0A%5CEndWhile%0A%5Cend%7Balgorithmic%7D%0A%5Cend%7Balgorithm%7D%0A%0A%5Cend%7Bdocument%7D)

![Algpseudocode-1.png](/files/46adf65a8a3544d557579d566fa5d22b4eba42df)

Il `algorithm` l'ambiente è un [pacchetto float](/latex/it/figure-e-tabelle/02-positioning-images-and-tables.md) come `table` e `ambiente figure`, quindi puoi aggiungere modificatori di posizionamento dei float `[hbt!]` dopo `\begin{algorithm}` se necessario. Questo significa anche che, mentre un lungo `algorithmic` ambiente da solo può andare a capo tra le pagine, un `algorithm` ambiente non lo farà.

Il `algorithm` pacchetto fornisce anche un `\listofalgorithms` comando che funziona come `\listoffigures`, ma per gli algoritmi con didascalia, come questo.

![Algpseudocode-2.png](/files/4bfd43c142407c957f7151bf03a228b34c708a00)

[Apri un esempio completo su Overleaf](https://www.overleaf.com/project/new/template/20763?id=71202437\&templateName=algpseudocode+%2B+algorithm+example\&latexEngine=pdflatex\&texImage=texlive-full%3A2020.1\&mainFile=)

## I pacchetti algcompatible/algorithmic e algorithm

Il `algorithmic` pacchetto usa una sintassi simile a `algpseudocode`; **ma** i suoi nomi dei comandi sono in maiuscolo, ad es. `\STATE`, `\WHILE`, `\ENDWHILE`.

D'altra parte, `algcompatible` riconoscerà i nomi dei comandi in maiuscolo e in maiuscole iniziali, quindi `\STATE`, `\WHILE`, `\ENDWHILE`, `\State`, `\While`, `\EndWhile` sono tutti riconosciuti. A parte i nomi dei comandi, `algcompatible` e `algorithmic` i comandi usano la stessa sintassi degli argomenti di `algpseudocode`.

```latex
\documentclass{article}
\usepackage{algcompatible}
% OPPURE \usepackage{algorithmic}
\begin{document}
\begin{algorithmic}
\STATE $i\gets 10$
\IF {$i\geq 5$}
  \STATE $i\gets i-1$
\ELSE
  \IF {$i\leq 3$}
    \STATE $i\gets i+2$
  \ENDIF
\ENDIF
\end{algorithmic}

\end{document}
```

[Apri questo breve esempio di algcompatible su Overleaf](https://www.overleaf.com/docs?engine=\&snip_name=algcompatible\&snip=%5Cdocumentclass%7Barticle%7D%0A%5Cusepackage%7Balgcompatible%7D%0A%25+OR+%5Cusepackage%7Balgorithmic%7D%0A%5Cbegin%7Bdocument%7D%0A%5Cbegin%7Balgorithmic%7D%0A%5CSTATE+%24i%5Cgets+10%24%0A%5CIF+%7B%24i%5Cgeq+5%24%7D+%0A++%5CSTATE+%24i%5Cgets+i-1%24%0A%5CELSE%0A++%5CIF+%7B%24i%5Cleq+3%24%7D%0A++++%5CSTATE+%24i%5Cgets+i%2B2%24%0A++%5CENDIF%0A%5CENDIF+%0A%5Cend%7Balgorithmic%7D%0A%0A%5Cend%7Bdocument%7D)

Aluni modelli più vecchi o classi di documento potrebbero aver caricato `algorithmic`, quindi dovrai seguire la sintassi e i nomi dei comandi forniti. *Non dovresti caricare i `algorithm2e`, `algpseudocode` pacchetti se il `algorithmic` o `algcompatible` pacchetto è già caricato.*

Il `algorithm` pacchetto può essere usato con `algorithmic`/`algcompatible` per aggiungere didascalie numerate agli algoritmi.

[Apri un esempio completo su Overleaf](https://www.overleaf.com/project/new/template/20768?id=71235978\&templateName=algpseudocode+%2B+algorithm+example\&latexEngine=pdflatex\&texImage=texlive-full%3A2020.1\&mainFile=)

## Il pacchetto algorithm2e

Il `algorithm2e` pacchetto ha una struttura sintattica piuttosto diversa dai `algpseudocode`, `algcompatible` e `algorithmic` pacchetti, quindi dovrai fare attenzione a quale pacchetto vuoi usare, o quale pacchetto ha caricato il tuo modello.

Il `algorithm2e` pacchetto fornisce un `algorithm` ambiente:

```latex
\documentclass{article}
\usepackage{algorithm2e}
\begin{document}
\begin{algorithm}
$i\gets 10$\;
\eIf{$i\geq 5$}
{
    $i\gets i-1$\;
}{
    \If{$i\leq 3$}
    {
        $i\gets i+2$\;
    }
}
\end{algorithm}

\end{document}
```

[Apri questo breve esempio di algorithm2e su Overleaf](https://www.overleaf.com/docs?engine=\&snip_name=algorithm2e+example\&snip=%5Cdocumentclass%7Barticle%7D%0A%5Cusepackage%7Balgorithm2e%7D%0A%5Cbegin%7Bdocument%7D%0A%5Cbegin%7Balgorithm%7D%0A%24i%5Cgets+10%24%5C%3B%0A%5CeIf%7B%24i%5Cgeq+5%24%7D%0A%7B%0A++++%24i%5Cgets+i-1%24%5C%3B%0A%7D%7B%0A++++%5CIf%7B%24i%5Cleq+3%24%7D%0A++++%7B%0A++++++++%24i%5Cgets+i%2B2%24%5C%3B%0A++++%7D%0A%7D%0A%5Cend%7Balgorithm%7D%0A%0A%5Cend%7Bdocument%7D)

![Algorithm2e-0.png](/files/8e2328ff1b235b295c9290f902708b5c7a1b5572)

Ogni riga nel tuo codice sorgente *devono* termina con `\;` altrimenti il tuo algoritmo continuerà sulla stessa riga di testo nell'output. Solo le righe con una macro che avvia un blocco non dovrebbero terminare con `\;`.

Quando usi `algorithm2e` puoi usare `\caption{...}\ref{...}` direttamente all'interno di questo `algorithm` ambiente, senza bisogno di caricare altri pacchetti. Tuttavia, se vuoi aggiungere commenti nel tuo algoritmo, dovrai prima dichiarare il nome del comando da usare:

```latex
%% Questo dichiara un comando \Comment
%% L'argomento sarà racchiuso da /* ... */
\SetKwComment{Comment}{/* }{ */}

\begin{algorithm}
\caption{Un algoritmo con didascalia}\label{alg:two}
\KwData{$n \geq 0$}
\KwResult{$y = x^n$}
$y \gets 1$\;
$X \gets x$\;
$N \gets n$\;
\While{$N \neq 0$}{
  \eIf{$N$ is even}{
    $X \gets X \times X$\;
    $N \gets \frac{N}{2}$ \Comment*[r]{Questo è un commento}
  }{\If{$N$ is odd}{
      $y \gets y \times X$\;
      $N \gets N - 1$\;
    }
  }
}
\end{algorithm}
```

[Apri questo esempio di algorithm2e con didascalia su Overleaf](https://www.overleaf.com/docs?engine=\&snip_name=Captioned+algorithm2e+example\&snip=%5Cdocumentclass%7Barticle%7D%0A%5Cusepackage%7Balgorithm2e%7D%0A%5Cbegin%7Bdocument%7D%0A%25%25+This+declares+a+command+%5CComment%0A%25%25+The+argument+will+be+surrounded+by+%2F%2A+...+%2A%2F%0A%5CSetKwComment%7BComment%7D%7B%2F%2A+%7D%7B+%2A%2F%7D%0A%0A%5Cbegin%7Balgorithm%7D%0A%5Ccaption%7BAn+algorithm+with+caption%7D%5Clabel%7Balg%3Atwo%7D%0A%5CKwData%7B%24n+%5Cgeq+0%24%7D%0A%5CKwResult%7B%24y+%3D+x%5En%24%7D%0A%24y+%5Cgets+1%24%5C%3B%0A%24X+%5Cgets+x%24%5C%3B%0A%24N+%5Cgets+n%24%5C%3B%0A%5CWhile%7B%24N+%5Cneq+0%24%7D%7B%0A++%5CeIf%7B%24N%24+is+even%7D%7B%0A++++%24X+%5Cgets+X+%5Ctimes+X%24%5C%3B%0A++++%24N+%5Cgets+%5Cfrac%7BN%7D%7B2%7D%24+%5CComment%2A%5Br%5D%7BThis+is+a+comment%7D%0A++%7D%7B%5CIf%7B%24N%24+is+odd%7D%7B%0A++++++%24y+%5Cgets+y+%5Ctimes+X%24%5C%3B%0A++++++%24N+%5Cgets+N+-+1%24%5C%3B%0A++++%7D%0A++%7D%0A%7D%0A%5Cend%7Balgorithm%7D%0A%0A%5Cend%7Bdocument%7D)

![Algorithm2e-1.png](/files/2ff9b59f56365efb317dfa3d1f26604bc762da9a)

Per impostazione predefinita, viene usato lo `plain` stile algorithm. Ma se preferisci le linee attorno all'algoritmo e alla didascalia, puoi aggiungere l' `ruled` opzione del pacchetto quando carichi `algorithm2e`, oppure scrivere `\RestyleAlgo{ruled}` nel tuo documento. I tuoi algoritmi con didascalia saranno quindi impaginati in questo modo:

![Algorithm2e-11.png](/files/f4a45e6ff0d6e45d336bb8523c3b5e0f14649bec)

Il `algorithm2e` pacchetto offre molte opzioni di personalizzazione. Per esempio, se vuoi rimuovere le linee verticali che segnano i blocchi while—end while, if—end if, puoi aggiungere l' `noline` opzione del pacchetto quando carichi `algorithm2e`, oppure scrivere `\SetNoline`. Un `\listofalgorithms` comando è disponibile anche in `algorithm2e`.

[Apri un esempio completo su Overleaf](https://www.overleaf.com/project/new/template/20787?id=71277562\&templateName=algpseudocode+%2B+algorithm+example\&latexEngine=pdflatex\&texImage=texlive-full%3A2020.1\&mainFile=)

## Ulteriori letture

* [`algpseudocode` documentazione del pacchetto](https://texdoc.org/pkg/algorithmicx) (vedi sezione 3.1)
* [`algorithmic` e `algoritmo` documentazione del pacchetto](https://texdoc.org/pkg/algorithms)
* [`algorithm2e` documentazione del pacchetto](https://texdoc.org/pkg/algorithm2e)


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://overleaf-pro.ayaka.space/latex/it/altri-argomenti/02-algorithms.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
