> 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/el/perissotera-themata/02-algorithms.md).

# Αλγόριθμοι

## Εισαγωγή

*(Για να γράψετε παραθέσεις κώδικα προγράμματος, ανατρέξτε στο* [*αυτή τη σελίδα βοήθειας*](/latex/el/morfopoiisi/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/d3a3aa33bbe1577ec5b05699288c828e4cd86438)

*Δεν θα πρέπει να φορτώσετε τα `algorithm2e`, `algcompatible`, `algorithmic` πακέτα αν έχετε ήδη φορτώσει το `algpseudocode`.*

Σημειώστε ότι τα ονόματα εντολών που παρέχει το `algpseudocode` συνήθως γράφονται με αρχικό κεφαλαίο, π.χ. `\State`, `\While`, `\EndWhile`.

Αν θέλετε να προσθέσετε αριθμούς γραμμών στον αλγόριθμο, μπορείτε να προσθέσετε τον πρώτο αριθμό γραμμής στο `algorithmic` περιβάλλον ως εξής: `\begin{algorithmic}[1]` και να πάρετε αυτήν την έξοδο:

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

Το παραπάνω παράδειγμα αλγορίθμου δεν έχει λεζάντα ούτε αρίθμηση. Αν χρειάζεστε αλγόριθμο με λεζάντα, θα χρειαστεί επίσης να φορτώσετε το `algorithm` πακέτο, και να προσθέσετε

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

γύρω από το `algorithmic` περιβάλλον σας. Μπορείτε να χρησιμοποιήσετε `\label{...}` μετά το `\caption{...}`, ώστε ο αριθμός του αλγορίθμου να μπορεί να αναφερθεί με διασταύρωση μέσω του `\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{Αυτό είναι ένα σχόλιο}
\ElsIf{$N$ is odd}
    \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/12f338f27571322b905eda4365d334d94517b0bd)

Η `algorithm` περιβάλλον είναι ένα [float](/latex/el/sximata-kai-pinakes/02-positioning-images-and-tables.md) όπως το `table` και `figure`, ώστε να μπορείτε να προσθέσετε τροποποιητές τοποθέτησης float `[hbt!]` μετά το `\begin{algorithm}` αν χρειάζεται. Αυτό σημαίνει επίσης ότι ενώ ένα μεγάλο `algorithmic` περιβάλλον από μόνο του μπορεί να σπάσει σε πολλές σελίδες, ένα `algorithm` περιβάλλον δεν θα το κάνει.

Η `algorithm` πακέτο παρέχει επίσης μια `\listofalgorithms` εντολή που λειτουργεί όπως η `\listoffigures`, αλλά για αλγορίθμους με λεζάντα, όπως εδώ.

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

[Ανοίξτε ένα πλήρες παράδειγμα στο 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/380ec749ab8f3414e195b5e9df2914fbe844efd0)

Κάθε γραμμή στον πηγαίο κώδικά σας *πρέπει* να τελειώνει με `\;` διαφορετικά ο αλγόριθμός σας θα συνεχιστεί στην ίδια γραμμή κειμένου στην έξοδο. Μόνο οι γραμμές με μια μακροεντολή που ξεκινά ένα μπλοκ δεν θα πρέπει να τελειώνουν με `\;`.

Όταν χρησιμοποιείτε `algorithm2e` μπορείτε να χρησιμοποιήσετε `\caption{...}\ref{...}` μέσα σε αυτό το `algorithm` περιβάλλον απευθείας, χωρίς να χρειάζεται να φορτώσετε άλλα πακέτα. Ωστόσο, αν θέλετε να προσθέσετε σχόλια στον αλγόριθμό σας, θα πρέπει πρώτα να δηλώσετε το όνομα της εντολής που θα χρησιμοποιηθεί:

```latex
%% Αυτό δηλώνει μια εντολή \Comment
%% Το όρισμα θα περικλείεται από /* ... */
\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]{Αυτό είναι ένα σχόλιο}
  }{\If{$N$ is odd}{
      $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/a5208140502f2036ef311cfab210133b6fdf8e0f)

Από προεπιλογή, χρησιμοποιείται το `plain` στυλ του αλγορίθμου. Αλλά αν προτιμάτε γραμμές γύρω από τον αλγόριθμο και τη λεζάντα, μπορείτε να προσθέσετε την επιλογή πακέτου `ruled` κατά τη φόρτωση του `algorithm2e`, ή να γράψετε `\RestyleAlgo{ruled}` στο έγγραφό σας. Οι αλγόριθμοί σας με λεζάντα θα στοιχειοθετηθούν τότε ως εξής:

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

Η `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://overleaf-pro.ayaka.space/latex/el/perissotera-themata/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.
