> 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/fr/autres-sujets/02-algorithms.md).

# Algorithmes

## Introduction

*(Pour écrire des listings de code programme, veuillez vous référer à* [*cette page d'aide*](/latex/fr/mise-en-forme/11-code-listing.md) *à la place.)*

Pour mettre en forme des algorithmes ou du pseudocode en LaTeX, vous pouvez utiliser l'une des options suivantes :

* Choisissez L'UNE des (`algpseudocode` OU `algcompatible` OU `algorithmic`) pour mettre en forme le corps des algorithmes, et le `package algorithm` pour la légende de l'algorithme.
* Le `algorithm2e` package.

**Notez que vous ne devez choisir qu'un seul des groupes de packages ci-dessus et n'utiliser que les commandes et la syntaxe fournis par le package que vous choisissez.** Ces packages ne peuvent pas être chargés simultanément ; sinon vous obtiendrez de nombreuses erreurs.

## Les packages algpseudocode et algorithm

Le `algpseudocode` package fournit un `algorithmic` environnement et quelques commandes utiles. Vous pouvez [ouvrir un exemple complet sur Overleaf](https://www.overleaf.com/project/new/template/20763?id=71202437\&templateName=algpseudocode+%2B+algorithm+example\&latexEngine=pdflatex\&texImage=texlive-full%3A2020.1\&mainFile=) , et nous entrerons dans certains détails dans cette section.

Voici notre premier algorithme, utilisant des environnements et des commandes du `algpseudocode` package :

```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}
```

[Ouvrez cet exemple court algpseudocode dans 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)

Voici le résultat obtenu :

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

*Vous ne devez pas charger les `algorithm2e`, `algcompatible`, `algorithmic` packages si vous avez déjà chargé `algpseudocode`.*

Notez que les noms de commande fournis par `algpseudocode` sont généralement en casse de titre, par ex. `\State`, `\While`, `\EndWhile`.

Si vous souhaitez ajouter des numéros de ligne à l'algorithme, vous pouvez ajouter le premier numéro de ligne à l' `algorithmic` environnement comme ceci : `\begin{algorithmic}[1]` et obtenir cette sortie :

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

L'exemple d'algorithme ci-dessus n'est ni légendé ni numéroté. Si vous avez besoin d'un algorithme légendé, vous devrez également charger le `package algorithm` package, et ajouter

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

autour de votre `algorithmic` environnement. Vous pouvez utiliser `\label{...}` après le `\caption{...}`, afin que le numéro de l'algorithme puisse être référencé par renvoi avec `\ref{...}`.

```latex
\documentclass{article}
\usepackage{algorithm}
\usepackage{algpseudocode}
\begin{document}
\begin{algorithm}
\caption{Un algorithme avec légende}\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{Ceci est un commentaire}
\ElsIf{$N$ is odd}
    \State $y \gets y \times X$
    \State $N \gets N - 1$
\EndIf
\EndWhile
\end{algorithmic}
\end{algorithm}

\end{document}
```

[Ouvrez cet exemple court algorithm+algpseudocode dans 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/126f2296fcfeb47137d2f705ab3884b60542e55d)

Le `package algorithm` environnement est un [package float](/latex/fr/figures-et-tableaux/02-positioning-images-and-tables.md) comme `table` et `environnement figure`, donc vous pouvez ajouter des modificateurs de placement des flottants `[hbt!]` après `\begin{algorithm}` si nécessaire. Cela signifie aussi que, tandis qu'un long `algorithmic` environnement, à lui seul, peut se répartir sur plusieurs pages, un `package algorithm` environnement ne le peut pas.

Le `package algorithm` package fournit également un `\listofalgorithms` commande qui fonctionne comme `\listoffigures`, mais pour les algorithmes légendés, comme ceci.

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

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

## Les packages algcompatible/algorithmic et algorithm

Le `algorithmic` package utilise une syntaxe similaire à `algpseudocode`; **mais** ses noms de commande sont en majuscules, par ex. `\STATE`, `\WHILE`, `\ENDWHILE`.

En revanche, `algcompatible` reconnaîtra les noms de commande en majuscules et en casse de titre, donc `\STATE`, `\WHILE`, `\ENDWHILE`, `\State`, `\While`, `\EndWhile` sont tous reconnus. En dehors des noms de commande, `algcompatible` et `algorithmic` les commandes utilisent la même syntaxe d'arguments que `algpseudocode`.

```latex
\documentclass{article}
\usepackage{algcompatible}
% OU \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}
```

[Ouvrez cet exemple court algcompatible dans 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)

Certains anciens modèles ou classes de document peuvent avoir chargé `algorithmic`, donc vous devrez suivre la syntaxe et les noms de commande fournis. *Vous ne devez pas charger les `algorithm2e`, `algpseudocode` packages si le `algorithmic` ou `algcompatible` package est déjà chargé.*

Le `package algorithm` package peut être utilisé avec `algorithmic`/`algcompatible` pour ajouter des légendes numérotées aux algorithmes.

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

## Le package algorithm2e

Le `algorithm2e` package a une structure syntaxique assez différente de celle des `algpseudocode`, `algcompatible` et `algorithmic` packages, donc vous devrez faire attention au package que vous voulez utiliser, ou au package que votre modèle a chargé.

Le `algorithm2e` package fournit un `package algorithm` environnement :

```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}
```

[Ouvrez cet exemple court algorithm2e dans 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/4a65c6cd1cfcaf2d315b77c66866252332778855)

Chaque ligne de votre code source *devez* doit se terminer par `\;` sinon votre algorithme continuera sur la même ligne de texte dans la sortie. Seules les lignes avec une macro commençant un bloc ne doivent pas se terminer par `\;`.

Lors de l'utilisation de `algorithm2e` vous pouvez utiliser `\caption{...}\ref{...}` directement dans cet `package algorithm` environnement, sans avoir besoin de charger d'autres packages. Cependant, si vous souhaitez ajouter des commentaires dans votre algorithme, vous devrez d'abord déclarer le nom de commande à utiliser :

```latex
%% Ceci déclare une commande \Comment
%% L'argument sera entouré de /* ... */
\SetKwComment{Comment}{/* }{ */}

\begin{algorithm}
\caption{Un algorithme avec légende}\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]{Ceci est un commentaire}
  }{\If{$N$ is odd}{
      $y \gets y \times X$\;
      $N \gets N - 1$\;
    }
  }
}
\end{algorithm}
```

[Ouvrez cet exemple d'algorithm2e légendé dans 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/9e8d7bcb71c01d82b4cba15a3af2e2907f583855)

Par défaut, le `simple` style algorithm est utilisé. Mais si vous préférez des lignes autour de l'algorithme et de la légende, vous pouvez ajouter l' `ruled` option de package lors du chargement de `algorithm2e`, ou écrire `\RestyleAlgo{ruled}` dans votre document. Vos algorithmes légendés seront alors mis en forme comme ceci :

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

Le `algorithm2e` package offre de nombreuses options de personnalisation. Par exemple, si vous souhaitez supprimer les lignes verticales qui marquent les blocs while—end while, if—end if, vous pouvez ajouter `noline` option de package lors du chargement de `algorithm2e`, ou écrire `\SetNoline`. Une `\listofalgorithms` commande est également disponible dans `algorithm2e`.

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

## Lectures complémentaires

* [`algpseudocode` documentation du paquet](https://texdoc.org/pkg/algorithmicx) (voir section 3.1)
* [`algorithmic` et `algorithme` documentation du paquet](https://texdoc.org/pkg/algorithms)
* [`algorithm2e` documentation du paquet](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/fr/autres-sujets/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.
