instruction de saut conditionnel

This commit is contained in:
gwen 2017-04-04 10:50:18 +02:00 committed by Benjamin Bohard
parent 2d4265308b
commit a90179af53
4 changed files with 77 additions and 41 deletions

View File

@ -13,9 +13,9 @@ mathématicien arabe du 9ème siècle.
algorithme algorithme
terme désignant une suite d'opérations constituant un schéma de calcul 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. 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. problème.
L'algorithmique est l'étude et la production de règles et de techniques L'algorithmique est l'étude et la production de règles et de techniques

View File

@ -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**.

View File

@ -8,10 +8,8 @@ Introduction à l'algorithmique
langage langage
modularite modularite
algo algo
programme
control
machine machine
bribes
annexes/index annexes/index
.. FIXME machine, algorithmique

View File

@ -1,5 +1,5 @@
FIXME Définition d'un programme
====== ==========================
Qu'est-ce qu'un programme ? Qu'est-ce qu'un programme ?
~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~
@ -82,7 +82,7 @@ Exemples dans la langue française :
Voir aussi : Voir aussi :
- Déclarations de types primitifs et conversions de type - Déclarations de types primitifs et conversions de type
- Tpes de base:: - Types de base::
Octets (8 bits) byte Octets (8 bits) byte
Entiers courts (16 bits) short Entiers courts (16 bits) short
@ -118,13 +118,26 @@ Description d'une procédure
- Déclaration des paramètes - Déclaration des paramètes
- Déclaration du corps - Déclaration du corps
- Appel - Appel de la procédure
procedure permuter(a: int, b:int) .. raw:: latex
z: int
begin \begin{algorithm}
sdfdsfsdfsd \caption{Procédure de permutation de deux entiers}\label{permutation}
end \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 effet de bord
@ -133,7 +146,7 @@ effet de bord
instruction 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...) (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.). 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 lisibilité. Cela permet aussi d'appeler plusieurs fois, et à plusieurs endroit
dans le code, cette primitive. dans le code, cette primitive.
.. **FIXME** : exemple avec un goto
Appel d'une procédure 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 les expressions e1,...,en sont appelées paramètres effectifs de p
:: SYRACUSE
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.
Le niveau dune déclaration (de variable ou de procédure) est le nombre Le niveau dune déclaration (de variable ou de procédure) est le nombre
de procédures sous lesquelles elle est déclarée. Le programme principal 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 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 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) **toujours** quelque chose (même la valeur ``None`` qui n'est pas rien)