3IIR
TP C++ N°1 : Structures de Contrôle
Correction
Exercice 1 :
Trouver et corriger les erreurs qui se trouvent dans les morceaux suivants écrits en C++
if (x<y<z)
cout << x << "<" << y << "<" <<z << endl ;
1. Dans la condition x < y < z il y’aura une erreur syntaxique, parce qu’il y a deux
comparaisons.
L’expression correcte est if (x < y && y < z).
Tous les 3 morceaux de code qui restent, sont correct du point de vue de la syntaxe
C++. Le compilateur ne génèrera pas de messages d’erreur. Le mal fonctionnement
de ces morceaux est aperçu au moment d’exécution ou après
2. L’expression dans la condition if (x=0) et if (y=0) sont des affectations, pas des
comparaisons. L’expression correcte est if (x==0) et if (y==0). L’instruction else est
exécutée lorsque x et y sont égaux à zéro.
Cette instruction est alternative à l’instruction qui suive la condition if (y==0). Pour
que le programme fasse ce que nous voulons, nous devons mettre des accolades autour
du deuxième if : Version corrigée :
if (x==0)
{
if (y==0) cout <<"x = y = 0 "<<endl;
}
else cout << "x est différent de zero \n" ;
3. Il n’y a pas d’incrémentation ou de décrémentation de la variable de contrôle compteur
dans la boucle. La boucle devient donc infinie, parce que la condition while sera
toujours vraie.
4. Il y a un point-virgule de trop, à la fin de la ligne de l’instruction for.
Exercice 2 :
#include<iostream>
using namespace std;
int main()
{
int I, V, M, P, Q;
cout<<"Entrer le nombre d’inscrits : "; cin>>I;
cout<<"Entrer le nombre de votants : "; cin>>V;
cout<<"Entrer le quorum : "; cin>>Q;
P = V*100/I;
M = V/2 +1;
if(P > Q)
{
cout<<"Quorum atteint - vote valable\n";
cout<<"Participation: "<<P<<"%";
1
cout<<"\n Majorite obtenue pour :"<< M <<" bulletins \n";
}
else
{
cout<<"Quorum non atteint - vote non valable\n";
}
return 0;
}
Exercice 3 :
#include<iostream>
using namespace std;
int main()
{
int x,y,z;
cout<<"Saisir les trois entiers"<<endl;
cin>>x>>y>>z;
if(x<y && y<z)
cout<<x<<"\t"<<y<<"\t"<<z<<endl;
else if(x<z && z<y)
cout<<x<<"\t"<<z<<"\t"<<y<<endl;
else if(y<x && x<z)
cout<<y<<"\t"<<x<<"\t"<<z<<endl;
else if(y<z && z<x)
cout<<y<<"\t"<<z<<"\t"<<x<<endl;
else if(z<x && x<y)
cout<<z<<"\t"<<x<<"\t"<<y<<endl;
else if(z<y && y<x)
cout<<z<<"\t"<<y<<"\t"<<x<<endl;
else
cout<<"Deux nombres sont identiques "<<endl;
return 0;
}
Exercice 4 :
#include<iostream>
using namespace std;
int main()
{
double a1 = -3., b1 = 5., r1 = 2.;
double a2 = 1.5, b2 = 4., r2 = 5.;
double x, y, d1, d2;
cout<<" Donner les cordonnees du point"<<endl;
cin>>x>>y;
d1 = (x-a1)*(x-a1) + (y-b1)*(y-b1);
d2 = (x-a2)*(x-a2) + (y-b2)*(y-b2);
short val=(d1 <= r1*r1) + (d2 <= r2*r2);
switch(val){
case 0 :
cout << "Le point est exterieur aux deux disques" << endl;
break;
case 1 :
cout << "Le point est interieur a l’un des disques et\
exterieur a l’autre" << endl;
2
break;
case 2 :
cout << "Le point est interieur aux deux disques" << endl;
break;
}
return 0;
}
Dans ce cas il est inutile de mettre un cas default puisque la valeur de l’expression ne peut
jamais être différente de 0, 1 ou 2
Exercie 5 :
1. Avec la boucle While 2. Avec la boucle do – While
#include <iostream> #include <iostream>
using namespace std; using namespace std;
int main(){ int main(){
int i=0, n, som ; int i=0, n, som ;
som = 0 ; som = 0 ;
while(i++<4) do
{ {
cout << "donnez un entier " ; cout << "donnez un entier " ;
cin>> n ; cin>> n ;
som += n ; som += n ;
} i++ ;
cout<< "La somme est : " << som <<endl } while(i<4);
; cout<< "La somme est : " << som
return 0 ; <<endl ;
} return 0 ;
}
Exercice 6 :
#include<iostream>
#include<cmath>
using namespace std;
int main()
{
int n;
double S=0.0;
cout<<"Saisir un entier positif "; cin>>n;
for(int i=1;i<=n;++i)
S+=pow(-1,i)/(i*i);
cout<<"La somme est : "<<S<<endl;
return 0;
}