Vous êtes sur la page 1sur 8

cole Prparatoire aux Sciences et Techniques, Annaba

Dpartement de mathmatiques et dinformatique

Module : Informatique 2

Corrig de la srie de TD no 2 : Instructions conditionnelles


Rappel sur les structures de contrles
1. En C++, quelle est la diffrence entre = et == ?

= affecte une valeur une variable et retourne la partie


droite.
== compare deux valeurs et retourne true si ces deux valeurs
sont gales et falses sinon.
2. Donnez la syntaxe dune instruction if en C++.

if (condition) {
action
}
3. Donnez la syntaxe dune instruction if-else en C++.

if (condition) {
action
} else {
action2
}
4. Donnez la syntaxe dune instruction switch-case.

switch (variable)
case constante1
case constante2
case constante3
case constante4
case constante5
...
default :
}

{
:
:
:
:
:

5. Quelles valeurs peuvent tre affectes une variable de type boolean ?

true ou false.

Exercice 1
Construire une expression logique pour reprsenter chacune des conditions suivantes :
1. score est suprieure ou gale 80 mais infrieure 90.
2. answer est gale 'N' ou 'n'.
3. n est paire mais diffrente de 8.
1

EPST Annaba

Module : Informatique 2

Corrig de la srie de TD no 2

4. ch est une lettre majuscule.


5. n est entre 0 et 7 mais diffrent de 3.
6. n est entre 0 et 7 mais nest pas un nombre pair.
7. ch est une lettre majuscule ou minuscule.

1.
2.
3.
4.
5.
6.
7.

(score >= 80 && score < 90)


(answer == 'N' || answer == 'n')
(n%2==0 && n!=8)
(ch >= 'A' && ch <= 'Z')
(n >= 0 && n<= 7 && n!=3)
(n >= 0 && n<= 7 && n%2!=0)
((ch >= 'A' && ch <= 'Z') || (ch >= 'a' && ch <= 'z'))

Exercice 2
crire un programme qui demande lutilisateur dentrer deux valeurs entires, et affiche la valeur la plus petite.

#include<iostream.h>
int main() {
int i,j;
cin >> i;
cin >> j;
if (i<j)
cout << i;
else
cout << j;
}

Exercice 3
Rcrire ces trois fragments de programmes sans utiliser le if et le else.
1
2
3
if (i>0)
if (i == 0)
if (i == j)
cout << "a";
j = 0;
b = true;
else
else
else
cout << "a";
j = i;
b = false;

1. cout << "a";


2. j = i;
3. b = (i == j)

Solution

Exercice 4
Deux vecteurs ~a( x a , y a ) et ~b( xb , yb ) sont parallles si

( x a yb ) (y a xb ) = 0
2

EPST Annaba

Module : Informatique 2

Corrig de la srie de TD no 2

crire un programme qui teste si deux vecteurs ~a( x a , y a ) et ~b( xb , yb ) sont parallles en demandant lutilisateur le valeur de x a , y a , xb et yb . Le programme affiche parallles si les
deux vecteurs sont parallles, sinon il affiche non parallles.

#include<iostream.h>
int main() {
int xa,ya,xb,yb;
cin >> xa;
cin >> ya;
cin >> xb;
cin >> yb;
if ((xa*yb) - (ya*xb==0))
cout << "les vecteurs a et b sont parallles";
else
cout << "les vecteurs a et b ne sont pas parallles";
}

Exercice 5
Soit les deux fragments de programme suivant :

1. if (n > 2) { if (n < 6) cout << "OK"; } else cout << "NG";


2. if (n > 2) { if (n < 6) cout << "OK"; else cout << "NG"; }
1. Rcrire ces deux fragments de programme pour quils soient plus lisibles.
2. Quelles diffrence existe entre ces deux fragments de programme ?
3. Illustrez cette diffrence par des exemples.

1.
if (n > 2) {
if (n < 6)
cout << "OK";
}
else
cout << "NG";
if (n > 2) {
if (n < 6)
cout << "OK";
else
cout << "NG";
}
2. Dans le premier fragment le else appartient au premier if
Alors que dans le second fragment le else appartient au deuxime if
3.
|------------------------------------------|
|
| fragment 1 | fragment 2 |
|------------------------------------------|
3

EPST Annaba

Module : Informatique 2

Corrig de la srie de TD no 2

| n <= 2
| NG
|
|
|------------------------------------------|
| n > 2 && n < 6 | OK
| OK
|
|------------------------------------------|
| n >= 6
|
| NG
|
|------------------------------------------|

Exercice 6
Soit le programme suivant :

#include<iostream.h>
int main() {
int i = 0;
if (i=0)
cout << "Nul";
else
cout << "Non nul";
}
1. Quaffiche ce programme ? et pourquoi ?
2. Que faut-il changer pour corriger ce programme ?

1. Ce programme affiche Non nul car l'affectation retourne 0,


et 0 est equivalent false
2. Il faut remplacer = par ==

Exercice 7
crire un programme qui demande la moyenne gnrale de lutilisateur et affiche :
Ajourn si la moyenne est strictement infrieure 10.
Passable si la moyenne est suprieure ou gale 10 et infrieure strictement 12.
Bien si la moyenne est suprieure ou gale 12 et infrieure strictement 15.
Trs bien si la moyenne est suprieure ou gale 15 et infrieure 18.
Excellent si la moyenne est superieure ou gale 18 et infrieure ou gale 20.

#include<iostream.h>
int main() {
double moy;
cin >> moy;
if (moy<0 || moy > 20)
cout << "moyenne invalide";
else if (moy<10)
cout << "Ajourne";
else if (moy<12)
cout << "Passable";
else if (moy<15)
cout << "Bien";
4

EPST Annaba

Module : Informatique 2

Corrig de la srie de TD no 2

else if (moy<18)
cout << "Trs bien";
else
cout << "Excellent";

Exercice 8
Soit le programme en suivant :

#include <iostream.h>
int main() {
int n ;
cin >> n ;
switch (n) {
case 0 : cout << "Nul " ;
case 1 :
case 2 : cout << "Petit " ; break ;
case 3 :
case 4 :
case 5 : cout << "Moyen " ;
default : cout << "Grand " ;
}
}
Quaffiche ce programme lorsquon lui fournit chacune des valeurs suivantes :
1. 0
2. 1
3. 4
4. 10
5. -5

1.
2.
3.
4.
5.

Nul Petit
Petit
Moyen Grand
Grand
Grand

Exercice 9
En utilisant un switch-case, crire un programme qui lit un entier qui reprsente un mois
(1 pour janvier, 2 pour fvrier, 3 pour mars, etc.) et qui affiche le nombre de jours de ce mois.

#include<iostream.h>
int main() {
int n;
cin >> n;
5

EPST Annaba

Module : Informatique 2

Corrig de la srie de TD no 2

switch (n) {
case 2 : cout << nombre de jours = 28;break;
case 1 :
case 3 :
case 5 :
case 7 :
case 8 :
case 10 :
case 12 : cout << nombre de jours = 31;break;
case 4 :
case 6 :
case 9 :
case 11 : cout << nombre de jours = 30;break;
default : cout << mois erron;
}

Exercice 10
Amliorer la lisibilit de ce programme en remplaant le switch-case par if-else

#include<iostream.h>
int main() {
int n;
cin >> n;
switch (n) {
case 0 : cout << "matin;break;
case 1 : cout << "matin;break;
case 3 : cout << "matin;break;
case 4 : cout << "matin;break;
case 5 : cout << "matin;break;
case 6 : cout << "matin;break;
case 7 : cout << "matin;break;
case 8 : cout << "matin;break;
case 9 : cout << "matin;break;
case 10 : cout << "matin;break;
case 11 : cout << "matin;break;
case 12 : cout << "Aprs-midi;break;
case 13 : cout << "Aprs-midi;break;
case 14 : cout << "Aprs-midi;break;
case 15 : cout << "Aprs-midi;break;
case 16 : cout << "Aprs-midi;break;
case 17 : cout << "Aprs-midi;break;
case 18 : cout << "Aprs-midi;break;
case 19 : cout << "Soir;break;
case 20 : cout << "Soir;break;
case 21 : cout << "Soir";break;
case 22 : cout << "Soir";break;
case 23 : cout << "Soir";break;
6

EPST Annaba

Module : Informatique 2

Corrig de la srie de TD no 2

default : cout << "heure invalide;

#include<iostream.h>
int main() {
int heure;
cin >> heure;
if (heure<0 || heure>23)
cout << "heure invalide";
else if (heure <= 11)
cout << "matin";
else if (heure <= 18)
cout << "Aprs-midi";
else
cout << "Soir";
}

Problme 1
la caisse nationale des assurances sociales, le montant de la prime de scolarit verse
aux salaris est calcul selon la rgle suivante :
1. Pour les salaris dont le revenu est suprieur 15000 DA :
400 DA par enfant.
2. Pour les salaris dont le revenu est infrieur ou gale 15000 DA :
Du premier au cinquime enfant : 800 DA par enfant.
compter du sixime enfant : 400 DA par enfant.
crire un programme qui calcule et affiche la prime de scolarit dun salari quelconque.
Exemple
Pour un salari ayant 6 enfants dont le salaire est de 16000 DA, la prime de scolarit
est gale 400 6 = 2400DA.
Pour un salari ayant 4 enfants dont le salaire est de 13000 DA, la prime de scolarit
est gale 800 4 = 3200DA.
Pour un salari ayant 8 enfants dont le salaire est de 14000 DA, la prime de scolarit
est gale 800 5 + 400 3 = 5200DA.
Solution
#include<iostream>

using namespace std;


int main() {
int enfants;
double revenu;
double prime;
cin >> revenu;
cin >> enfants;
if (revenu>15000)
7

EPST Annaba

Module : Informatique 2

Corrig de la srie de TD no 2

prime = 400 * enfants;


else if (enfants <= 5)
prime = 800 * enfants;
else
prime = (800 * 5) + (400 * (enfants-5));
}

cout << prime;

Problme 2
En mathmatique, une quation du second degr est une quation polynomiale de degr
2 de la forme : ax2 + bx + c = 0. Le discriminant est calcul comme suit : = b2 4ac. La
solution dune equation du second degr dpend du signe de son discriminant :
Si < 0, lquation nadmet pas de solution dans lensemble des nombres rels.
b
Si = 0, lquation admet une seule double solution x1 = x2 = 2a

Si > 0, lequation admet deux solutions x1 = b


et x2 = b+
.
2a
2a
crire un programme en C++ qui permet de rsoudre une quation du second degr de la
forme ax2 + bx + c = 0. Le programme demande lutilisateur dentrer la valeur de a, de b
et de c et affiche la valeur des solutions.

Remarque La fonction prdfnie sqrt de la librairie math.h peut tre utilise


Solution
#include<iostream.h>
#include<math.h>

int main() {
int a;
int b;
cin >> a;
cin >> b;
double delta = b*b - 4*a*c;
if (delta<0)
cout << "l'quation n'admet pas de solution";
else if (delta==0) {
double x = -b/(2.0*a);
cout << "l'quation admet une solution double x = " << x;
} else {
double x1 = (-b-sqrt(delta))/(2.0*a);
double x2 = (-b+sqrt(delta))/(2.0*a);
cout << l'quation admet deux solutions x1 = "<< x1 << " x2 = " << x2;
}
}

Une version lctronique de ce document est disponible sur : http://skebir.developpez.com/epst

Vous aimerez peut-être aussi