instruction de saut conditionnel
This commit is contained in:
parent
97d5f66bd5
commit
b5a77f5212
|
@ -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**.
|
|
@ -8,10 +8,8 @@ Introduction à l'algorithmique
|
|||
langage
|
||||
modularite
|
||||
algo
|
||||
programme
|
||||
control
|
||||
machine
|
||||
bribes
|
||||
annexes/index
|
||||
|
||||
.. FIXME machine, algorithmique
|
||||
|
||||
|
||||
|
|
|
@ -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)
|
||||
|
||||
|
Loading…
Reference in New Issue