> 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/pl/wiecej-tematow/02-algorithms.md).

# Algorytmy

## Wstęp

*(Aby pisać listingi kodu programu, proszę odwołać się do* [*tę stronę pomocy*](/latex/pl/formatowanie/11-code-listing.md) *zamiast tego.)*

Aby składać algorytmy lub pseudokod w LaTeX-u, możesz użyć jednej z następujących opcji:

* Wybierz JEDNĄ z (`algpseudocode` LUB `algcompatible` LUB `algorithmic`) pakietów do składu treści algorytmu oraz `algorithm` pakietu do podpisywania algorytmu.
* Ta `algorithm2e` pakiet.

**Pamiętaj, że powinieneś wybrać tylko jedną z powyższych grup pakietów i używać wyłącznie poleceń oraz składni udostępnionych przez wybrany pakiet.** Tych pakietów nie można ładować jednocześnie; w przeciwnym razie pojawi się wiele błędów.

## Pakiety algpseudocode i algorithm

Ta `algpseudocode` pakiet udostępnia `algorithmic` środowisko i kilka przydatnych poleceń. Możesz [otworzyć pełny przykład w Overleaf](https://www.overleaf.com/project/new/template/20763?id=71202437\&templateName=algpseudocode+%2B+algorithm+example\&latexEngine=pdflatex\&texImage=texlive-full%3A2020.1\&mainFile=) , a my omówimy pewne szczegóły w tej sekcji.

Oto nasz pierwszy algorytm, wykorzystujący środowiska i polecenia z pakietu `algpseudocode` pakiet:

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

[Otwórz ten krótki przykład algpseudocode w 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)

Oto wynik:

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

*Nie powinieneś ładować `algorithm2e`, `algcompatible`, `algorithmic` pakietów, jeśli już załadowałeś `algpseudocode`.*

Pamiętaj, że nazwy poleceń udostępnione przez `algpseudocode` są zwykle zapisywane z wielką literą na początku, np. `\State`, `\While`, `\EndWhile`.

Jeśli chcesz dodać numery linii do algorytmu, możesz dodać numer pierwszej linii do `algorithmic` środowiska w ten sposób: `\begin{algorithmic}[1]` i otrzymać taki wynik:

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

Powyższy przykład algorytmu nie ma podpisu ani numeracji. Jeśli potrzebujesz algorytmu z podpisem, będziesz musiał także załadować `algorithm` pakiet oraz dodać

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

wokół swojego `algorithmic` środowiska. Możesz użyć `\label{...}` po `\caption{...}`, aby numer algorytmu można było odwoływać krzyżowo za pomocą `\ref{...}`.

```latex
\documentclass{article}
\usepackage{algorithm}
\usepackage{algpseudocode}
\begin{document}
\begin{algorithm}
\caption{Algorytm z podpisem}\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{To jest komentarz}
\ElsIf{$N$ is odd}
    \State $y \gets y \times X$
    \State $N \gets N - 1$
\EndIf
\EndWhile
\end{algorithmic}
\end{algorithm}

\end{document}
```

[Otwórz ten krótki przykład algorithm+algpseudocode w 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/bdb4eeac4f08d456cf440e393a7d212775832e2a)

Ta `algorithm` środowisko jest [float](/latex/pl/rysunki-i-tabele/02-positioning-images-and-tables.md) jak `table` i `figure`, więc możesz dodać modyfikatory umiejscowienia elementu pływającego `[hbt!]` po `\begin{algorithm}` jeśli to konieczne. Oznacza to również, że podczas gdy długie `algorithmic` środowisko samo w sobie może być dzielone na strony, a `algorithm` środowisko nie.

Ta `algorithm` pakiet udostępnia także `\listofalgorithms` polecenie, które działa jak `\listoffigures`, ale dla algorytmów z podpisem, tak jak tutaj.

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

[Otwórz pełny przykład w Overleaf](https://www.overleaf.com/project/new/template/20763?id=71202437\&templateName=algpseudocode+%2B+algorithm+example\&latexEngine=pdflatex\&texImage=texlive-full%3A2020.1\&mainFile=)

## Pakiety algcompatible/algorithmic i algorithm

Ta `algorithmic` pakiet używa składni podobnej do `algpseudocode`; **ale** jego nazwy poleceń są zapisane wielkimi literami, np. `\STATE`, `\WHILE`, `\ENDWHILE`.

Z drugiej strony, `algcompatible` rozpozna nazwy poleceń zapisane wielkimi literami oraz z wielką literą na początku, więc `\STATE`, `\WHILE`, `\ENDWHILE`, `\State`, `\While`, `\EndWhile` wszystkie zostaną rozpoznane. Oprócz nazw poleceń, `algcompatible` i `algorithmic` polecenia używają takiej samej składni argumentów jak `algpseudocode`.

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

[Otwórz ten krótki przykład algcompatible w 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)

Niektóre starsze szablony lub klasy dokumentów mogły już załadować `algorithmic`, więc będziesz musiał przestrzegać podanej składni i nazw poleceń. *Nie powinieneś ładować `algorithm2e`, `algpseudocode` pakietów, jeśli `algorithmic` lub `algcompatible` pakiet jest już załadowany.*

Ta `algorithm` pakiet może być używany z `algorithmic`/`algcompatible` aby dodać podpisy z numeracją do algorytmów.

[Otwórz pełny przykład w Overleaf](https://www.overleaf.com/project/new/template/20768?id=71235978\&templateName=algpseudocode+%2B+algorithm+example\&latexEngine=pdflatex\&texImage=texlive-full%3A2020.1\&mainFile=)

## Pakiet algorithm2e

Ta `algorithm2e` pakiet ma dość odmienną strukturę składniową niż `algpseudocode`, `algcompatible` i `algorithmic` pakiety, więc musisz uważać, którego pakietu chcesz użyć lub jaki pakiet został załadowany w Twoim szablonie.

Ta `algorithm2e` pakiet udostępnia `algorithm` środowiska:

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

[Otwórz ten krótki przykład algorithm2e w 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/e7f95d69bc7c9c3f357761d248f80e597a3255d6)

Każda linia w Twoim kodzie źródłowym *musi* powinna kończyć się `\;` w przeciwnym razie Twój algorytm będzie kontynuowany w tej samej linii tekstu w wyniku. Tylko linie, w których makro rozpoczyna blok, nie powinny kończyć się `\;`.

Podczas używania `algorithm2e` możesz użyć `\caption{...}\ref{...}` bezpośrednio w tym `algorithm` środowisku, bez potrzeby ładowania jakichkolwiek innych pakietów. Jeśli jednak chcesz dodać komentarze w swoim algorytmie, musisz najpierw zadeklarować nazwę polecenia, której chcesz użyć:

```latex
%% To deklaruje polecenie \Comment
%% Argument zostanie otoczony przez /* ... */
\SetKwComment{Comment}{/* }{ */}

\begin{algorithm}
\caption{Algorytm z podpisem}\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]{To jest komentarz}
  }{\If{$N$ is odd}{
      $y \gets y \times X$\;
      $N \gets N - 1$\;
    }
  }
}
\end{algorithm}
```

[Otwórz ten przykład algorithm2e z podpisem w 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/a7b6390e92da109797384e8ee81c88a550a02907)

Domyślnie używany jest `plain` styl algorithm. Ale jeśli wolisz linie wokół algorytmu i podpisu, możesz dodać `ruled` opcję pakietu podczas ładowania `algorithm2e`, albo napisać `\RestyleAlgo{ruled}` w dokumencie. Wtedy Twoje algorytmy z podpisem będą składalne tak jak tutaj:

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

Ta `algorithm2e` pakiet oferuje wiele opcji dostosowywania. Na przykład, jeśli chcesz usunąć pionowe linie oznaczające bloki while—end while, if—end if, możesz dodać `noline` opcję pakietu podczas ładowania `algorithm2e`, albo napisać `\SetNoline`. A `\listofalgorithms` polecenie jest również dostępne w `algorithm2e`.

[Otwórz pełny przykład w Overleaf](https://www.overleaf.com/project/new/template/20787?id=71277562\&templateName=algpseudocode+%2B+algorithm+example\&latexEngine=pdflatex\&texImage=texlive-full%3A2020.1\&mainFile=)

## Dalsza lektura

* [`algpseudocode` dokumentacja pakietu](https://texdoc.org/pkg/algorithmicx) (zob. sekcję 3.1)
* [`algorithmic` i `algorytm` dokumentacja pakietu](https://texdoc.org/pkg/algorithms)
* [`algorithm2e` dokumentacja pakietu](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/pl/wiecej-tematow/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.
