diff --git a/algorithmique/cours/algo.txt b/algorithmique/cours/algo.txt index 8d7cae8..2b0e255 100644 --- a/algorithmique/cours/algo.txt +++ b/algorithmique/cours/algo.txt @@ -13,9 +13,9 @@ mathématicien arabe du 9ème siècle. algorithme terme désignant une suite d'opérations constituant un schéma de calcul - ou de résolution d'un problème. C'est un processus systématique de + ou de résolution d'un problème. C'est un processus systématique de résolution d'un problème permettant de décrire précisément des étapes. - C'est une suite finie d'instructions permettant de donner la réponse à un + C'est une suite finie d'instructions permettant de donner la réponse à un problème. L'algorithmique est l'étude et la production de règles et de techniques diff --git a/algorithmique/cours/control.txt b/algorithmique/cours/control.txt new file mode 100644 index 0000000..53a02ca --- /dev/null +++ b/algorithmique/cours/control.txt @@ -0,0 +1,49 @@ +Structures de contrôle +====================== + +L'instruction de saut conditionnel +---------------------------------- + +.. raw:: latex + + \begin{algorithm} + \caption{Exemple de saut conditionnel}\label{saut} + \begin{algorithmic}[1] + \Procedure{Euclide}{} \Comment{c'est l'algorithme d'Euclide} + \State $\textit{stringlen} \gets \text{length of }\textit{string}$ + \State $i \gets \textit{patlen}$ + \BState \emph{top}: + \If {$i > \textit{stringlen}$} \Return false + \EndIf + \State $j \gets \textit{patlen}$ + \BState \emph{loop}: \Comment{C'est le label (l'étiquette)} + \If {$\textit{string}(i) = \textit{path}(j)$} + \State $j \gets j-1$. + \State $i \gets i-1$. + \State \textbf{goto} \emph{loop}. + \State \textbf{close}; + \EndIf + \State $i \gets + i+\max(\textit{delta}_1(\textit{string}(i)),\textit{delta}_2(j))$. + \State \textbf{goto} \emph{top}. \Comment{C'est l'instruction de saut} + \EndProcedure + \end{algorithmic} + \end{algorithm} + + +- **Ligne 7**, le bloc `loop` est aussi un **label** (une étiquette), c'est-à-dire + une marque posée qu'il est possible de retrouver dans le programme. +- **Ligne 11**, l'instruction `goto` (aller à ) est un saut. + +D'une manière générale:: + + Instruction 1 + Saut Label1 + Instruction 2 + ... + Label1: + Instruction n + +.. important:: les sauts conditionnels sont à éviter, même s'ils sont implémentés + dans le langage cible, car c'est le meilleur moyen d'aboutir à + du **code spaghetti**. diff --git a/algorithmique/cours/index.txt b/algorithmique/cours/index.txt index 490b785..51d3dc5 100644 --- a/algorithmique/cours/index.txt +++ b/algorithmique/cours/index.txt @@ -8,10 +8,8 @@ Introduction à l'algorithmique langage modularite algo + programme + control machine - bribes annexes/index -.. FIXME machine, algorithmique - - diff --git a/algorithmique/cours/bribes.txt b/algorithmique/cours/programme.txt similarity index 86% rename from algorithmique/cours/bribes.txt rename to algorithmique/cours/programme.txt index 7187fd4..6dec7ad 100644 --- a/algorithmique/cours/bribes.txt +++ b/algorithmique/cours/programme.txt @@ -1,5 +1,5 @@ -FIXME -====== +Définition d'un programme +========================== Qu'est-ce qu'un programme ? ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ @@ -82,7 +82,7 @@ Exemples dans la langue française : Voir aussi : - Déclarations de types primitifs et conversions de type -- Tpes de base:: +- Types de base:: Octets (8 bits) byte Entiers courts (16 bits) short @@ -118,13 +118,26 @@ Description d'une procédure - Déclaration des paramètes - Déclaration du corps -- Appel +- Appel de la procédure -procedure permuter(a: int, b:int) - z: int - begin - sdfdsfsdfsd - end +.. raw:: latex + + \begin{algorithm} + \caption{Procédure de permutation de deux entiers}\label{permutation} + \begin{algorithmic}[1] + \Procedure{permuter}{$a,b$}{} + \BState \emph{parametres}: + \State $a: \textit{int}$ + \State $b: \textit{int}$ + \BState \emph{locales}: + \State $z: \textit{int}$ \Comment{Une variable intermédiaire est nécessaire} + \BState \emph{corps}: + \State $z \gets a$ + \State $a \gets b$ + \State $b \gets z$ + \EndProcedure + \end{algorithmic} + \end{algorithm} effet de bord @@ -133,7 +146,7 @@ effet de bord instruction - command/phrase en mesure de modifier l'état du programme ou de la machine hôte + commande ou phrase en mesure de modifier l'état du programme ou de la machine hôte (allocation mémoire, support externe, disque, écran...) Une procédure ne renvoie pas de valeur, mais provoque un 'effet de bord' (écriture dans une globale, dans un flux sortant etc.). @@ -143,8 +156,6 @@ Cela permet de structurer le texte source du programme et améliorer sa lisibilité. Cela permet aussi d'appeler plusieurs fois, et à plusieurs endroit dans le code, cette primitive. -.. **FIXME** : exemple avec un goto - Appel d'une procédure ~~~~~~~~~~~~~~~~~~~~~ @@ -168,27 +179,7 @@ Appel d'une procédure les expressions e1,...,en sont appelées paramètres effectifs de p -:: - - program syracuse; - procedure syracuse(max : integer); - var i : integer; - procedure length(); - var v,j : integer; - procedure step(); - begin - v := v+1; if j = 2*(j/2) then j := j/2 else j := 3*j+1 - end; - begin - v := 0; j := i; while j <> 1 do step(); writeln(v) - end; - begin - i := 1; - while i ≤ max do begin length(); i := i+1 end - end; - - begin syracuse(100) end. - +SYRACUSE Le niveau d’une déclaration (de variable ou de procédure) est le nombre de procédures sous lesquelles elle est déclarée. Le programme principal @@ -200,5 +191,3 @@ Description d'une fonction Une fonction renvoie une valeur et ne modifie pas l'état courant du programme en cours d'exécution ni ne réalise d'effets de bord. Elle renvoie **toujours** quelque chose (même la valeur ``None`` qui n'est pas rien) - -