« Programmation C++/Les structures de contrôles/Exercices if...else et switch » : différence entre les versions

Contenu supprimé Contenu ajouté
MacGeek (discussion | contributions)
Aucun résumé des modifications
Ligne 1 :
#REDIRECT[[{{Programmation C++/Les structures de contrôles]]}}
{{C++ débutant}}
== Le cours du chapitre 3 : le if, le if...else et le switch ==
 
__TOC__
=== Les structures de contrôle ===
Ce sont des structures permettant d'exécuter certaines instructions de manière conditionnelle ou répétitive. Nous verrons dans ce chapitres les structures de contrôles de type conditionnelles :
* le if,
* le if else,
* le switch.
 
=== Le if ===
Cette structure de contrôle permet d'exécuter une instruction ou une suite d'instructions seulement si une condition est vraie.
 
==== Syntaxe : ====
if (''condition'') instruction;
 
On évalue la condition :
* si elle est vraie on exécute l’instruction et on passe à l’instruction suivante,
* si elle est fausse on passe directement à l’instruction suivante.
 
L’instruction peut être remplacée par une suite d ’instructions entre accolades
 
=== Les conditions ===
Les conditions habituelles sont utilisables :
* if (a>b)… strictement supérieur à
* if (a>=b)… supérieur ou égal à
* if (a<b)… strictement inférieur à
* if (a<=b)… inférieur ou égal à
* if (a==b)… test d'égalité
* if (a!=b)… différent de
 
=== Une erreur classique ===
Pour effectuer un test d'égalité, il faut utiliser 2 fois le symbole =.
 
Par exemple :
if(a==b)…
 
Une erreur classique consiste à écrire :
if(a=b)…
 
=== Exemple 1 : utilisation du if ===
{{Cadre code|''Exemple 1'' : utilisation du '''if'''|
<source lang="cpp">
#include <iostream>
using namespace std;
 
int main()
{
int a;
cout << "Tapez la valeur de a : ";
cin >> a;
if (a > 10) cout << "Gagné !" << endl;
cout << "Le programme est fini" << endl;
return 0;
}
</source>
}}
 
* Ce programme demande à l'utilisateur de saisir une valeur entière a.
* Si la valeur tapée est strictement supérieure à 10 on affiche "Gagné" puis "Le programme est fini" et le programme s'arrête.
* Dans le cas contraire, on affiche uniquement "le programme est fini" et le programme s'arrête.
 
==== Exécution n°1 de l'exemple 1 ====
Lorsqu'on exécute notre programme, il s'affiche à l'écran :
Tapez la valeur de a : '''80'''
Gagné
Le programme est fini
 
==== Exécution n°2 de l'exemple 1 ====
Lorsqu'on exécute notre programme, il s'affiche à l'écran :
Tapez la valeur de a : '''8'''
Le programme est fini
 
==== Exécution n°3 de l'exemple 1 ====
 
Tapez la valeur de a : '''10'''
Le programme est fini
 
=== Le if ... else ===
Cette structure de contrôle permet d'exécution soit l'instruction1, soit l'instruction 2 en fonction du résultat d'une condition.
 
Syntaxe :
if (''condition'') ''instruction1'';
else ''instruction2'';
 
# On évalue la condition,
# si elle est vraie, on exécute l’instruction1 et on passe à l’instruction suivante,
# si elle est fausse, on exécute l’instruction2 et on passe à l’instruction suivante.
 
L’instruction1 ou l’instruction2 peuvent être remplacées par une suite d’instructions entre accolades.
 
=== Exemple 2 :Utilisation du if ...else ===
{{Cadre code|''Exemple 2'' : utilisation du '''if... else'''|
<source lang="cpp">
#include <iostream>
using namespace std;
 
int main()
{
int a;
cout<<"Tapez la valeur de a : ";
cin>>a;
if(a>10)cout<<"Gagné !"<<endl;
else cout<<"Perdu"<<endl;
cout<<"le programme est fini"<<endl;
return 0;
}
</source>
}}
 
* Ce programme demande à l'utilisateur de saisir une valeur entière a.
* Si la valeur tapée est strictement supérieure à 10, on affiche "Gagné" puis "Le programme est fini" et le programme s'arrête.
* Dans le cas contraire, on affiche "Perdu" puis "Le programme est fini" et le programme s'arrête.
 
==== Exécution n°1 de l'exemple 2 ====
Lorsqu'on exécute notre programme, il s'affiche à l'écran :
Tapez la valeur de a : 80
Gagné
Le programme est fini
 
==== Exécution n°2 de l'exemple 2 ====
Lorsqu'on exécute notre programme, il s'affiche à l'écran :
Tapez la valeur de a : 5
Perdu
Le programme est fini
 
==== Exécution n°3 de l'exemple 2 ====
Lorsqu'on exécute notre programme, il s'affiche à l'écran :
Tapez la valeur de a : 10
Perdu
Le programme est fini
 
=== Les conditions complexes ===
Il est souvent nécessaire d'écrire des conditions assez compliquées. Il faudra alors utiliser le ET logique, le OU logique et le NON logique. Il faudra une certaine habitude pour ne pas confondre ces différents opérateurs.
 
=== Le ET logique ===
====Syntaxe ====
''condition1'' && ''condition2''
 
=== Exemple 3 : utilisation du ET logique ===
{{Cadre code|''Exemple 3'' : utilisation du '''ET logique'''|
<source lang="cpp">
#include <iostream>
using namespace std;
int main()
{
int a;
cout<<"Tapez une valeur entière : ";
cin>>a;
if(a>10 && a<20)cout<<"GAGNÉ"<<endl;
else cout<<"PERDU"<<endl;
return 0;
}
</source>
}}
<ul>
<li>Dans ce programme, on demande à l'utilisateur de taper une variable entière a.
<li>Si la valeur tapée est comprise entre 11 et 19 bornes incluses on affiche "GAGNÉ".
<li>Dans le cas contraire, on affiche "PERDU".
 
<li>'''Exécution de l'exemple 3 n°1'''
<br/> Lorsqu'on exécute notre programme, il s'affiche à l'écran :
<br/> Tapez une valeur entière : 8
<br/> PERDU
 
<li>'''Exécution de l'exemple 3 n°2'''
<br/> Lorsqu'on exécute notre programme, il s'affiche à l'écran :
<br/> Tapez une valeur entière : 15
<br/> GAGNÉ
 
<li>'''Exécution de l'exemple 3 n°3'''
<br/> Lorsqu'on exécute notre programme, il s'affiche à l'écran :
<br/> Tapez une valeur entière : 20
<br/> PERDU
</ul>
 
=== Le OU logique ===
'''Syntaxe : '''condition1 || condition2<br/>
'''Rappel sur le OU logique:'''<br/>
VRAI OU VRAI = VRAI<br/>
VRAI OU FAUX = VRAI<br/>
FAUX OU VRAI = VRAI<br/>
FAUX OU FAUX = FAUX<br/>
 
 
=== Exemple 4 : Utilisation du OU logique ===
{{Cadre code|''Exemple 4'' : utilisation du '''OU logique'''|
<source lang="cpp">
#include <iostream>
using namespace std;
 
int main()
{
int a;
cout<<"Tapez une valeur entière : ";
cin>>a;
if( a<3 || a>20 )cout<<"GAGNÉ"<<endl;
else cout<<"PERDU"<<endl;
return 0;
}
</source>
}}
<ul>
<li> Dans ce programme, on demande à l'utilisateur de taper une variable entière a.
<li> Si la valeur tapée est strictement plus petite que 3 on affiche "GAGNÉ".
<li> Si la valeur tapée est strictement plus grande que 20 on affiche "GAGNÉ".
<li> Dans le cas contraire, on affiche "PERDU".
<li>'''Exécution de l'exemple 4 n°1'''
<br/>Lorsqu'on exécute notre programme, il s'affiche à l'écran :
<br/>Tapez une valeur entière : -6
<br/>GAGNÉ
<li>'''Exécution de l'exemple 4 n°2'''
<br/>Lorsqu'on exécute notre programme, il s'affiche à l'écran :
<br/>Tapez une valeur entière : 3
<br/>PERDU
<li>'''Exécution de l'exemple 4 n°3'''
<br/>Lorsqu'on exécute notre programme, il s'affiche à l'écran :
<br/>Tapez une valeur entière : 21
<br/>GAGNÉ
</ul>
 
=== Le NON logique ===
'''Syntaxe : '''!(condition)<br/>
'''Rappel sur le NON logique : '''<br/>
! VRAI=FAUX<br/>
!FAUX=VRAI<br/>
 
=== Exemple 5 : Utilisation du NON logique ===
{{Cadre code|''Exemple 5'' : utilisation du '''NON logique'''|
<source lang="cpp">
#include <iostream>
using namespace std;
int main()
{
int a;
cout<<"Tapez une valeur entière : ";
cin>>a;
if(!(a<3 || a>20))cout<<"GAGNÉ"<<endl;
else cout<<"PERDU"<<endl;
return 0;
}
</source>
}}
<ul><li>
Dans ce programme, on demande à l'utilisateur de taper une valeur entière a.
<li>Si la condition assez complexe ( !(a<3 || a>20)) est vraie on affiche "GAGNÉ" sinon on affiche "PERDU".
<li>En fait, on affichera "GAGNÉ" si a est compris entre 3 et 20 bornes incluses.
 
<li>'''Exécution de l'exemple 5 n°1'''
<br/>Lorsqu'on exécute notre programme, il s'affiche à l'écran :
<br/>Tapez une valeur entière : 2
<br/>PERDU
<li>'''Exécution de l'exemple 5 n°2'''
<br/>Lorsqu'on exécute notre programme, il s'affiche à l'écran :
<br/>Tapez une valeur entière : 20
<br/>GAGNÉ
<li>'''Exécution de l'exemple 5 n°3'''
<br/>Lorsqu'on exécute notre programme, il s'affiche à l'écran :
<br/>Tapez une valeur entière : 50
<br/>PERDU
</ul>
 
=== Exemple 6 : Mettre plusieurs instructions dans un if ===
{{Cadre code|''Exemple 6'' : Mettre plusieurs instructions dans un if |
<source lang="cpp">
#include <iostream>
using namespace std;
 
int main()
{
int a;
cout << "Tapez une valeur entière : ";
cin >> a;
if (a==12) {
cout << "GAGNÉ" << endl;
a = a+1;
}
cout << "La valeur finale de a vaut " << a << endl;
return 0;
}
</source>
}}
<ul>
<li>Dans ce programme, on demande à l'utilisateur de saisir une valeur entière ''a''.
<li>Si ''a'' vaut 12 alors on va effectuer dans un premier temps deux instructions : on affiche "GAGNÉ" et on incrémente ''a'' de 1. On affiche ensuite la valeur de ''a'' qui vaudra 13.
<li>Si ''a'' est différent de 12, on affiche directement la valeur de ''a'' qui n'aura pas été modifiée.
<li>'''Exécution de l'exemple 6 n°1'''
<br/>Lorsqu'on exécute notre programme, il s'affiche à l'écran :
:<tt>Tapez une valeur entière : 50</tt><br/>
:<tt>La valeur finale de a vaut 50 </tt>
 
<li>'''Exécution de l'exemple 6 n°2'''
<br/>Lorsqu'on exécute notre programme, il s'affiche à l'écran :
:<tt>Tapez une valeur entière : 12</tt><br/>
:<tt>GAGNÉ</tt><br/>
:<tt>La valeur finale de a vaut 13</tt><br/>
</ul>
 
=== Exemple 7 : Mettre plusieurs instructions dans un if ...else ===
{{Cadre code|''Exemple 7'' : Mettre plusieurs instructions dans un if...else |
<source lang="cpp">
#include <iostream>
using namespace std;
 
int main()
{
int a;
cout<<"Tapez une valeur entière : ";
cin>>a;
if(a!=10){cout<<"GAGNÉ"<<endl;a=a+1;}
else {cout<<"PERDU"<<endl;a=a-1;}
cout<<"La valeur finale de a vaut "<<a<<endl;
return 0;
}
</source>
}}
<ul>
<li>Dans ce programme, on demande à l'utilisateur de saisir une valeur entière a.
<li>Si a est différent de 10 alors on va effectuer dans un premier temps 2 instructions : on affiche "GAGNÉ" et on incrémente a de 1. On affiche ensuite la valeur de a.
<li>Si a est égal à 10 alors on va effectuer dans un premier temps 2 instructions : on affiche "PERDU" et on décrémente a de 1. On affiche ensuite la valeur de a.
<li>'''Exécution de l'exemple 7 n°1'''
<br/>Lorsqu'on exécute notre programme, il s'affiche à l'écran :
<br/>Tapez une valeur entière : 7
<br/>GAGNÉ
<br/>La valeur finale de a vaut 8
<li>'''Exécution de l'exemple 7 n°2'''
<br/>Lorsqu'on exécute notre programme, il s'affiche à l'écran :
<br/>Tapez une valeur entière : 10
<br/>PERDU
<br/>La valeur finale de a vaut 9
</ul>
 
=== Le type bool ===
Il s'agit d'un type de base prédéfini du langage C++. Il permet de stocker une valeur booléenne pouvant prendre 2 valeurs : soit true soit false. Le résultat d’une condition peut être stocké dans un bool.
 
=== Exemple 8 : utilisation du type bool ===
{{Cadre code|''Exemple 8'' : utilisation du type bool |
<source lang="cpp">
#include <iostream>
using namespace std;
 
int main()
{
int a; bool c,d;
cout<<"Tapez une valeur entière : ";
cin>>a;
c=(a<3);
d=(a>20);
if(c||d)cout<<"GAGNÉ"<<endl;
else cout<<"PERDU"<<endl;
return 0;
}
</source>
}}
<ul>
<li>Dans ce programme, nous définissons une variable entière a et 2 variable booléennes c et d.
<li>On demande à l'utilisateur de saisir la variable entière a.
<li>Dans c, on affecte true si a est strictement plus petit que 3. c vaudra false dans le cas contraire.
<li>Dans d, on affecte true si a est strictement plus grand que 20. d vaudra false dans le cas contraire.
<li>Si c ou d est vrai, c'est à dire si a est strictement plus petit que 3 ou si a est strictement plus grand que 20 alors on affiche "GAGNÉ". On affiche perdu dans le cas contraire.
<li>'''Exécution de l'exemple 8'''
<br/>Lorsqu'on exécute notre programme, il s'affiche à l'écran :
<br/>Tapez une valeur entière : -6
<br/>GAGNÉ
</ul>
 
=== Le switch ===
'''Syntaxe : '''<br/>
<source lang="cpp">
switch(identificateur)
{
case c1:instruction1;break;
case c2:instruction2;break;
case c3:instruction3;break;
...
default: instruction;break;
}
</source>
'''Sémantique du switch : '''<br/>
On teste la variable définie par l'identificateur. On la compare successivement aux constantes c1, c2, c3,…etc… Si la variable vaut c1 alors on exécute l’instruction1 et on passe à l’instruction suivante. Si elle vaut c2, on exécute l'instruction2 et on passe à l’instruction suivante. Idem s'il vaut c3. Si elle ne vaut ni c1, ni c2, ni c3 alors on exécute l'instruction après default et on passe à l’instruction suivante. Le default est facultatif. On peut remplacer les instructions instruction1, instruction2, instruction3 par des suites d'instructions sans mettre d'accolades. Les valeurs c1, c2,c3 .. sont obligatoirement des constantes.
 
=== Exemple 9 : utilisation du switch ===
{{Cadre code|''Exemple 9'' : utilisation du switch |
<source lang="cpp">
#include <iostream>
using namespace std;
 
int main()
{
int i;
cout<<"Tapez un entier entre 1 et 3 bornes incluses :";
cin>>i;
switch(i)
{
case 1: cout<<"GAGNÉ"<<endl;
i=i+99;
break;
case 2: cout<<"PERDU n° 2"<<endl;
i=0;
break;
case 3: cout<<"PERDU n°3"<<endl;
i=0;
break;
}
cout<<"La valeur finale de i est "<<i<<endl;
return 0;
}
</source>
}}
<ul>
<li>On commence par saisir un entier i.
<li>Il y a ensuite une switch qui permet d'effectuer une série d'instructions en fonction de la valeur de i.
<li>Les 3 valeurs de i pour lesquelles on effectue une série d'instructions sont 1, 2 et 3.
<li>Si i vaut une autre valeur le switch ne fait rien car il n'y a pas de default.
<li>'''Exécution 1 de l’exemple 9'''
<br/>Tapez un entier entre 1 et 3 bornes incluses :1
<br/>GAGNÉ La valeur finale de i est 100
 
<li>'''Exécution 2 de l’exemple 9'''
<br/>Tapez un entier entre 1 et 3 bornes incluses :2
<br/>PERDU n°2
<br/>La valeur finale de i est 0
 
<li>'''Exécution 3 de l’exemple 9'''
<br/>Tapez un entier entre 1 et 3 bornes incluses :3
<br/>PERDU n°3 La valeur finale de i est 0
 
</ul>
 
=== Exemple 10 : un autre exemple de switch ===
{{Cadre code|''Exemple 10'' : un autre exemple de switch |
<source lang="cpp">
#include <iostream>
using namespace std;
 
int main()
{
int i;
cout<<"Tapez un entier entre 1 et 3 bornes incluses :";
cin>>i;
switch(i)
{
case 1:
cout<<"GAGNÉ"<<endl;
i=i+99;
break;
 
case 2 :
cout<<"PERDU n° 2"<<endl;
i=0;
break;
 
case 3 :
cout<<"PERDU n°3"<<endl;
i=0;
break;
 
default :
cout<<"J'ai dit entre 1 et 3 !!!"<<endl;
i=-1000;
break;
}
cout<<"La valeur finale de i est "<<i<<endl;
return 0;
}
</source>
}}
<ul>
<li>On commence par saisir un entier i.
<li>Il y a ensuite une switch qui permet d'effectuer une série d'instructions en fonction de la valeur de i.
<li>Les 3 valeurs de i pour lesquelles on effectue une série d'instructions sont 1, 2 et 3.
<li>Si i vaut une autre valeur , on exécute l'instruction après default.
 
<li>'''Exécution 1 de l’exemple 10'''
<br/>Tapez un entier entre 1 et 3 bornes incluses :1
<br/>GAGNÉ
<br/>La valeur finale de i est 100
<li>'''Exécution 2 de l’exemple 10'''
<br/>Tapez un entier entre 1 et 3 bornes incluses :2
<br/>PERDU n°2
<br/>La valeur finale de i est 0
<li>'''Exécution 3 de l’exemple 10'''
<br/>Tapez un entier entre 1 et 3 bornes incluses :3
<br/>PERDU n°3
<br/>La valeur finale de i est 0
<li>'''Exécution 4 de l’exemple 10'''
<br/>Tapez un entier entre 1 et 3 bornes incluses :5
<br/>J'ai dit entre 1 et 3 !!!
<br/>La valeur finale de i est -1000
</ul>
 
== Exercices ==