Académique Documents
Professionnel Documents
Culture Documents
faux/false/0
Condition
vrai/true/1
Instructions
Fin
2.3 Sa syntaxe.
if (expression)
{
instruction 11;
instruction 12;
...
}
2.4 Un exemple.
Dans cet exemple, trois variables a, b et c sont saisies, le programme affichera la valeur maximale.
int a, b, c, max;
cout << "Entrez 3 Entiers : " << endl;
cin >> a >> b >> c;
max = a;
if(b > max) max = b;
if(c > max) max = c;
On mémorise la variable a dans max. Si b est plus grand que a ; alors c’est b qui est mémorisé. Si c
est plus grand que a et b, alors c sera mémorisé dans max.
3 Les structures conditionnelles alternatives.
Elles offrent le choix entre deux instructions.
Début
faux/false/0
Condition
vrai/true/1
Instructions 1 Instructions 2
Fin
3.3 Sa syntaxe.
Dans le cas où, plusieurs instructions seraient présentes, il serai impératif de les grouper au sein d’un
bloc {} ; de cette manière :
if (expression)
{
instruction 11;
instruction 12;
...
}
else
{
instruction 21;
instruction 22;
...
}
3.4 Un exemple.
Appliquons la structure de choix dans le cas d’un programme qui lit 2 entiers au clavier et qui
affiche la plus grande des 2 valeurs :
int a, b;
cout << "entrez 2 nbres entiers : ";
cin >> a >> b;
if (a>b)
cout << "le maximum est: " << a << endl; // Instrunction 1
else
cout << "le maximum est: " << b << endl; // Instrunction 2
En saisissant les valeurs a = 5 et b = 1, par exemple, la condition a>b vaut 1 ; c’est l’expression 1
qui sera exécutée.
Si la première condition vraie porte le numéro i, alors les instructions exécutées seraient les
instructions i. ensuite le programme, sort de la structure conditionnelle.
Si aucune condition n’est vraie, alors les instructionsDefaut seront exécutées.
Comme la dernière ligne de cette structure est facultative, si elle est absente, aucune instruction ne
serait exécutée dans le cas où toutes les conditions seraient fausses.
Instruction(s) 2 Vraie
Instruction(s) 3
InstructionDefaut
Fin
Si la condition 1 est vraie alors les instructions 1 sont exécutées, et le programme ignore toutes les
autres instructions et va à la fin de si. Si elle est fausse, la condition 2 est évaluée ; si elle est vraie
les instructions 2 sont alors exécutées. Ainsi de suite. Si aucune des conditions n’est vraie, le
programme va à la ligne sinon (la dernière) et exécute les instructions par défaut.
4.3 Sa syntaxe.
if( condition_1)
instruction_1;
else if( condition_2)
instruction_2;
else if( condition_3)
instruction_3;
else if( condition_4)
instruction_4;
[else instructionDefaut;] // Facultatif
4.4 Un exemple.
Voici un programme qui lit la note d’un étudiant, et affiche le résultat de validation avec la mention
obtenue.
int N;
cout << "Entrer Note N, telle que 0<= N <=20" << endl;
cin >> N;
if( N < 0 || N > 20) cout << "Note Invalide " << endl;
else if ( N >= 16 ) cout << "Mention TB " << endl;
else if ( N >= 14 ) cout << "Mention B " << endl;
else if ( N >= 12 ) cout << "Mention AB " << endl;
else if ( N >= 10 ) cout << "Mention P " << endl;
else cout << "Module NV " << endl;
Qu’on interprète en disant : selon la valeur de expression, c.à.d. que si expression est égale
à valeur1, alors les instruction1 seront exécutées. Sinon, si expression est différente
de valeur1, on passe à valeur2 et on refait le même raisonnement. Et ainsi de suite. Dans le
cas où toutes les valeurs sont différentes de expression alors les instructions par défaut
seront exécutées.
Début
1 Avec break
Variable Valeur1 instructions1
0 Sans break
1 Avec break
Valeur2 Instructions2
0 Sans break
1 Avec break
Valeurn instructionsn
0 Sans break
Fin
Pour le cas de switch, il n y a pas de condition explicite, mais il y a une comparaison entre la
variable et la valeur, en cas d’occurrence d’égalité, il y a branchement vers les instructions.
5.3 Sa syntaxe.
switch (Variable)
{
case Valeur_1 : instructions_1
[break;] // facultatif
case Valeur_2 : instructions_2
[break;] // facultatif
case Valeur_n : instructions_n
[break;] // facultatif
default : instructions_def
[break;] // facultatif
}
Le compilateur vérifie, dans l’ordre, si variable est égale à une des constantes, dans lequel cas les
instructions correspondantes sont exécutés.
Si break est absent, les instructions qui suivent sont aussi exécutées. Si break est présent, le
programme va vers la fin de la structure.
Si aucune des constantes n’est égale à la variable de switch alors les instructions de default sont
exécutées.
5.4 Exemples.
Supposons que l’on veuille vérifier si une lettre saisie au clavier est une voyelle ou non ?
char c ;
cout << "Entrez une lettre : ";
cin >> c ;
switch(c)
{
case 'a' :
case 'e' :
case 'i' :
case 'o' :
case 'u' :
case 'y' : cout << c << " est une voyelle" << endl;
break;
default : cout << c << " n\'est pas une voyelle" << endl;
}
int n ;
cout << "Entrez une entier : ";
cin >> n ;
switch(n%2)
{
case 0 : cout << n << " est pair";
break;
case 1 : cout << n << " est impair";
}
TantQue <condition>
DebutTantQue
Instructions
FinTantQue
Tant que la condition est vraie on exécute les instructions. Dès que la condition devient fausse on va
à la ligne du programme situé après tant que, sans exécuter les instructions.
Début
0/false
Condition
1/true
Instructions
Fin
6.1.3 Sa syntaxe
En C/C++ la structure while est la traduction de tantQue, elle a la syntaxe suivante :
while(condition)
instruction
Où :
Condition est une expression logique, elle doit être entre parenthèses.
Instruction instruction à exécuter.
Dans le cas de la présence de plusieurs instructions, on place les instructions entre accolades.
while(condition)
{
Instructions
}
6.1.4 Exemples.
Exemple 1 : Une structure while qui affiche les nombres entiers compris entre deux nombres a et b
tels que a < b.
#include<iostream>
using namespace std;
int main()
{
int a = 10, b = 20, i;
i = a;
while(i <= b)
{
cout << i << endl;;
i++;
}
cout << "Valeur de i en sortie de boucle : " << i;
return 0;
}
Il est à noter que la valeur de i à la sortie de la boucle est 21. Puisque b vaut 20 ; la condition ne
sera fausse qu’à partir de i = 21.
Exemple 4 : lire des nombres réels positifs ou nuls, dès qu’un nombre négatif est saisi la lecture
s’arrête.
float x;
x=1.;
while(x>=0.)
{
cin >> x;
}
Pour que l’on puisse accéder la première fois à l’intérieur de la boucle, il faut bien initialiser x à une
valeur non négative quelconque.
On peut ensuite modifier ce programme pour qu’il calcule la moyenne des valeurs saisies.
float x,som=0.;
int compt=0;
x=1.;
while(x>=0.)
{
cin >> x;
if (x>=0.)
{
compt++;
som+=x;
}
}
if(compt) cout << "la moyenne est : " << som/compt;
Faire
instructions
TantQue(condition)
Les instructions sont exécutées, au moins, une fois. Leur exécution plus d’une fois dépendra de l’état
de la condition.
Instructions
Condition
1/true
0/false
Fin
6.2.3 Sa syntaxe
La traduction de Faire … TantQue dans le langage C/C++ est do…while() ;
do
instruction
while(condition);
Attention au point-virgule présent après la condition. La condition entre parenthèse doit être une
expression logique. Par ailleurs, dans le cas de la présence de plusieurs instructions, il faut les placer
entre accolades.
Do {
instructions
} while(condition);
6.2.4 Exemples.
D’une manière générale, tout ce qui est écrit avec une des deux formes de boucle peut être réécrit
avec l’autre moyennant des adaptations mineures.
Exemple 1 : Reprenons l’exemple 4 précédent.
Il s’agit de lire, au clavier, des nombres réels tant qu’ils sont positifs ou nuls ; dès qu’un nombre
négatif est saisi la lecture doit s’arrêter. Calculer ensuite la moyenne des nombres saisis.
do
{
cin >> x;
if (x>=0.)
{
compt++;
som+=x;
}
} while(x>=0.);
if(compt) cout << "la moyenne est : " << som/compt;
Comme on peut le constater, on lit d’abord x et ensuite on teste son signe. Selon sa valeur on
revient faire une autre lecture ou on sort de la boucle. Il n’a pas été nécessaire d’initialiser x comme
dans le cas de while.
Exemple 2 :
Afficher tous les multiples pairs de 3 inferieurs à 100.
int n = 100, i = 1;
do
{
if (i%2 == 0 && i%3 == 0) cout << i << " est pair et mult de 3" <<endl;
i++;
}while( i <= 100 );
La forme des structures répétitives utilisant for s’apparente beaucoup à celle utilisant while, en ce
sens que le test y est effectué avant l’exécution du bloc d’instructions ; en plus d’un réarrangement
des autres éléments de la structure.
6.3.2 Exemple.
On va prendre un exemple avec un cas de boucle fait avec la forme while que l’on convertie en
forme for. On pourrait écrire un programme qui affiche 5 fois le mot « hello » en utilisant une
variable de contrôle qui est un entier i :
On remarquera que :
L’expression1 : i = 0 correspond à l’initialisation.
L’expression2 : i < 5 correspond à la condition.
L’expression3 : i++ correspond à l’incrémentation.
Pour montrer que la présence des expressions, dans for( ; ; ) est facultative, on peut apporter
ces quelques modifications, au code ci-dessus :
int i;
i = 0;
for( ;i < 5; )
{
cout << "Hello ! " << i << endl;
i++;
}
L’opérateur séquentiel (,) permet de regrouper des sous-expressions dans une seule expression. Les
sous-expressions y apparaissent sous forme d’une liste, sur une même ligne. Ces sous-expressions
sont évaluées en séquence (à la suite les unes après les autres). La valeur d'une liste d'expressions est
celle de la dernière de la liste.
i++;
j += 5;
k = i + 2 * j;
Si on écrivait
i++, j += 5, k = i + 2 * j;
On obtiendrait un opérateur séquentiel avec (,) dans lequel les expressions précédentes sont
devenues des sous expressions d’une instruction terminée par (;).
L’expression i++ est d’abord évaluée, suivie de j += 5, et k = i + 2 * j est évaluée en
dernier. C'est-à-dire que l’associativité est de gauche vers la droite.
Il ne faut pas confondre cette écriture avec cette autre écriture :
i++; j += 5; k = i + 2 * j;
Laquelle à l’évidence est équivalente à la première, où les expressions occupaient une ligne chacune.
Ici, les trois sont sur la même ligne, mais chacune est terminée par un point-virgule.
Un autre exemple pour montrer la deuxième partie de la définition : La valeur d'une liste
d'expressions est celle de la dernière de la liste.
i = (j++, i+3, k+1);
Dans cet exemple, la variable i prendra la valeur k+1 tout simplement ; mais auparavant, la sous
instruction j++ sera exécutée, suivie de l’expression i+3 et enfin k+1. Comme k+1 est la dernière
expression, alors i sera égale à k+1. Notez que la présence des parenthèses est déterminante, sinon
la séquence précédente aura une autre interprétation.
L’usage de l’opérateur séquentiel se rencontre particulièrement dans les structures de contrôle de
répétition for.
6.3.4 Opérateur séquentiel (,) dans for.
Souvent, dans l’usage de la forme for, on a besoin de plus qu’une instruction dans l’initialisation
ou dans l’incrémentation. Dans ces cas l’operateur séquentiel est très utile.
Prenons un exemple : Deux variables i et j, initialement à 0 et 60 respectivement. i augmente d’un
pas de 2, et j diminue d’un pas de 3. Où se trouve l’intersection ?
Pour répondre, on écrit le code suivant :
int i, j;
Notez l’utilisation de (,) dans les initialisations et les incrémentations. Le critère d’arrêt de boucle,
est que i doit rester inferieur à j. Dès que ce n’est plus vrai, on arrête la boucle.
A l’exécution, on a la réponse ; l’intersection se trouve dans les intervalles [22,24] pour i et [24,27]
pour j.
Si on limite son usage aux boucles, les effets de cette instruction sont :
Continue renvoie à la fin de l’itération en cours en sautant toutes les instructions qui la suivent.
Prenons l’exemple d’un programme qui afficherait les diviseurs d’un entier N, ignorerait les non
diviseurs. Les diviseurs 1 et N étant connus d’avance.
6 int N, i, compt;
7
8 cout << "Entrez un nombre : ";
9 cin >> N;
10
11 for ( compt=0, i = 2; i < N; i++ )
12 {
13 if ( N % i != 0 ) continue;
14 cout << i << " est diviseur de " << N << endl;
15 compt++;
16 }
17 cout << "Nbre de diviseurs = " << compt;
A la ligne 13, il y a l’instruction continue. Si le reste de la division de N par i est non nul,
continue est activée. Alors les lignes 14 et 15 sont sautées, on reste dans la boucle mais on passe
dans le pas suivant, c.à.d. à i+1.
7.2 break.
Utilisée dans une boucle, break fait sortir de la boucle, en sautant toutes les instructions qui la
séparent de l’accolade fermant le bloc.
Exemple : étant donné un nombre entier N, on écrit un programme qui permet de dire s’il est un
nombre premier, ou non ?
Pour cela, on passe tous les nombres de 2 à N-1, si N possède un seul diviseur, il ne sera pas
premier. Si on rencontre un tel diviseur, on affiche un message et on utilise break pour arrêter la
boucle.
Une fois en dehors de la boucle, on teste i, s’il a atteint N, c’est qu’il n y a pas de diviseur de N. on
affiche un message.
6 int N, i, compt;
7
8 cout << "Entrez un nombre : ";
9 cin >> N;
10
11 for ( i = 2; i < N; i++ )
12 {
13 if ( N % i == 0 )
14 {
15 cout << i << " est diviseur de " << N << endl;
16 cout << N << " n\'est pas un nombre premier";
17 break;
18 }
19 }
20 if(i>=N) cout << N << " est un nombre premier ";
21
7.3 goto.
Avant de pouvoir utiliser l’instruction goto, on aura besoin de savoir ce qu’est une étiquette.
– Etiquette/Label.
Une étiquette –label en anglais- est une numérotation des lignes d’un programme.
Une étiquette doit porter un nom, qui respecte les règles des identificateurs.
Elle doit être insérée, à l’endroit du programme que l’on voudrait étiqueter, suivie du caractère
spécial (:).
Le nom donné à une étiquette n’a pas besoin d’être déclaré. Les étiquettes possèdent un espace
de noms propre.
– Exemples d’étiquettes.
L0, L1 et L2, dans le programme qui suit sont des étiquettes.
– goto.
Elle s’utilise avec la syntaxe :
goto etiquette :
goto L1 : // par exemple
Elle opère un branchement non conditionnel de la ligne d’appel, vers l’étiquette, sans aucune
formalité.
Pour illustrer ces propos, on va donner comme exemple, la conception d’une boucle avec goto,
sans avoir besoin, ni de while ni de for.
Cette boucle sera faite pour i allant de : i=0 à i=N, N étant un entier quelconque.
6 L0:
7 int N, i, compt;
8
9 cout << "Entrez un nombre >0 : ";
10 cin >> N;
11
12 i = 0;
13 L1:
14 cout << "valeur de i : " << i << endl;
15 /// + autres instructions
16 i++;
17
18 if ( i < N ) goto L1;
19 else goto L2;
20 L2:
21 cout << "Message: sortie de boucle" << endl;
22
Dans la ligne n°18 est présente l’instruction goto. Tant que i reste inférieur à N, goto renvoie vers
l’étiquette L1 (boucle), dès que i devient égale à N, goto renvoie vers L2 (hors boucle).