> 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/sv/fler-amnen/02-algorithms.md).

# Algoritmer

## Introduktion

*(För att skriva programkodlistningar, se* [*den här hjälpsidan*](/latex/sv/formatering/11-code-listing.md) *i stället.)*

För att sätta algoritmer eller pseudokod i LaTeX kan du använda ett av följande alternativ:

* Välj ETT av de (`algpseudocode` ELLER `algcompatible` ELLER `algorithmic`) paketen för att sätta algoritmens innehåll, och `algorithm` paketet för att ge algoritmen en bildtext.
* Den `algorithm2e` paketet.

**Observera att du bara ska välja en av de ovanstående paketgrupperna, och endast använda de kommandon och den syntax som tillhandahålls av det paket du väljer.** Dessa paket kan inte laddas samtidigt; annars får du massor av fel.

## Paketet algpseudocode och algorithm

Den `algpseudocode` paketet tillhandahåller en `algorithmic` miljö och några användbara kommandon. Du kan [öppna ett fullständigt exempel på Overleaf](https://www.overleaf.com/project/new/template/20763?id=71202437\&templateName=algpseudocode+%2B+algorithm+example\&latexEngine=pdflatex\&texImage=texlive-full%3A2020.1\&mainFile=) , och vi går igenom några detaljer i det här avsnittet.

Här är vår första algoritm, med hjälp av miljöer och kommandon från `algpseudocode` paketet:

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

[Öppna detta korta exempel med algpseudocode i 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)

Här är resultatet:

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

*Du bör inte ladda `algorithm2e`, `algcompatible`, `algorithmic` paketen om du redan har laddat `algpseudocode`.*

Observera att kommandonamnen som tillhandahålls av `algpseudocode` är vanligtvis skrivna med stor begynnelsebokstav, t.ex. `\State`, `\While`, `\EndWhile`.

Om du vill lägga till radnummer i algoritmen kan du lägga till det första radnumret i `algorithmic` miljön så här: `\begin{algorithmic}[1]` och få detta resultat:

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

Algoritmexemplet ovan har varken bildtext eller nummer. Om du behöver en algoritm med bildtext måste du också ladda `algorithm` paketet, och lägga till

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

runt din `algorithmic` miljö. Du kan använda `\label{...}` efter `\caption{...}`, så att algoritmnumret kan korsrefereras med `\ref{...}`.

```latex
\documentclass{article}
\usepackage{algorithm}
\usepackage{algpseudocode}
\begin{document}
\begin{algorithm}
\caption{En algoritm med bildtext}\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$ är jämnt}
    \State $X \gets X \times X$
    \State $N \gets \frac{N}{2}$  \Comment{Detta är en kommentar}
\ElsIf{$N$ är udda}
    \State $y \gets y \times X$
    \State $N \gets N - 1$
\EndIf
\EndWhile
\end{algorithmic}
\end{algorithm}

\end{document}
```

[Öppna detta korta exempel med algorithm+algpseudocode i 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/c5a33a0ee31c739a3d1a2a2262aac6b80e4c3233)

Den `algorithm` miljön är en [float](/latex/sv/figurer-och-tabeller/02-positioning-images-and-tables.md) som `table` och `figure`, så du kan lägga till modifierare för flottens placering `[hbt!]` efter `\begin{algorithm}` vid behov. Det betyder också att medan en lång `algorithmic` miljö för sig kan brytas över flera sidor, så kan inte en `algorithm` miljö.

Den `algorithm` paketet tillhandahåller också ett `\listofalgorithms` kommando som fungerar som `\listoffigures`, men för algoritmer med bildtext, som detta.

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

[Öppna ett fullständigt exempel på Overleaf](https://www.overleaf.com/project/new/template/20763?id=71202437\&templateName=algpseudocode+%2B+algorithm+example\&latexEngine=pdflatex\&texImage=texlive-full%3A2020.1\&mainFile=)

## Paketen algcompatible/algorithmic och algorithm

Den `algorithmic` paketet använder syntax som liknar `algpseudocode`; **men** dess kommandonamn skrivs med versaler, t.ex. `\STATE`, `\WHILE`, `\ENDWHILE`.

Å andra sidan, `algcompatible` kommer att känna igen kommandonamn med versaler och stor begynnelsebokstav, så `\STATE`, `\WHILE`, `\ENDWHILE`, `\State`, `\While`, `\EndWhile` känns alla igen. Förutom kommandonamnen, `algcompatible` och `algorithmic` använder kommandona samma argumentsyntax som `algpseudocode`.

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

[Öppna detta korta exempel med algcompatible i 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)

Vissa äldre mallar eller dokumentklasser kan ha laddat `algorithmic`, så du måste följa den syntax och de kommandonamn som tillhandahålls. *Du bör inte ladda `algorithm2e`, `algpseudocode` paketen om `algorithmic` eller `algcompatible` paketet redan är laddat.*

Den `algorithm` paketet kan användas med `algorithmic`/`algcompatible` för att lägga till numrerade bildtexter till algoritmerna.

[Öppna ett fullständigt exempel på Overleaf](https://www.overleaf.com/project/new/template/20768?id=71235978\&templateName=algpseudocode+%2B+algorithm+example\&latexEngine=pdflatex\&texImage=texlive-full%3A2020.1\&mainFile=)

## Paketet algorithm2e

Den `algorithm2e` paketet har en ganska annorlunda syntaxstruktur än `algpseudocode`, `algcompatible` och `algorithmic` paketen, så du måste vara noga med vilket paket du vill använda, eller vilket paket din mall har laddat.

Den `algorithm2e` paketet tillhandahåller en `algorithm` miljön:

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

[Öppna detta korta exempel med algorithm2e i 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/70aa3a89c7a0930d05d421c2c4865483671a506f)

Varje rad i din källkod *måste* avslutas med `\;` annars kommer din algoritm att fortsätta på samma textrad i utdata. Endast rader med ett makro som börjar ett block ska inte sluta med `\;`.

När du använder `algorithm2e` kan du använda `\caption{...}\ref{...}` direkt i denna `algorithm` miljö, utan att behöva ladda några andra paket. Men om du vill lägga till kommentarer i din algoritm måste du först deklarera kommandonamnet som ska användas:

```latex
%% Detta deklarerar ett kommando \Comment
%% Argumentet kommer att omges av /* ... */
\SetKwComment{Comment}{/* }{ */}

\begin{algorithm}
\caption{En algoritm med bildtext}\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$ är jämnt}{
    $X \gets X \times X$\;
    $N \gets \frac{N}{2}$ \Comment*[r]{Detta är en kommentar}
  }{\If{$N$ är udda}{
      $y \gets y \times X$\;
      $N \gets N - 1$\;
    }
  }
}
\end{algorithm}
```

[Öppna detta korta exempel med algorithm2e med bildtext i 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/c5004f7fe2f2489b066c816598a55fea49cd05f8)

Som standard används `plain` algoritmstilen. Men om du föredrar linjer runt algoritmen och bildtexten kan du lägga till `ruled` paketalternativet när du laddar `algorithm2e`, eller skriva `\RestyleAlgo{ruled}` i ditt dokument. Dina algoritmer med bildtext kommer då att sättas så här:

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

Den `algorithm2e` paketet erbjuder många anpassningsalternativ. Om du till exempel vill ta bort de vertikala linjer som markerar blocken while—end while, if—end if, kan du lägga till `noline` paketalternativet när du laddar `algorithm2e`, eller skriva `\SetNoline`. Ett `\listofalgorithms` kommando finns också tillgängligt i `algorithm2e`.

[Öppna ett fullständigt exempel på Overleaf](https://www.overleaf.com/project/new/template/20787?id=71277562\&templateName=algpseudocode+%2B+algorithm+example\&latexEngine=pdflatex\&texImage=texlive-full%3A2020.1\&mainFile=)

## Vidare läsning

* [`algpseudocode` paketdokumentation](https://texdoc.org/pkg/algorithmicx) (se avsnitt 3.1)
* [`algorithmic` och `algoritm` paketdokumentation](https://texdoc.org/pkg/algorithms)
* [`algorithm2e` paketdokumentation](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/sv/fler-amnen/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.
