instruction de saut conditionnel
This commit is contained in:
parent
97d5f66bd5
commit
b5a77f5212
|
@ -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
|
||||||
|
|
|
@ -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
|
langage
|
||||||
modularite
|
modularite
|
||||||
algo
|
algo
|
||||||
|
programme
|
||||||
|
control
|
||||||
machine
|
machine
|
||||||
bribes
|
|
||||||
annexes/index
|
annexes/index
|
||||||
|
|
||||||
.. FIXME machine, algorithmique
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -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 d’une déclaration (de variable ou de procédure) est le nombre
|
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
|
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)
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue