\documentclass[a4paper,10pt]{article}
\usepackage{myXsim}
\usepackage{minted}

\author{Benjamin Bertrand}
\title{Fonctions spécifications et tests - Cours}
\date{décembre 2022}

\pagestyle{empty}

\begin{document}

\maketitle

\section{Les fonctions}

\begin{definition}[Les fonctions]

    \textbf{Les fonctions} sont des séries de blocs d'instructions que l'on souhaite isoler et réutiliser. Elles permettent de \textbf{factoriser} des instructions et, quand elles sont bien nommées, donner des informations sur l'intention du programmeur.

    En Python, les fonctions ont la forme suivante

    \begin{center}
        \begin{minipage}{0.5\linewidth}
            \begin{minted}[bgcolor=base3,linenos]{python}
def nom_de_la_fonction(argument1, argument2, ...):
    instruction 1
    instruction 2
    instruction 3
    ...
    return valeur
            \end{minted}
        \end{minipage}
    \end{center}

    Le mot clé \mintinline{python}{return} permet de renseigner la valeur que la fonction retournera après son exécution. L'exécution de la fonction s'arrêtera au premier \mintinline{python}{return} rencontré. Si aucun \mintinline{python}{return} la fonction ne renverra aucune valeur, mais toutes les instructions s'exécuteront.

    Si une variable est définie dans une fonction, on ne pourra pas accéder à sa valeur en dehors sauf si elle retournée.
\end{definition}

\paragraph{Exemples}

\begin{multicols}{1}
    \begin{itemize}
        \item Fonction qui calcule les coordonnées d'un vecteur

                \begin{minipage}{0.9\linewidth}
                    \begin{minted}[bgcolor=base3,linenos]{python}
def coord_vecteur(xA, xB, yA, yB):
    x = xB - xA
    y = yB - yA
    return x, y

print(coord_vecteur(1, 2, 3, 4))
xAB, yAB = coord_vecteur(12, 34, 23, 15)

                    \end{minted}
                \end{minipage}

        \columnbreak

        \item Fonction qui teste si un mot de passe est valide

            \begin{center}
                \begin{minipage}{0.9\linewidth}
                    \begin{minted}[bgcolor=base3,linenos]{python}
mdp = "NSI"
def pass_est_valid(password):
    if password == mpd:
        return True

    print("Mot de passe invalide")
    return False

acces = pass_est_valid("plop")
acces2 = pass_est_valid("NSI")
print(acces)
print(accesé)
                    \end{minted}
                \end{minipage}
            \end{center}
    \end{itemize}
\end{multicols}

\bigskip

\begin{itemize}
    \item Fonction qui décore du texte

        \begin{center}
            \begin{minipage}{0.6\linewidth}
                \begin{minted}[bgcolor=base3,linenos]{python}
def decor_pyramide(texte, symbole):
    chapeau = ""
    for i in range(len(texte)):
        chapeau = chapeau + symbole*(i+1) + "\n"

    bas = ""
    for i in range(len(texte)):
        chapeau = chapeau + symbole*(len(texte)-i) + "\n"

    return chapeau + "\n" + texte + "\n" + bas

decoration = decor_pyramide("NSI", "#")
print(decoration)
print(chapeau)
                \end{minted}
            \end{minipage}
        \end{center}
\end{itemize}

\end{document}
