Instructions



next up previous contents index
Next: Chaînes de caractères Up: Quelques éléments de Previous: Types déclarés

Instructions

Après les déclarations, un bloc contient une suite d'instructions entourée par les mots-clé begin et end. L'instruction de base est l'affectation,   comme x := 1, ou plus généralement x := est une expression quelconque de même type que x. En général, la concordance de type entre partie gauche et partie droite de l'affectation implique que les deux correspondent à la déclaration d'un même type. Pourtant, il y a quelques commodités. La partie droite peut être une expression entière et la gauche réelle, puisque nous avons vu que les entiers sont considérés en Pascal comme un sous-ensemble des réels. De même, pour un type intervalle, seul le type du domaine support compte, sans oublier les vérifications d'appartenance à l'intervalle.

  Une instruction peut être conditionnelle, instruction if, et n'être exécutée que si une expression booléenne est vraie. Il y a deux formes d'instructions if. L'instruction conditionnelle partielle

if $e$ then $S_1$

qui permet de n'exécuter que si est vraie. Dans l'instruction conditionnelle complète

if $e$ then $S_1$ else $S_2$

on peut exécuter si est faux. On peut remarquer que, si est une instruction conditionnelle partielle, il y a une ambiguité car on ne sait plus si est le défaut de cette nouvelle instruction conditionnelle ou de l'instruction plus globale. En Pascal, la convention est d'associer la partie else à l'instruction if la plus interne. Ainsi

if $e$ then if $e '$ then $S_1$ else $S_2$

et

if $e$ then begin if $e '$ then $S_1$ end else $S_2$

ont deux sens différents. Pascal fournit d'autres instructions. L'instruction case   permet d'éviter une cascade d'instructions if et permet de faire un aiguillage selon différentes valeurs d'une expression de type ordinal. Selon la version de Pascal, il y a un cas otherwise,   qui est le cas par défaut. Ainsi

case $e$ of
$v_1$: $S_1$;
$v_2$: $S_2$;
...
$v_n$: $S_n$;
otherwise $S'$;
end

permet de faire l'instruction si , ou si pour tout .

Les autres instructions sont principalement des instructions d'itération, comme les instructions for, while ou repeat. L'instruction for permet d'itérer sans risque de non terminaison sur une variable de contrôle qui est incrémentée de 1 ou de -1 à chaque itération. Ainsi

 

for i:= $e_1$ to $e_2$ do $S$

itère fois l'instruction . De même

for i:= $e_1$ downto $e_2$ do $S$

fait pour itérer de à en décroissant.

En effet, si on modifie cette variable, on s'expose à la non terminaison de l'itération. Remarque: Pascal n'autorise que et comme pas d'itération. Si on veut un autre pas d'itération, il faudra multiplier la valeur de la variable de contrôle. Par ailleurs, la valeur de la variable de contrôle à la fin de la boucle for est indéfinie, et il est très déconseillé de l'utiliser.

Dans l'instruction while,  

while $e$ do $S$

on itère l'instruction tant que l'expression booléenne est vraie. De même dans l'instruction repeat,  

repeat $S_1$;$S_2$; ...$S_n$ until $e$

on effectue la suite des instructions ;;... tant que l'expression booléenne est fausse. Remarque: repeat fait au moins une fois l'itération. Donc l'instruction while est plus sûre, puisqu'elle permet de traiter le cas où le nombre d'itérations est nul. En outre, il faut bien faire attention que les instructions while et repeat peuvent ne pas terminer.

Il y a encore quatre types d'instructions: l'instruction composée, l'instruction vide, l'instruction goto, et l'appel de procédure. L'appel de procédure permet d'appeler une procédure comme déjà vu dans l'exemple du carré magique. L'instruction composée    

begin $S_1$;$S_2$; ...$S_n$ end

permet de faire les instructions , , ... en séquence. Ceci peut être particulièrement utile quand on veut par exemple itérer plusieurs instructions dans une instruction for, while, ou faire plusieurs instructions dans une alternative d'un if ou d'un case. L'instruction vide est à la fois une commodité syntaxique et une nécessité. Ainsi dans

begin $S_1$;$S_2$; ...$S_n$; end

  il y a une -instruction vide avant end. Ceci est particulièrement commode quand les instructions sont mises sur plusieurs lignes, car on peut facilement insérer une instruction entre et end si nécessaire, sans changer le programme. Par ailleurs, l'instruction vide permet de faire des attentes actives d'événements asynchrones. Ainsi l'instruction

while not Button do ;

permet d'attendre que le bouton de la souris soit enfoncé.

  L'instruction goto permet de faire des branchements vers des étiquettes. En règle générale, son utilisation est fortement déconseillée, Pascal fournissant suffisamment d'instructions structurées pour permettre d'en limiter l'utilisation. On peut se brancher avec goto vers une étiquette déclarée dans un bloc contenant l'instruction goto. Toutefois, on ne peut se brancher n'importe où. En règle générale, on ne peut rentrer dans toute instruction que par le début. Il est donc par exemple impossible de définir une étiquette devant l'alternative d'un if ou d'un case.

L'instruction goto a toutefois son utilité. Pascal n'ayant pas d'autre moyen de traiter les cas exceptionnels, il faut utiliser des goto dans les cas d'erreurs, comme dans l'exemple du carré magique, ou à la rigueur d'une boucle à deux sorties.



next up previous contents index
Next: Chaînes de caractères Up: Quelques éléments de Previous: Types déclarés