> For the complete documentation index, see [llms.txt](https://ayakaleaf-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://ayakaleaf-pro.ayaka.space/latex/uk/inshi-temi/02-algorithms.md).

# Алгоритми

## Вступ

*(Щоб писати списки програмного коду, зверніться до* [*цю довідкову сторінку*](/latex/uk/formatuvannya/11-code-listing.md) *замість цього.)*

Щоб верстати алгоритми або псевдокод у LaTeX, ви можете використати один із таких варіантів:

* Оберіть ОДИН із (`algpseudocode` АБО `algcompatible` АБО `algorithmic`) пакетів для верстки тіла алгоритму, а `algorithm` пакет для додавання підпису до алгоритму.
* Функція `algorithm2e` пакет.

**Зверніть увагу, що слід обрати лише одну з наведених вище груп пакетів і використовувати лише команди та синтаксис, які надає обраний пакет.** Ці пакети не можна завантажувати одночасно; інакше ви отримаєте багато помилок.

## Пакети algpseudocode та algorithm

Функція `algpseudocode` пакет надає `algorithmic` середовище та деякі корисні команди. Ви можете [відкрити повний приклад в Overleaf](https://www.overleaf.com/project/new/template/20763?id=71202437\&templateName=algpseudocode+%2B+algorithm+example\&latexEngine=pdflatex\&texImage=texlive-full%3A2020.1\&mainFile=) , а в цьому розділі ми розглянемо деякі деталі.

Ось наш перший алгоритм, що використовує середовища та команди з `algpseudocode` пакета:

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

[Відкрийте цей короткий приклад algpseudocode в 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)

Ось результат:

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

*Вам не слід завантажувати `algorithm2e`, `algcompatible`, `algorithmic` пакети, якщо ви вже завантажили `algpseudocode`.*

Зверніть увагу, що назви команд, які надає `algpseudocode` зазвичай пишуться з великої літери на початку кожного слова, напр. `\State`, `\While`, `\EndWhile`.

Якщо ви хочете додати нумерацію рядків до алгоритму, ви можете додати номер першого рядка до `algorithmic` середовища так: `\begin{algorithmic}[1]` і отримати такий результат:

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

Наведений вище приклад алгоритму не має підпису й не нумерується. Якщо вам потрібен алгоритм із підписом, вам також потрібно буде завантажити `algorithm` пакет і додати

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

навколо вашого `algorithmic` середовища. Ви можете використовувати `\label{...}` після `\caption{...}`, щоб на номер алгоритму можна було посилатися разом із `\ref{...}`.

```latex
\documentclass{article}
\usepackage{algorithm}
\usepackage{algpseudocode}
\begin{document}
\begin{algorithm}
\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$ є парним}
    \State $X \gets X \times X$
    \State $N \gets \frac{N}{2}$  \Comment{Це коментар}
\ElsIf{$N$ є непарним}
    \State $y \gets y \times X$
    \State $N \gets N - 1$
\EndIf
\EndWhile
\end{algorithmic}
\end{algorithm}

\end{document}
```

[Відкрийте цей короткий приклад algorithm+algpseudocode в 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/0ee7c68faed0d641af9b4013f17162909462d0e0)

Функція `algorithm` середовище є [float](/latex/uk/risunki-ta-tablici/02-positioning-images-and-tables.md) як `table` та `figure`, тож ви можете додавати модифікатори розміщення плаваючих об’єктів `[hbt!]` після `\begin{algorithm}` за потреби. Це також означає, що хоча довге `algorithmic` середовище саме по собі може переноситися на кілька сторінок, а `algorithm` середовище — ні.

Функція `algorithm` пакет також надає `\listofalgorithms` команду, яка працює так само, як `\listoffigures`, але для алгоритмів із підписами, ось так.

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

[Відкрийте повний приклад в Overleaf](https://www.overleaf.com/project/new/template/20763?id=71202437\&templateName=algpseudocode+%2B+algorithm+example\&latexEngine=pdflatex\&texImage=texlive-full%3A2020.1\&mainFile=)

## Пакети algcompatible/algorithmic та algorithm

Функція `algorithmic` пакет використовує синтаксис, схожий на `algpseudocode`; **але** його назви команд пишуться великими літерами, напр. `\STATE`, `\WHILE`, `\ENDWHILE`.

З іншого боку, `algcompatible` розпізнаватиме назви команд, написані великими літерами та з великої літери на початку кожного слова, тож `\STATE`, `\WHILE`, `\ENDWHILE`, `\State`, `\While`, `\EndWhile` усі вони розпізнаються. Окрім назв команд, `algcompatible` та `algorithmic` команди використовують той самий синтаксис аргументів, що й `algpseudocode`.

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

[Відкрийте цей короткий приклад algcompatible в 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)

Деякі старіші шаблони або класи документів можуть уже завантажувати `algorithmic`, тож вам доведеться дотримуватися наданого синтаксису та назв команд. *Вам не слід завантажувати `algorithm2e`, `algpseudocode` пакети, якщо `algorithmic` або `algcompatible` пакет уже завантажено.*

Функція `algorithm` пакет можна використовувати з `algorithmic`/`algcompatible` для додавання підписів з нумерацією до алгоритмів.

[Відкрийте повний приклад в Overleaf](https://www.overleaf.com/project/new/template/20768?id=71235978\&templateName=algpseudocode+%2B+algorithm+example\&latexEngine=pdflatex\&texImage=texlive-full%3A2020.1\&mainFile=)

## Пакет algorithm2e

Функція `algorithm2e` пакет має зовсім іншу синтаксичну структуру, ніж `algpseudocode`, `algcompatible` та `algorithmic` пакети, тож вам потрібно уважно стежити за тим, який пакет ви хочете використовувати або який пакет уже завантажив ваш шаблон.

Функція `algorithm2e` пакет надає `algorithm` середовище:

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

[Відкрийте цей короткий приклад algorithm2e в 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/806f39c7826233f72cb8bce230396fc2f20b9e52)

Кожен рядок у вашому вихідному коді *необхідно* повинен закінчуватися на `\;` інакше ваш алгоритм продовжиться в тій самій текстовій строці у виводі. Лише рядки з макросом, що починає блок, не повинні закінчуватися на `\;`.

Під час використання `algorithm2e` ви можете використовувати `\caption{...}\ref{...}` безпосередньо в цьому `algorithm` середовищі, без потреби завантажувати будь-які інші пакети. Однак якщо ви хочете додати коментарі до свого алгоритму, спочатку потрібно оголосити назву команди, яку слід використовувати:

```latex
%% Це оголошує команду \Comment
%% Аргумент буде взято в /* ... */
\SetKwComment{Comment}{/* }{ */}

\begin{algorithm}
\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$ є парним}{
    $X \gets X \times X$\;
    $N \gets \frac{N}{2}$ \Comment*[r]{Це коментар}
  }{\If{$N$ є непарним}{
      $y \gets y \times X$\;
      $N \gets N - 1$\;
    }
  }
}
\end{algorithm}
```

[Відкрийте цей приклад algorithm2e з підписом в 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/8a69b8d817b86aa72230e1228fbac5f7ea173c70)

За замовчуванням `plain` використовується стиль algorithm. Але якщо ви надаєте перевагу лініям навколо алгоритму та підпису, ви можете додати `ruled` опцію пакета під час завантаження `algorithm2e`, або написати `\RestyleAlgo{ruled}` у вашому документі. Тоді ваші алгоритми з підписами будуть верстані так:

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

Функція `algorithm2e` пакет надає багато параметрів налаштування. Наприклад, якщо ви хочете прибрати вертикальні лінії, що позначають блоки while—end while, if—end if, ви можете додати `noline` опцію пакета під час завантаження `algorithm2e`, або написати `\SetNoline`. Команда `\listofalgorithms` також доступна в `algorithm2e`.

[Відкрийте повний приклад в Overleaf](https://www.overleaf.com/project/new/template/20787?id=71277562\&templateName=algpseudocode+%2B+algorithm+example\&latexEngine=pdflatex\&texImage=texlive-full%3A2020.1\&mainFile=)

## Додаткове читання

* [`algpseudocode` документація пакета](https://texdoc.org/pkg/algorithmicx) (див. розділ 3.1)
* [`algorithmic` та `алгорит` документація пакета](https://texdoc.org/pkg/algorithms)
* [`algorithm2e` документація пакета](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://ayakaleaf-pro.ayaka.space/latex/uk/inshi-temi/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.
