• Aucun résultat trouvé

Toutes les structures de contrôle se basent sur la vérité ou la non vérité d'une expression conditionnelle pour déterminer le chemin d'exécution. Un exemple d'expression conditionnelle est A == B. Elle utilise l'opérateur

==pour voir si la variable Aest équivalente à la variable B. L'expression génère un Booléen trueou false(ce sont des mots clé du C++ uniquement ; en C une expression est “vraie” si elle est évaluée comme étant différente de zéro). D'autres opérateurs conditionnels sont >, <, >=, etc. Les instructions conditionnelles seront abordées plus en détail plus loin dans ce chapitre.

3.2.2 - if-else

La structure de contrôle if-elsepeut exister sous deux formes : avec ou sans le else. Les deux formes sont :

if(expression) instruction

or

if(expression) instruction

else

instruction

l'“expression” est évaluée à trueou false. Le terme “instruction” désigne soit une instruction seule terminée par un point virgule soit une instruction composée qui est un groupe d'instructions simples entourées d'accolades. Chaque fois que le terme “instruction” est utilisé, cela implique toujours qu'il s'agisse d'une instruction simple ou composée.

Notez qu'une telle instruction peut être également un autre if, de façon qu'elles puissent être cascadées.

//: C03:Ifthen.cpp

// Demonstration des structures conditionnelles if et if-else

#include <iostream>

using namespace std;

int main() { int i;

cout << "tapez un nombre puis 'Entrée" << endl;

cin >> i;

if(i > 5)

cout << "Il est plus grand que 5" << endl;

else if(i < 5)

cout << "Il est plus petit que 5 " << endl;

else

cout << "Il est égal à " << endl;

cout << "tapez un nombre puis 'Entrée" << endl;

cin >> i;

if(i < 10)

if(i > 5) // "if" est juste une autre instruction cout << "5 < i < 10" << endl;

else

cout << "i <= 5" << endl;

else // Se réfère au "if(i < 10)"

cout << "i >= 10" << endl;

} ///:~

Par convention le corps d'une structure de contrôle est indenté pour que le lecteur puisse déterminer aisément où elle commence et où elle se termine Remarquez que toutes les conventions ne s'accorde pas à indenter le code en ce sens. La guerre de religion entre les styles de formattage est incessante. Conférez l'appendice A pour une description du style utilisé dans ce livre..

3.2.3 - while

Les boucles while, do-while,et for. une instruction se répète jusqu'à ce que l'expression de contrôle soit évaluée à false. La forme d'une boucle whileest

while(expression) instruction

L'expression est évaluée une fois à l'entrée dans la boucle puis réévaluée avant chaque itération sur l'instruction.

L'exemple suivant reste dans la boucle whilejusqu'à ce que vous entriez le nombre secret ou faites un appui sur control-C.

//: C03:Guess.cpp // Devinez un nombre (demontre le "while")

#include <iostream>

using namespace std;

int main() { int secret = 15;

int guess = 0;

// "!=" est l'opérateur conditionnel "différent de" : while(guess != secret) { // Instruction composée

cout << "Devinez le nombre : ";

cin >> guess;

}

cout << "Vous l'avez trouvé !" << endl;

} ///:~

L'expression conditionnelle du whilen'est pas restreinte à un simple test comme dans l'exemple ci-dessus ; il peut

être aussi compliqué que vous le désirez tant qu'il produit un résutat trueou false. Vous verrez même du code dans lequel la boucle n'a aucun corps, juste un point virgule dénudé de tout effet :

while(/* Plein de choses ici */)

;

Dans un tel cas, le programmeur a écrit l'expression conditionnelle pour non seulement réaliser le test mais aussi pour faire le boulot.

3.2.4 - do-while

La construction d'un boucle do-whileest

do instruction

while(expression);

la boucle do-whileest différente du while parce que l'instruction est exécutée au moins une fois, même si l'expression est évaluée à fausse dès la première fois. Dans une boucle whileordinaire, si l'expression conditionnelle est fausse à la première évaluation, l'instruction n'est jamais exécutée.

Si on utilise un do-whiledans notre Guess.cpp, la variable guessn'a pas besoin d'une valeur initiale factice, puisqu'elle est initialisée par l'instruction cinavant le test :

//: C03:Guess2.cpp // Le programme de devinette avec un do-while

#include <iostream>

using namespace std;

int main() { int secret = 15;

int guess; // Pas besoin d'initialisation do {

cout << "Devinez le nombre : ";

cin >> guess; // L'initialisation s'effectue } while(guess != secret);

cout << "Vous l'avez trouvé!" << endl;

} ///:~

Pour des raisons diverses, la plupart des programmeurs tend à éviter l'utilisation du do-whileet travaille simplement avec un while.

3.2.5 - for

Une boucle forpermet de faire une initialisation avant la première itération. Ensuite elle effectue un test conditionnel et, à la fin de chaque itération, une forme de “saut”. La construction de la boucle forest :

for(initialisation; condition; saut) instruction

chacune des expressions initialisation, condition,ou sautpeut être laissée vide. l' initialisationest exécutée une seule fois au tout début. La conditionest testée avant chaque itération (si elle est évaluée à fausse au début, l'instruction ne s'exécutera jamais). A la fin de chaque boucle, le sauts'exécute.

Une boucle forest généralement utilisée pour “compter” des tâches:

//: C03:Charlist.cpp // Affiche tous les caractères ASCII

// Demontre "for"

#include <iostream>

using namespace std;

int main() {

for(int i = 0; i < 128; i = i + 1)

if (i != 26) // Caractère ANSI d'effacement de l'écran cout << " valeur : " << i

<< " caractère : "

<< char(i) // Conversion de type

<< endl;

} ///:~

Vous pouvez noter que la variable in'est définie qu'a partir de là où elle est utilisée, plutôt qu'au début du block dénoté par l'accolade ouvrante ‘ {’. Cela change des langages procéduraux traditionnels (incluant le C), qui requièrent que toutes les variables soient définies au début du bloc. Ceci sera discuté plus loin dans ce chapitre.