> 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/id/topik-lainnya/02-algorithms.md).

# Algoritma

## Pendahuluan

*(Untuk menulis daftar kode program, silakan merujuk ke* [*halaman bantuan ini*](/latex/id/pemformatan/11-code-listing.md) *sebagai gantinya.)*

Untuk menata algoritma atau pseudocode di LaTeX, Anda dapat menggunakan salah satu opsi berikut:

* Pilih SALAH SATU dari (`algpseudocode` ATAU `algcompatible` ATAU `algorithmic`) paket untuk menata isi algoritma, dan paket `algorithm` untuk memberi judul keterangan pada algoritma.
* Fitur `algorithm2e` paket.

**Perhatikan bahwa Anda hanya boleh memilih salah satu dari kelompok paket di atas, dan hanya menggunakan perintah serta sintaks yang disediakan oleh paket yang Anda pilih.** Paket-paket ini tidak dapat dimuat secara bersamaan; jika tidak, Anda akan mendapat banyak kesalahan.

## Paket algpseudocode dan algorithm

Fitur `algpseudocode` paket menyediakan sebuah `algorithmic` lingkungan dan beberapa perintah yang berguna. Anda dapat [membuka contoh lengkap di Overleaf](https://www.overleaf.com/project/new/template/20763?id=71202437\&templateName=algpseudocode+%2B+algorithm+example\&latexEngine=pdflatex\&texImage=texlive-full%3A2020.1\&mainFile=) , dan kami akan membahas beberapa detail di bagian ini.

Berikut algoritma pertama kami, menggunakan lingkungan dan perintah dari `algpseudocode` paket:

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

[Buka contoh singkat algpseudocode ini di 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)

Berikut hasil keluarannya:

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

*Anda tidak boleh memuat `algorithm2e`, `algcompatible`, `algorithmic` paket-paket jika Anda sudah memuat `algpseudocode`.*

Perhatikan bahwa nama perintah yang disediakan oleh `algpseudocode` biasanya menggunakan kapitalisasi judul, mis. `\State`, `\While`, `\EndWhile`.

Jika Anda ingin menambahkan nomor baris pada algoritma, Anda dapat menambahkan nomor baris pertama ke `algorithmic` lingkungan seperti ini: `\begin{algorithmic}[1]` dan menghasilkan keluaran ini:

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

Contoh algoritma di atas tidak diberi keterangan maupun nomor. Jika Anda memerlukan algoritma yang diberi keterangan, Anda juga perlu memuat paket `algorithm` paket, dan menambahkan

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

di sekitar `algorithmic` lingkungan. Anda dapat menggunakan `\label{...}` setelah `\caption{...}`, sehingga nomor algoritma dapat dirujuk silang dengan `\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{Ini adalah komentar}
\ElsIf{$N$ is odd}
    \State $y \gets y \times X$
    \State $N \gets N - 1$
\EndIf
\EndWhile
\end{algorithmic}
\end{algorithm}

\end{document}
```

[Buka contoh singkat algorithm+algpseudocode ini di 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/d0e9dcba758010b4b55909a19e0d61d7ac6d7234)

Fitur `algorithm` lingkungan adalah sebuah [float](/latex/id/gambar-dan-tabel/02-positioning-images-and-tables.md) seperti `table` dan `figure`, jadi Anda dapat menambahkan penanda penempatan float `[hbt!]` setelah `\begin{algorithm}` jika perlu. Ini juga berarti bahwa meskipun sebuah `algorithmic` lingkungan yang panjang secara mandiri dapat terpotong antarhalaman, sebuah `algorithm` lingkungan tidak bisa.

Fitur `algorithm` paket juga menyediakan sebuah `\listofalgorithms` perintah yang bekerja seperti `\listoffigures`, tetapi untuk algoritma yang diberi keterangan, seperti ini.

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

[Buka contoh lengkap di Overleaf](https://www.overleaf.com/project/new/template/20763?id=71202437\&templateName=algpseudocode+%2B+algorithm+example\&latexEngine=pdflatex\&texImage=texlive-full%3A2020.1\&mainFile=)

## Paket algcompatible/algorithmic dan algorithm

Fitur `algorithmic` paket menggunakan sintaks yang mirip dengan `algpseudocode`; **tetapi** nama perintahnya ditulis huruf besar, mis. `\STATE`, `\WHILE`, `\ENDWHILE`.

Di sisi lain, `algcompatible` akan mengenali nama perintah huruf besar dan berkapital judul, sehingga `\STATE`, `\WHILE`, `\ENDWHILE`, `\State`, `\While`, `\EndWhile` semuanya dikenali. Selain nama perintah, `algcompatible` dan `algorithmic` perintah menggunakan sintaks argumen yang sama seperti `algpseudocode`.

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

[Buka contoh singkat algcompatible ini di 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)

Beberapa template atau kelas dokumen yang lebih lama mungkin telah memuat `algorithmic`, jadi Anda harus mengikuti sintaks dan nama perintah yang disediakan. *Anda tidak boleh memuat `algorithm2e`, `algpseudocode` paket jika `algorithmic` atau `algcompatible` paket sudah dimuat.*

Fitur `algorithm` paket dapat digunakan bersama `algorithmic`/`algcompatible` untuk menambahkan keterangan bernomor pada algoritma.

[Buka contoh lengkap di Overleaf](https://www.overleaf.com/project/new/template/20768?id=71235978\&templateName=algpseudocode+%2B+algorithm+example\&latexEngine=pdflatex\&texImage=texlive-full%3A2020.1\&mainFile=)

## Paket algorithm2e

Fitur `algorithm2e` paket memiliki struktur sintaks yang cukup berbeda dari `algpseudocode`, `algcompatible` dan `algorithmic` paket-paket lainnya, jadi Anda perlu berhati-hati memilih paket yang ingin digunakan, atau paket yang telah dimuat oleh template Anda.

Fitur `algorithm2e` paket menyediakan sebuah `algorithm` lingkungan:

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

[Buka contoh singkat algorithm2e ini di 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/38c44cb914ff9c1c44c4737761f2fbf297a39b14)

Setiap baris dalam kode sumber Anda *harus* diakhiri dengan `\;` jika tidak, algoritma Anda akan berlanjut pada baris teks yang sama dalam keluaran. Hanya baris dengan makro yang memulai sebuah blok yang tidak boleh diakhiri dengan `\;`.

Saat menggunakan `algorithm2e` Anda dapat menggunakan `\caption{...}\ref{...}` di dalam `algorithm` lingkungan ini secara langsung, tanpa perlu memuat paket lain. Namun jika Anda ingin menambahkan komentar dalam algoritma Anda, Anda harus terlebih dahulu mendeklarasikan nama perintah yang akan digunakan:

```latex
%% Ini mendeklarasikan sebuah perintah \Comment
%% Argumen akan diapit oleh /* ... */
\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]{Ini adalah komentar}
  }{\If{$N$ is odd}{
      $y \gets y \times X$\;
      $N \gets N - 1$\;
    }
  }
}
\end{algorithm}
```

[Buka contoh algorithm2e yang diberi keterangan ini di 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/fca7f841bbcc63524896b768c179fff00ac8edd6)

Secara bawaan,  `plain` gaya algorithm digunakan. Namun jika Anda lebih suka garis di sekitar algoritma dan keterangan, Anda dapat menambahkan opsi paket `ruled` saat memuat `algorithm2e`, atau tuliskan `\RestyleAlgo{ruled}` di dokumen Anda. Algoritma yang diberi keterangannya kemudian akan ditata seperti ini:

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

Fitur `algorithm2e` paket menyediakan banyak opsi penyesuaian. Misalnya, jika Anda ingin menghapus garis vertikal yang menandai blok while—end while, if—end if, Anda dapat menambahkan `noline` saat memuat `algorithm2e`, atau tuliskan `\SetNoline`. Sebuah `\listofalgorithms` perintah juga tersedia dalam `algorithm2e`.

[Buka contoh lengkap di Overleaf](https://www.overleaf.com/project/new/template/20787?id=71277562\&templateName=algpseudocode+%2B+algorithm+example\&latexEngine=pdflatex\&texImage=texlive-full%3A2020.1\&mainFile=)

## Bacaan lebih lanjut

* [`algpseudocode` dokumentasi paket](https://texdoc.org/pkg/algorithmicx) (lihat bagian 3.1)
* [`algorithmic` dan `algorit` dokumentasi paket](https://texdoc.org/pkg/algorithms)
* [`algorithm2e` dokumentasi paket](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/id/topik-lainnya/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.
