instruction de saut conditionnel

This commit is contained in:
gwen 2017-04-04 10:50:18 +02:00
parent 97d5f66bd5
commit b5a77f5212
4 changed files with 77 additions and 41 deletions

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
modularite
algo
programme
control
machine
bribes
annexes/index
.. FIXME machine, algorithmique

View File

@ -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 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
@ -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)