Faculté Informatique & Communications Cours d'informatique |
{ // Ceci est un bloc int i(0); i = i + 1; ... } |
Syntaxe : | if ( «condition» ) { «actions si» } else { «actions sinon» } |
où:
Remarques : | Il n'y a pas de point-virgule à la fin du bloc de traitements du branchement conditionnel. |
Attention à ne pas confondre l'opérateur d'affectation = avec l'opérateur relationnel de test d'égalité == utilisé pour former les conditions logiques. |
Syntaxe : |
switch («expression») { case «cst1» : «actions1»; ... case «cstn» : «actionsn»; default : «actions par défaut»; } |
Remarques : |
|
int a(5), b(1); ... switch (a-b) { case 0 : case 1 : cout << "a est proche de b" << endl; break; case 3 : case 5 : cout << "'a-b' n'est pas une valeur binaire..." << endl; break; default : cout << "'a-b' est pair ou est plus grand que 6" << endl; }
Syntaxe : | while («condition») {«actions»} |
Il n'y a pas de point-virgule après le bloc {«actions»}. |
Lorsque le programme passe par la structure de contrôle while, les actions suivantes sont réalisées :
Exemple : saisie d'une valeur dans un intervalle
int n(1); cout << "Saisie de la valeur..." << endl; while ( (n < 1) || (n > 3) ) { cout << "Entrez une valeur entre 1 et 3:"; cin >> n; } cout << "La valeur entrée est: " << n << endl; |
Résultat :Saisie de la valeur... La valeur entrée est: 1Le résultat n'est pas celui attendu... la boucle n'est même pas exécutée une fois. Pour entrer effectivement dans la boucle, il faudrait dans ce cas utiliser une valeur d'initialisation de n hors de l'intervalle (par exemple, avec int n(0);). |
Syntaxe : | do {«actions»} while («condition»); |
Il y a un point-virgule après l'expression («condition») |
Lorsque le programme passe par la structure de contrôle do ... while, les actions suivantes sont réalisées:
Exemple : saisie d'une valeur dans un intervalle
int n; cout << "Saisie de la valeur..." << endl; do { cout << "Entrez une valeur entre 1 et 3:"; cin >> n; } while ( (n < 1) || (n > 3) ) ; cout << "La valeur entrée est: " << n << endl; |
Résultat:Saisie de la valeur... Entrez une valeur entre 1 et 3: 5 Entrez une valeur entre 1 et 3: 0 Entrez une valeur entre 1 et 3: 3 La valeur entrée est: 3Dans ce cas, quelque soit la valeur d'initialisation de n, le programme passe au moins 1 fois par la boucle, et la saisie de la valeur est effectuée. |
Syntaxe : |
for («initialisation» ; «condition» ; «mise à jour» ) { «actions» } |
Il n'y a pas de point-virgule après le bloc d'actions. |
Lorsque le programme passe par la structure itérative for, les actions suivantes sont réalisées :
Exemple :
for (int n(0); n < 2; ++n) { cout << "n = " << n << endl; } |
Résultat :
n = 0 n = 1 |
Syntaxe : | break; |
L'instruction break; permet d'interrompre prématurément le déroulement d'une boucle, en sautant toutes les actions (de la structure) qui la suivent; il n'y a par ailleurs pas de test de la condition de continuation.
Exemple :
while (true) { cout << "Entrez une valeur: " << flush; cin >> value; /* * On test la validité de la valeur entrée * ([2,12]), si la valeur est bonne * (i.e. dans le domaine), on poursuit * l'exécution, sinon on affiche un message * d'erreur et on recommence la saisie.... */ if ((value >= 2) && (value <= 12)) { break; } cout << endl << "La valeur DOIT être dans l'intervalle [" << 2 << ',' << 12 << ']' << endl; } cout << "Valeur ok !" << endl; // <-- break mène ici. |
Résultat :
Entrez une valeur: 4 Valeur ok ! |
Remarques : |
|
Syntaxe : | continue; |
Lorsque le programme rencontre l'instruction continue (à l'intérieur d'un bloc actions d'une boucle), il passe directement à la fin de ce bloc, sans exécuter les instructions qui le suivent. Cependant, il ne sort pas de la boucle, contrairement à break.
Exemple :
for (int i(0); i < 8; ++i) { int j = i*2+3; /* si j < 10: on passe directement à l'itération * suivante (prochaine valeur de i) */ if (j < 10) continue; // sinon, on passe ici. cout << i << ", " << j << endl; } |
Résultat :
4, 11 5, 13 6, 15 7, 17 |
Par exemple, dans l'expression conditionnelle «(a && b && c && ...)», si a est faux, cela assure que toute l'expression est fausse, et les autres arguments ne sont pas évalués (les arguments sont évalués jusqu'au 1er argument faux).
De la même façon, dans l'expression conditionnelle «(a || b || c || ...)», si a est vrai, cela assure que toute l'expression est vraie, et les autres arguments ne sont pas évalués (les arguments sont évalués jusqu'au 1er argument vrai).
Exemples :
( (x != 0) && (4/x > 3) )L'expression 4/x produirait une erreur si xétait égal à zéro au moment de son évaluation. Mais du fait de l'évaluation paresseuse, cette expression n'est pas calculée quand x=0, et ne produit pas d'erreur. En revanche, la condition suivante produit une erreur pour x=0 :
( (4/x > 3) && (x != 0) )
On peut également créer des expressions conditionnelles assez
longues sans pour autant que leur évaluation soit forcément
coûteuse (en terme de temps de calcul).
L'expression conditionnelle :
(ch=='a' || ch=='e' || ch=='i' || ch=='o' || ch=='u'|| ch=='y')qui teste si le caractère ch est une voyelle ne sera évaluée complètement que si ch est effectivement une consonne, ou la voyelle y. (On a donc intérêt à tester en premier les conditions les plus probables, soit pour notre exemple et en admettant que le caractère testé soit issu d'un mot en langue latine, ch == 'e').
Notez que dans ce dernier exemple, on aurait plutôt intérêt à écrire un switch(ch) plutôt qu'un gros «ou» comme fait ici.