> 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/da/flere-emner/02-algorithms.md).

# Algoritmer

## Introduktion

*(For at skrive programkode-lister, henvis venligst til* [*denne hjælpeside*](/latex/da/formatering/11-code-listing.md) *i stedet.)*

For at sætte algoritmer eller pseudokode i LaTeX kan du bruge en af følgende muligheder:

* Vælg ÉN af de (`algpseudocode` ELLER `algcompatible` ELLER `algorithmic`) pakker til at sætte algoritmens brødtekst, og den `algorithm` pakken til at lave billedtekst til algoritmen.
* Den `algorithm2e` pakken.

**Bemærk, at du kun bør vælge én af ovenstående grupper af pakker og kun bruge de kommandoer og den syntaks, som den pakke du vælger, stiller til rådighed.** Disse pakker kan ikke indlæses samtidig; ellers får du masser af fejl.

## Pakkene algpseudocode og algorithm

Den `algpseudocode` pakken leverer et `algorithmic` miljø og nogle nyttige kommandoer. Du kan [åbne et fuldt eksempel 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=) , og vi vil gennemgå nogle detaljer i dette afsnit.

Her er vores første algoritme, der bruger miljøer og kommandoer fra `algpseudocode` pakken:

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

[Åbn dette korte algpseudocode-eksempel 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)

Her er resultatet:

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

*Du bør ikke indlæse `algorithm2e`, `algcompatible`, `algorithmic` pakkerne, hvis du allerede har indlæst `algpseudocode`.*

Bemærk, at kommandonavnene, som leveres af `algpseudocode` typisk er med stort begyndelsesbogstav, f.eks. `\State`, `\While`, `\EndWhile`.

Hvis du vil tilføje linjenumre til algoritmen, kan du tilføje det første linjenummer til `algorithmic` miljøet sådan her: `\begin{algorithmic}[1]` og få dette output:

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

Ovenstående algoritmeeksempel har hverken billedtekst eller nummer. Hvis du har brug for en algoritme med billedtekst, skal du også indlæse `algorithm` pakken og tilføje

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

omkring dit `algorithmic` miljø. Du kan bruge `\label{...}` efter `\caption{...}`, så algoritmens nummer kan krydshenvises med `\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{Dette er en kommentar}
\ElsIf{$N$ is odd}
    \State $y \gets y \times X$
    \State $N \gets N - 1$
\EndIf
\EndWhile
\end{algorithmic}
\end{algorithm}

\end{document}
```

[Åbn dette korte eksempel på 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/63226d923c24d6f7b099a1ca934e9af91eaa14f1)

Den `algorithm` miljø er et [float](/latex/da/figurer-og-tabeller/02-positioning-images-and-tables.md) som `table` og `figure`så du kan tilføje flydeplaceringsmodifikatorer `[hbt!]` efter `\begin{algorithm}` hvis det er nødvendigt. Det betyder også, at et langt `algorithmic` miljø alene kan brydes over flere sider, mens et `algorithm` miljø ikke kan.

Den `algorithm` pakken giver også en `\listofalgorithms` kommando, som fungerer ligesom `\listoffigures`, men for algoritmer med billedtekst, sådan her.

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

[Åbn et fuldt eksempel 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=)

## Pakkene algcompatible/algorithmic og algorithm

Den `algorithmic` pakken bruger syntaks, der ligner `algpseudocode`; **men** dens kommandonavne er skrevet med versaler, f.eks. `\STATE`, `\WHILE`, `\ENDWHILE`.

Derimod, `algcompatible` vil genkende kommandonavne med versaler og med stort begyndelsesbogstav, så `\STATE`, `\WHILE`, `\ENDWHILE`, `\State`, `\While`, `\EndWhile` genkendes alle. Bortset fra kommandonavnene, `algcompatible` og `algorithmic` bruger kommandoerne den samme argumentsyntaks 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}
```

[Åbn dette korte algcompatible-eksempel 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)

Nogle ældre skabeloner eller dokumentklasser kan have indlæst `algorithmic`, så du bliver nødt til at følge den angivne syntaks og de angivne kommandonavne. *Du bør ikke indlæse `algorithm2e`, `algpseudocode` pakkerne, hvis den `algorithmic` eller `algcompatible` pakken allerede er indlæst.*

Den `algorithm` pakken kan bruges med `algorithmic`/`algcompatible` for at tilføje nummererede billedtekster til algoritmerne.

[Åbn et fuldt eksempel 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=)

## Pakken algorithm2e

Den `algorithm2e` pakken har en ret anderledes syntaksstruktur end `algpseudocode`, `algcompatible` og `algorithmic` pakkerne, så du skal være omhyggelig med, hvilken pakke du vil bruge, eller hvilken pakke din skabelon har indlæst.

Den `algorithm2e` pakken leverer en `algorithm` miljø:

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

[Åbn dette korte eksempel på 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/e7589af21532af5178d48b5e4548161efd64900a)

Hver linje i din kildekode *skal* skal ende med `\;` ellers fortsætter din algoritme på den samme linje tekst i outputtet. Kun linjer med en makro, der begynder en blok, bør ikke ende med `\;`.

Når du bruger `algorithm2e` kan du bruge `\caption{...}\ref{...}` direkte inde i dette `algorithm` miljø uden at skulle indlæse andre pakker. Men hvis du vil tilføje kommentarer i din algoritme, skal du først deklarere det kommandonavn, der skal bruges:

```latex
%% Dette erklærer en kommando \Comment
%% Argumentet vil være omgivet af /* ... */
\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]{Dette er en kommentar}
  }{\If{$N$ is odd}{
      $y \gets y \times X$\;
      $N \gets N - 1$\;
    }
  }
}
\end{algorithm}
```

[Åbn dette eksempel med billedtekst for algorithm2e 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/451ccfa563057d428e349738c55ac9d66883516a)

Som standard bruges `plain` algoritmestilen. Men hvis du foretrækker linjer omkring algoritmen og billedteksten, kan du tilføje `ruled` pakkeindstillingen, når du indlæser `algorithm2e`, eller skrive `\RestyleAlgo{ruled}` i dit dokument. Dine algoritmer med billedtekst vil derefter blive sat sådan her:

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

Den `algorithm2e` pakken giver mange tilpasningsmuligheder. Hvis du for eksempel vil fjerne de lodrette linjer, der markerer blokkerne while—end while og if—end if, kan du tilføje `noline` pakkeindstillingen, når du indlæser `algorithm2e`, eller skrive `\SetNoline`. En `\listofalgorithms` kommando er også tilgængelig i `algorithm2e`.

[Åbn et fuldt eksempel 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=)

## Yderligere læsning

* [`algpseudocode` pakkedokumentation](https://texdoc.org/pkg/algorithmicx) (se afsnit 3.1)
* [`algorithmic` og `algoritme` pakkedokumentation](https://texdoc.org/pkg/algorithms)
* [`algorithm2e` pakkedokumentation](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/da/flere-emner/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.
