L'instruction de sélection multiple ou instruction CASE ou analyse par cas permet d'effectuer une sélection parmi une séquence d'instructions.
Exemples:
CASE Operator OF
Plus: X := X+Y;
Minus: X := X-Y;
Times: X := X*Y
END;
CASE I OF
0, 2, 4, 6, 8: Writeln( 'Nombre pair' );
1, 3, 5, 7, 9: Writeln( 'Nombre impair' );
10 .. 100: Writeln( 'Entre 10 et 100' )
ELSE
Writeln( 'Négatif ou supérieur à 100' )
END;
L'instruction CASE est fréquemment utilisée en programmation. Elle est identifiée par le mot réservé CASE qui est suivi d'une expression - le sélecteur [angl. selector] - et d'une liste d'instructions préfixée chacune par une ou plusieurs constantes - les constantes CASE - ou par le mot réservé ELSE. La liste des instructions est introduite par le mot réservé OF et se termine par un END. Les constantes CASE doivent être toutes différentes et du même type que le sélecteur. Elles sont interprétées comme des étiquettes. Le sélecteur doit être d'un type scalaire non réel.
La forme syntaxique générale de l'instruction CASE telle qu'elle est implémentée en Turbo-Pascal est décrite dans les figures 9.7 à 9.9. Ces dernières doivent être interprétées de la manière suivante:
"Si l'évaluation de l'expression donne une valeur égale à une des constantes CASE (ou comprise dans un domaine CASE), alors exécuter seule l'instruction repérée respectivement par cette constante (ou par ce domaine). Si aucune constante CASE ne correspond à la valeur du sélecteur, exécuter l'instruction qui suit le mot réservé ELSE, s'il y a une partie ELSE."
Figure 9.7 Syntaxe de l'instruction CASE
Figure 9.8 Liste d'instructions repérées par des constantes ou des domaines
Figure 9.9 Partie ELSE de l'instruction CASE
Dans un arbre programmatique la structure CASE se présente comme dans la figure 9.10.
Le sélecteur < sel > est indiqué dans le rond identifié par le mot clé TEST. Les clauses < case > sont indiquées dans les ronds ou dans une table de sélections.
Figure 9.10 L'instruction CASE dans l'arbre programmatique
Voici quelques exemples de l'usage de l'instruction CASE:
Exemples:
CASE Quantity OF
1: Price := Price;
2, 3: Price := Price*0.95;
4 .. 10: Price := Price*0.90;
11 .. 100: Price := Price*0.80
ELSE
Price := Price*0.70
END; {-- CASE}
TYPE TDays = (Di, Lu, Ma, Me, Je, Ve, Sa);
...
VAR D: TDays;
...
CASE D OF
DI:; { rien }
Lu .. Ve: BEGIN
< aller travailler >;
< travailler >;
< rentrer à la maison >
END;
Sa: < laver voiture >
END; {-- CASE}
Dans certains cas, on peut être amené à considérer des constantes CASE pour lesquelles aucune action ne doit être effectuée. Le bloc d'instructions correspondant est alors vide ce qui s'exprime par un point-virgule placé immédiatement après le ":".
CASE X*Y OF { X, Y entiers positifs }
0: Writeln( 'X=0 ou Y=0' );
2, 4, 6: BEGIN
X := X+Y;
X := Sqr( X )
END;
1: Y := X DIV Y
ELSE
X := X*Y
END; {-- CASE}
Comme dans l'instruction IF, l'exécution de chaque branche est mutuellement exclusive de telle sorte que seule une des instructions repérées par une étiquette est exécutée et dépend du résultat de l'évaluation du sélecteur. Ainsi l'instruction
CASE X*Y OF ...
est équivalente à la séquence:
IF X*Y = 0 THEN BEGIN
Writeln( 'X=0 or Y=0' );
END ELSE BEGIN
IF ( X*Y = 2 ) OR ( X*Y = 4 ) OR ( X*Y = 6 ) THEN BEGIN
X := X+Y;
X := Sqr( X );
END ELSE BEGIN
IF X*Y = 1 THEN BEGIN
Y := X DIV Y;
END ELSE BEGIN
X := X*Y;
END;
END;
END;
Exercice: Comparer les 2 séquences suivants:
|
IF A>B THEN BEGIN
|
IF A>B THEN BEGIN
|
Exercice: Expliquer l'effet de l'instruction ci-dessous (noter l'importance des commentaires et de l'identation), puis, écrire l'instruction à l'aide de l'instruction CASE.
IF A>0 THEN BEGIN
IF A>1 THEN BEGIN
IF A>2 THEN BEGIN
Writeln( A-2 ); { A>2 }
END ELSE BEGIN
Writeln( A-1 ); { 1<A<=2 }
END;
END ELSE BEGIN
Writeln( A ); { 0<A<=1 }
END;
END ELSE BEGIN
Writeln <message>;{ A<=0 }
END;
Les commentaires montrent clairement ce que fait cette instruction selon que la variable A appartienne à l'une ou l'autre des 4 catégories envisagées.
TERMES TECHNIQUES
analyse par cas
constante CASE
domaine CASE
instruction CASE
instruction de sélection multiple
sélecteur
© Aflo Informatique , 2003-2004