> 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/cs/dalsi-temata/02-algorithms.md).

# Algoritmy

## Úvod

*(Pro zápis výpisů programového kódu se prosím podívejte na* [*tuto stránku nápovědy*](/latex/cs/formatovani/11-code-listing.md) *místo toho.)*

K sazbě algoritmů nebo pseudokódu v LaTeXu můžete použít jednu z následujících možností:

* Vyberte JEDNU z (`algpseudocode` NEBO `algcompatible` NEBO `algorithmic`) balíčků pro sazbu těla algoritmu a balíček `algorithm` pro popisek algoritmu.
* Ta `algorithm2e` balíček.

**Všimněte si, že byste měli vybrat pouze jednu z výše uvedených skupin balíčků a používat pouze příkazy a syntaxi poskytovanou balíčkem, který si zvolíte.** Tyto balíčky nelze načíst současně; jinak dostanete spoustu chyb.

## Balíčky algpseudocode a algorithm

Ta `algpseudocode` balíček poskytuje `algorithmic` prostředí a několik užitečných příkazů. Můžete [otevřít plný příklad na Overleafu](https://www.overleaf.com/project/new/template/20763?id=71202437\&templateName=algpseudocode+%2B+algorithm+example\&latexEngine=pdflatex\&texImage=texlive-full%3A2020.1\&mainFile=) a v této části se na některé podrobnosti podíváme.

Tady je náš první algoritmus s použitím prostředí a příkazů z `algpseudocode` balíček:

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

[Otevřete tento krátký příklad algpseudocode v Overleafu](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)

Tady je výsledný výstup:

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

*Neměli byste načítat `algorithm2e`, `algcompatible`, `algorithmic` balíčky, pokud jste již načetli `algpseudocode`.*

Všimněte si, že názvy příkazů poskytované `algpseudocode` jsou obvykle psány s počátečním velkým písmenem, např. `\State`, `\While`, `\EndWhile`.

Pokud chcete k algoritmu přidat čísla řádků, můžete přidat první číslo řádku do `algorithmic` prostředí takto: `\begin{algorithmic}[1]` a dostanete tento výstup:

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

Výše uvedený příklad algoritmu nemá popisek ani číslo. Pokud potřebujete algoritmus s popiskem, budete také muset načíst `algorithm` balíček a přidat

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

kolem vašeho `algorithmic` prostředí. Můžete použít `\label{...}` za `\caption{...}`, aby bylo možné na číslo algoritmu odkazovat pomocí křížového odkazu s `\ref{...}`.

```latex
\documentclass{article}
\usepackage{algorithm}
\usepackage{algpseudocode}
\begin{document}
\begin{algorithm}
\caption{An algorithm with caption}\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{This is a comment}
\ElsIf{$N$ is odd}
    \State $y \gets y \times X$
    \State $N \gets N - 1$
\EndIf
\EndWhile
\end{algorithmic}
\end{algorithm}

\end{document}
```

[Otevřete tento krátký příklad algorithm+algpseudocode v Overleafu](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/d19c7acecca4f05d02d91fb0c4c0e0fcc0c21895)

Ta `algorithm` prostředí je [float](/latex/cs/obrazky-a-tabulky/02-positioning-images-and-tables.md) jako `table` a `figure`, takže můžete přidat modifikátory umístění plovoucího objektu `[hbt!]` za `\begin{algorithm}` v případě potřeby. To také znamená, že zatímco dlouhé `algorithmic` prostředí samo o sobě se může rozdělit přes stránky, `algorithm` prostředí se nerozdělí.

Ta `algorithm` balíček také poskytuje `\listofalgorithms` příkaz, který funguje jako `\listoffigures`, ale pro algoritmy s popiskem, jako je tento.

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

[Otevřete plný příklad na Overleafu](https://www.overleaf.com/project/new/template/20763?id=71202437\&templateName=algpseudocode+%2B+algorithm+example\&latexEngine=pdflatex\&texImage=texlive-full%3A2020.1\&mainFile=)

## Balíčky algcompatible/algorithmic a algorithm

Ta `algorithmic` balíček používá syntaxi podobnou `algpseudocode`; **ale** jeho názvy příkazů jsou psány velkými písmeny, např. `\STATE`, `\WHILE`, `\ENDWHILE`.

Na druhou stranu, `algcompatible` rozpozná názvy příkazů psané velkými i počátečními velkými písmeny, takže `\STATE`, `\WHILE`, `\ENDWHILE`, `\State`, `\While`, `\EndWhile` jsou všechny rozpoznány. Kromě názvů příkazů, `algcompatible` a `algorithmic` příkazy používají stejnou syntaxi argumentů jako `algpseudocode`.

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

[Otevřete tento krátký příklad algcompatible v Overleafu](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)

Některé starší šablony nebo třídy dokumentů mohly načíst `algorithmic`, takže budete muset dodržovat poskytnutou syntaxi a názvy příkazů. *Neměli byste načítat `algorithm2e`, `algpseudocode` balíčky, pokud `algorithmic` nebo `algcompatible` balíček je již načten.*

Ta `algorithm` balíček lze použít s `algorithmic`/`algcompatible` pro přidání očíslovaných popisků k algoritmům.

[Otevřete plný příklad na Overleafu](https://www.overleaf.com/project/new/template/20768?id=71235978\&templateName=algpseudocode+%2B+algorithm+example\&latexEngine=pdflatex\&texImage=texlive-full%3A2020.1\&mainFile=)

## Balíček algorithm2e

Ta `algorithm2e` balíček má zcela odlišnou syntaktickou strukturu než `algpseudocode`, `algcompatible` a `algorithmic` balíčky, takže si musíte dát pozor, který balíček chcete použít, nebo který balíček vaše šablona načetla.

Ta `algorithm2e` balíček poskytuje `algorithm` prostředí:

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

[Otevřete tento krátký příklad algorithm2e v Overleafu](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/072fb15358fa2cb450f4f19583725def29c99fc8)

Každý řádek ve vašem zdrojovém kódu *musí* musí končit na `\;` jinak bude váš algoritmus pokračovat na stejném řádku textu ve výstupu. Pouze řádky s makrem zahajujícím blok by neměly končit na `\;`.

Při použití `algorithm2e` můžete použít `\caption{...}\ref{...}` přímo uvnitř tohoto `algorithm` prostředí, bez nutnosti načítat jakékoli další balíčky. Pokud však chcete do svého algoritmu přidat komentáře, budete nejprve muset deklarovat název příkazu, který se má použít:

```latex
%% Tímto se deklaruje příkaz \Comment
%% Argument bude uzavřen mezi /* ... */
\SetKwComment{Comment}{/* }{ */}

\begin{algorithm}
\caption{An algorithm with caption}\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]{This is a comment}
  }{\If{$N$ is odd}{
      $y \gets y \times X$\;
      $N \gets N - 1$\;
    }
  }
}
\end{algorithm}
```

[Otevřete tento příklad algorithm2e s popiskem v Overleafu](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/46f0fe55f8b377a2540c6ceb390beba104cc34f4)

Ve výchozím nastavení se používá `plain` styl algorithm. Pokud však dáváte přednost řádkům kolem algoritmu a popisku, můžete při načítání přidat možnost balíčku `ruled` balíčku `algorithm2e`, nebo napsat `\RestyleAlgo{ruled}` do svého dokumentu. Vaše algoritmy s popiskem pak budou vysázeny takto:

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

Ta `algorithm2e` balíček nabízí mnoho možností přizpůsobení. Pokud například chcete odstranit svislé čáry označující bloky while—end while, if—end if, můžete přidat `noline` balíčku `algorithm2e`, nebo napsat `\SetNoline`. A `\listofalgorithms` příkaz je také dostupný v `algorithm2e`.

[Otevřete plný příklad na Overleafu](https://www.overleaf.com/project/new/template/20787?id=71277562\&templateName=algpseudocode+%2B+algorithm+example\&latexEngine=pdflatex\&texImage=texlive-full%3A2020.1\&mainFile=)

## Další čtení

* [`algpseudocode` dokumentace balíčku](https://texdoc.org/pkg/algorithmicx) (viz část 3.1)
* [`algorithmic` a `algoritmu` dokumentace balíčku](https://texdoc.org/pkg/algorithms)
* [`algorithm2e` dokumentace balíčku](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/cs/dalsi-temata/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.
