Monday, March 31, 2014

How to use EnumSet in Java with Example

EnumSet is one of the specialized implementation of Set interface for enumeration type, introduced in Java 1.5 along with enumeration type itself. Programmer often stores Enum into common collection classes e.g. HashSet or ArrayList, mostly because they are unaware of this little gem. Even I wasn't aware of this class few years ago, until I come across one of the finest book for Java programmers, Effective Java. It has an Item on EnumSet, which highlight some typical use-cases for this collection class instead of using int variable and bitwise operator. Since Enum constants are unique and has pre-defined length, as you can not define a new enum constant at runtime; it allows Java API designer to highly optimize EnumSet. If you look closely, EnumSet also teaches you couple of good design practices to create flexible and maintainable code. For example, EnumSet is an abstract class, and it provides lots of static factory method to create instance of EnumSet e.g. EnumSet.of(...). This method takes advantage of method overloading and variable argument to provide Set of only provided Enum constants. Second good thing is there are two concrete sub-classes of EnumSet e.g. RegularEnumSet and JumboEnumSet, but both are package-private, which means client can not use them directly. Only way to use them is via EnumSet. At runtime, depending upon key size of requested Enum, implementation automatically decide which implementation to use. This provides you immense flexibility and control to rollout a new better version of EnumSet implementation without any change on client side. Anyway, this article is not just about design lessons form this class but more importantly how and when to use EnumSet in Java program. I have shared simple example to demonstrate power of EnumSet, which you will see in next section.
Read more �

Sunday, March 30, 2014

Exercices corrigés en langage C++ : Les tableaux (2)

Exercices corrigés en langage C++ : Les tableaux
langage c++
Exercice 1 : 

Ecrire un programme qui saisit 2 tableaux de 10 entiers a et b. c est un tableau de 20 entiers. Le programme doit mettre dans c la fusion des tableaux a et b. On copiera dans les 10 premières cases de c le tableau a, dans les dix dernières le tableau b. Le programme affiche ensuite le tableau c.

Correction exercice 1 :

#include<iostream>
using namespace std;

const int N=10;

int main()
{
int a[N],b[N],c[2*N],i;

cout<<"SAISIE DU TABLEAU a"<<endl;
for(i=0;i<N;i++){cout<<"Tapez un entier ";cin>>a[i];}

cout<<"SAISIE DU TABLEAU b"<<endl;
for(i=0;i<N;i++){cout<<"Tapez un entier ";cin>>b[i];}

for(i=0;i<2*N;i++)if(i<N)c[i]=a[i];else c[i]=b[i-N];

cout<<"VOICI LE TABLEAU c"<<endl;
for(i=0;i<2*N;i++)cout<<c[i]<<" ";
cout<<endl;
return 0;
}


Exercice 2 : 

Ecrire un programme qui saisit 2 tableaux de 10 entiers a et b qui doivent être triés dans l'ordre croissant. Le programme devra tout d'abord vérifier que les deux tableaux sont triés. Le tableau c est un tableau de 20 entiers. Le programme doit mettre dans c la fusion des tableaux a et b. Le tableau c devra contenir les éléments de a et ceux de b et devra être trié. Le programme affiche ensuite le tableau c.

Correction exercice 2 :

#include<iostream>
using namespace std;

const int N=10;

int main()
{
int a[N],b[N],c[2*N],i,trie,indicea,indiceb;

cout<<"SAISIE DU TABLEAU a"<<endl;
for(i=0;i<N;i++){cout<<"Tapez un entier ";cin>>a[i];}

cout<<"SAISIE DU TABLEAU b"<<endl;
for(i=0;i<N;i++){cout<<"Tapez un entier ";cin>>b[i];}

trie=true;
i=0;
while(trie && i<N-1)if(a[i]>a[i+1])trie=false; else i++;

if(!trie)cout<<"Le tableau a n'est pas trié"<<endl;
else
{
trie=true;
i=0;
while(trie && i<N-1)if(b[i]>b[i+1])trie=false; else i++;

if(!trie)cout<<"Le tableau b n'est pas trié"<<endl;
else
{
indicea=0;indiceb=0;
for(i=0;i<2*N;i++)
{
if(indicea==N){c[i]=b[indiceb];indiceb++;}
else if(indiceb==N){c[i]=a[indicea];indicea++;}
else if(a[indicea]<b[indiceb]){c[i]=a[indicea];indicea++;}
else {c[i]=b[indiceb];indiceb++;}
}
}
}

cout<<"VOICI LE TABLEAU c"<<endl;
for(i=0;i<2*N;i++)cout<<c[i]<<" ";
cout<<endl;

return 0;
}


Exercice 3 : 

Ecrire un programme qui gère une liste d'entiers grâce au menu suivant :
1. Ajouter un entier
2. Afficher la liste des entiers
3. Supprimer dernier entier de la liste.
4. Afficher la dernière note tapée
5. Quitter
Il y aura au maximum 10 entiers. Lorsqu'on rajoute un entier, il sera rajouté à la fin de la liste.


Correction exercice 3 :

#include<iostream>
using namespace std;

const int N=10;
int main()
{

int t[N],nb=0,choix,e,i;
bool fini=false;

while(fini==false)
{
cout<<"1. Ajouter un entier"<<endl;
cout<<"2. Afficher la liste des entier"<<endl;
cout<<"3. Supprimer le dernièr entier de la liste"<<endl;
cout<<"4. Afficher le dernier entier de la liste"<<endl;
cout<<"5. Quitter"<<endl;
cout<<"Votre choix : ";cin>>choix;
switch(choix)
{
case 1 : cout<<"Tapez un entier : ";cin>>e;
if(nb<N){t[nb]=e; nb++; cout<<"ENTIER AJOUTE"<<endl;}
else cout<<"IMPOSSIBLE LE TABLEAU EST PLEIN"<<endl;
break;

case 2 : if(nb==0)cout<<"LA LISTE EST VIDE"<<endl;
else {
cout<<"VOICI LA LISTE"<<endl;
for(i=0;i<nb;i++)cout<<t[i]<<" ";
cout<<endl;
}
break;

case 3 : if(nb>0){nb--; cout<<"ENTIER SUPPRIME"<<endl;}
else cout<<"LA LISTE EST VIDE"<<endl;
break;

case 4 : if(nb>0)cout<<"lLE DERNIER ENTIER EST "<<t[nb-1]<<endl;
else cout<<"LA LISTE EST VIDE"<<endl;
break;

case 5 : fini=true;
break;
}

}
return 0;
}


Exercice 4 : 

Ecrire un programme qui gère une liste d'entiers grâce au menu suivant :
1. Ajouter un entier
2. Afficher la liste des entiers
3. Supprimer le premier entier ayant une valeur donnée.
4. Supprimer tous les entiers ayant une valeur donnée
5. Quitter
Il y aura au maximum 10 entiers. La liste devra être en permanence triée : lorqu'on rajoute un entier, il sera inséré au bon endroit dans la liste pour que celle-ci reste triée.


Correction exercice 4 :

#include<iostream>
using namespace std;

const int N=10;
int main()
{

int t[N],nb=0,choix,e,V,i,j,trouve;
bool fini=false;

while(fini==false)
{
cout<<"1. Ajouter un entier"<<endl;
cout<<"2. Afficher la liste des entier"<<endl;
cout<<"3. Supprimer le premier entier ayant une valeur donnée"<<endl;
cout<<"4. Supprimer tous les entiers ayant une valeur donnée"<<endl;
cout<<"5. Quitter"<<endl;
cout<<"Votre choix : ";cin>>choix;
switch(choix)
{
case 1 : if(nb<N)
{
cout<<"Tapez un entier : ";cin>>e;
i=0;
while(i!=nb && t[i]<e)i++;
for(j=nb;j>i;j--)t[j]=t[j-1];
t[i]=e;
nb++;
}
else cout<<"IMPOSSIBLE LE TABLEAU EST PLEIN"<<endl;
break;

case 2 : if(nb==0)cout<<"LA LISTE EST VIDE"<<endl;
else {
cout<<"VOICI LA LISTE"<<endl;
for(i=0;i<nb;i++)cout<<t[i]<<" ";
cout<<endl;
}
break;

case 3 : cout<<"Tapez la valeur à supprimer :";cin>>V;
trouve=false;
i=0;
while(!trouve && i<nb)if(t[i]==V)trouve=true; else i++;
if(trouve)
{
for(j=i;j<nb-1;j++)t[j]=t[j+1];
nb--;
}
break;

case 4 : cout<<"Tapez la valeur à supprimer :";cin>>V;
j=0;
for(i=0;i<nb;i++)
if(t[i]!=V){t[j]=t[i];j++;}
nb=j;
break;

case 5 : fini=true;
break;
}

}
return 0;
}

Exercice 5 : 

Ecrire un programme qui demande à l'utilisateur de taper un entier N<=20 et qui affiche la N-ième ligne du triangle de pascal.
ligne 1 : 1 1
ligne 2 : 1 2 1
ligne 3 : 1 3 3 1
ligne 4 : 1 4 6 4 1
et ainsi de suite ...


Correction exercice 5 :

#include<iostream>
using namespace std;

int main()
{
int a[21],i,j,N;
cout<<"Veuillez taper N : ";cin>>N;
for(i=1;i<=N;i++)
{
if(i==1)a[0]=1;
a[i]=1;
for(j=i-1;j>=1;j--)a[j]=a[j]+a[j-1];
}
for(i=0;i<=N;i++)cout<<a[i]<<" ";
cout<<endl;
return 0;
}


Exercice 6 : 

Ecrire un programme qui demande à l'utilisateur de taper 10 entiers compris entre 0 et 20 qui seront stockés dans un tableau et qui affiche le nombre de fois qu'on a tapé un 0, le nombre de 1, le nombre de 2, ..., le nombre de 20.

Correction exercice 6 :

#include<iostream>
using namespace std;

int main()
{
int a[10],nb[21],i;

for(i=0;i<10;i++)
{
do {cout<<"Veuillez taper l'entier numero "<<i<<" : ";cin>>a[i];}
while (a[i]>20 || a[i]<0);
}

for(i=0;i<21;i++)nb[i]=0;
for(i=0;i<10;i++)nb[a[i]]++;

for(i=0;i<21;i++){cout<<"Il y a "<<nb[i]<<" fois l'entier "<<i<<endl;}
return 0;
}

Exercice 7 : 

Ecrire un programme qui demande à l'utilisateur de taper le contenu d'un tableau de réels de 3 lignes et 3 colonnes et qui affiche ce tableau mais en affichant la moyenne des éléments de chaque ligne, de chaque colonne et la moyenne globale.

Correction exercice 7 :

#include<iostream>
using namespace std;

const int N=3;
const int M=3;

int main()
{
double t[N][M],moyL[N],moyC[M],moy;
int i,j;

for(i=0;i<N;i++)
for(j=0;j<M;j++)
{
cout<<"Tapez la valeur de la ligne "<<i<<" colonne "<<j<<" : ";
cin>>t[i][j];
}

for(i=0;i<N;i++)moyL[i]=0;
for(j=0;j<M;j++)moyC[j]=0;
moy=0;

for(i=0;i<N;i++)
for(j=0;j<M;j++)
{
moyL[i]=moyL[i]+t[i][j];
moyC[j]=moyC[j]+t[i][j];
moy=moy+t[i][j];
}

for(i=0;i<N;i++)moyL[i]=moyL[i]/N;
for(j=0;j<M;j++)moyC[j]=moyC[j]/M;
moy=moy/(N*M);

for(i=0;i<N;i++)
{
for(j=0;j<M;j++)
cout<<t[i][j]<<" ";
cout<<moyL[i]<<endl;
}
for(j=0;j<M;j++)
cout<<moyC[j]<<" ";
cout<<endl;

return 0;
}


Exercices corrigés en langage C++ : Les tableaux (1)

Exercices corrigés en langage C++ : Les tableaux
langage c++
Exercice 1 : 

Écrire un programme qui demande à l'utilisateur de saisir 10 entiers stockés dans un tableau. Le programme doit afficher le nombre d'entiers supérieurs ou égaux à 10.

Correction exercice 1 :

#include<iostream>
using namespace std;

const int N=10;

int main()
{
int t[10],i,nb=0;
for(i=0;i<N;i++){cout<<"Tapez un entier ";cin>>t[i];}
for(i=0;i<N;i++)if(t[i]>=10)nb++;
cout<<"Le nombre d'entiers supérieurs ou égaux à 10 est : "
<<nb<<endl;
return 0;
}


Exercice 2 : 

Ecrire un programme qui demande à l'utilisateur de saisir 10 entiers stockés dans un tableau ainsi qu'un entier V. Le programme doit rechercher si V se trouve dans le tableau et afficher "V se trouve dans le tableau" ou "V ne se trouve pas dans le tableau".

Correction exercice 2 :

#include<iostream>
using namespace std;

const int N=10;

int main()
{
int t[N],i,V;
bool trouve;
for(i=0;i<N;i++){cout<<"Tapez un entier ";cin>>t[i];}
cout<<"Tapez la valeur de V : ";cin>>V;

trouve=false;
i=0;
while(!trouve && i<N)
if(t[i]==V)trouve=true; else i++;
if(trouve) cout<<"La valeur V se trouve dans le tableau"<<endl;
else cout<<"La valeur V ne se trouve pas dans le tableau"<<endl;
return 0;
}


Exercice 3 : 

Ecrire un programme qui demande à l'utilisateur de saisir 10 entiers stockés dans un tableau. Le programme doit ensuite afficher l'indice du plus grand élément.

Correction exercice 3 :

#include<iostream>
using namespace std;

const int N=10;
int main()
{
int t[N],i,indice;

for(i=0;i<N;i++){cout<<"Tapez un entier ";cin>>t[i];}
indice=0;
for(i=1;i<N;i++)
if(t[indice]<t[i])indice=i;

cout<<"L'indice du plus grand élément est : "<<indice<<endl;
return 0;

}


Exercice 4 : 

Ecrire un programme qui demande à l'utilisateur de saisir 10 entiers stockés dans un tableau ainsi qu'un entier V. Le programme doit rechercher si V se trouve dans le tableau et doit supprimer la première occurrence de V en décalant d'une case vers la gauche les éléments suivants et en rajoutant un 0 à la fin du tableau. Le programme doit ensuite afficher le tableau final.

Correction exercice 4 :

#include<iostream>
using namespace std;

const int N=10;

int main()
{
int t[N],i,j,V;
bool trouve;
for(i=0;i<N;i++){cout<<"Tapez un entier ";cin>>t[i];}
cout<<"Tapez la valeur de V : ";cin>>V;

trouve=false;
i=0;
while(!trouve && i<N)
if(t[i]==V)trouve=true; else i++;

if(trouve)
{
for(j=i;j<N-1;j++)t[j]=t[j+1];
t[N-1]=0;
}
for(i=0;i<N;i++)cout<<t[i]<<endl;

return 0;
}
}


Exercice 5 : 

Ecrire un programme qui demande à l'utilisateur de saisir 10 entiers stockés dans un tableau ainsi qu'un entier V et un entier i compris entre 0 et 9. Le programme doit décaler d'une case vers la droite tous les éléments à partir de l'indice i (en supprimant le dernier élément du tableau) et doit mettre la valeur V dans le tableau à l'indice i. Le programme doit ensuite afficher le tableau final.

Correction exercice 5 :

#include<iostream>
using namespace std;

const int N=10;

int main()
{
int t[N],i,indice,V;

for(i=0;i<N;i++){cout<<"Tapez un entier ";cin>>t[i];}
cout<<"Tapez un indice (de 0 à 9) : ";cin>>indice;
cout<<"Tapez la valeur de V : ";cin>>V;

if(indice>=0 && indice<=N-1)
{
for(i=N-1;i>indice;i--)t[i]=t[i-1];
t[indice]=V;
}

for(i=0;i<N;i++)cout<<t[i]<<endl;

return 0;
}


Exercice 6 : 

Ecrire un programme qui demande à l’utilisateur de taper 10 entiers qui seront stockés dans un tableau. Le programme doit ensuite afficher soit "le tableau est croissant", soit "le tableau est décroissant", soit "le tableau est constant", soit "le tableau est quelconque".

Correction exercice 6 :

#include<iostream>
using namespace std;

const int N=10;

int main()
{
int a[N],i;
bool trouve=false;
bool croissant=true,decroissant=true;

for(i=0;i<N;i++)
{
cout<<"Veuillez taper l'entier numero "<<i<<" : ";cin>>a[i];
}
for(i=0;i<N-1;i++)
{
if(a[i]>a[i+1])croissant=false;
if(a[i]<a[i+1])decroissant=false;
}

if(croissant && decroissant) cout<<"le tableau est constant"<<endl;
if(croissant && !decroissant) cout<<"le tableau est croissant"<<endl;
if(!croissant && decroissant) cout<<"le tableau est decroissant"<<endl;
if(!croissant && !decroissant) cout<<"le tableau est quelconque"<<endl;

return 0;
}


Exercice 7 : 

Ecrire un programme qui demande à l’utilisateur de taper 10 entiers qui seront stockés dans un tableau. Le programme doit trier le tableau par ordre croissant et doit afficher le tableau.
Algorithme suggéré :
On cherche l'indice du plus petit élément parmi les indices de 0 à 9 et on échange cet élément avec t[0].
On cherche l'indice du plus petit élément parmi les indices de 1 à 9 et on échange cet élément avec t[1].
On cherche l'indice du plus petit élément parmi les indices de 2 à 9 et on échange cet élément avec t[2].
... On cherche l'indice du plus petit élément parmi les indices de 8 à 9 et on échange cet élément avec t[8].


Correction exercice 7 :

#include<iostream>
using namespace std;

const int N=10;

int main()
{
int a[N],i,j,min,imin,tmp;

for(i=0;i<N;i++)
{
cout<<"Veuillez taper l'entier numero "<<i<<" : ";cin>>a[i];
}

for(i=0;i<N-1;i++)
{
imin=i;min=a[i];
for(j=i+1;j<<N;j++)if(a[j]<min){min=a[j];imin=j;}

tmp=a[imin];a[imin]=a[i];a[i]=tmp;
}
cout<<"VOICI LE TABLEAU TRIE :"<<endl;
for(i=0;i<N;i++)cout<<"a["<<i<<"]="<<a[i]<<endl;

return 0;
}


Exercice 8 : 

Ecrire un programme qui demande à l’utilisateur de taper 10 entiers qui seront stockés dans un tableau. Le programme doit trier le tableau par ordre croissant et doit afficher le tableau.
Algorithme suggéré (tri bulle) :
On parcourt le tableau en comparant t[0] et t[1] et en échangeant ces éléments s'ils ne sont pas dans le bon ordre.
on recommence le processus en comparant t[1] et t[2],... et ainsi de suite jusqu'à t[8] et t[9].
On compte lors de ce parcours le nombre d'échanges effectués.
On fait autant de parcours que nécessaire jusqu'à ce que le nombre d'échanges soit nul : le tableau sera alors trié.


Correction exercice 8 :

#include<iostream>
using namespace std;

const int N=10;

int main()
{
int a[N],i,nb,tmp;

for(i=0;i<N;i++)
{cout<<"Veuillez taper l'entier numero "<<i<<" : ";cin>>a[i];}

do
{
nb=0;
for(i=0;i<N-1;i++)
if(a[i]>a[i+1])
{
tmp=a[i];a[i]=a[i+1];a[i+1]=tmp;
nb++;
}
}while(nb!=0);

cout<<"VOICI LE TABLEAU TRIE :"<<endl;
for(i=0;i<N;i++)cout<<"a["<<i<<"]="<<a[i]<<endl;

return 0;
}

Saturday, March 29, 2014

Hibernate NullPointerException due to Space in HQL named queries

If you are using Hibernate for implementing persistence layer in Java and JEE application from couple of years then you would have seen this notorious NullPointerException while executing HQL named queries, Exception in thread �main� java.lang.NullPointerException at org.hibernate.hql.ast.ParameterTranslationsImpl .getNamedParameterExpectedType (ParameterTranslationsImpl.java:63). Hibernate has some poor logging in case of Exception, which has caused me hours to debug a simple problem. By looking at NullPointerException below (look full stacktrace below), I had no clue that it's coming because of a missing space on HQL (Hibernate Query language) query. You can also take a look if you can figure this out :
Read more �

Friday, March 28, 2014

Exercices corrigés en langage C++ : Les structures de contrôles (2)

Exercices corrigés en langage C++ : Les structures de contrôles
langage c++
Exercice 1 : 

Ecrire un programme qui demande à l'utilisateur de taper des entiers strictement positifs et qui affiche leur moyenne. Lorsqu'on tape une valeur négative, le programme affiche ERREUR et demande de retaper une valeur. Lorsqu'on tape 0, cela signifie que le dernier entier a été tapé. On affiche alors la moyenne. Si le nombre d'entiers tapés est égal à 0, on affiche PAS DE MOYENNE.

Correction exercice 1 :

#include<iostream>
using namespace std;

int main()
{
int x, s=0,nb=0;
double moyenne;

do{
cout<<"Tapez un entier :";cin>>x;
if(x>0){s=s+x;nb++;}
else if(x<0)cout<<"ERREUR ";

}while(x!=0);

if(nb==0)cout<<"AUCUN ENTIER TAPE "<<endl<<"PAS DE MOYENNE"<<endl;
else {
moyenne=(double)s/nb;
cout<<"La moyenne vaut : "<<moyenne<<endl;
}

return 0;
}

Exercice 2 : 

Ecrire un programme qui demande à l'utilisateur de taper un entier N et qui calcule u(N) défini par :
u(0)=3
u(1)=2
u(n)=n.u(n-1)+(n+1).u(n-2)+n


Correction exercice 2 :

#include<iostream>

int main()
{
int N,u,i=0,v,w;

cout<<"Tapez la valeur de N : ";cin>>N;
u=3;
v=2;
if(N==0)w=u;
else if(N==1)w=v;
else for(i=2;i<=N;i++){w=i*v+(i+1)*u+i;u=v;v=w;}

cout<<"u("<<N<<")="<<w<<endl;

return 0;
}

Exercice 3 : 

Ecrire un programme qui demande de saisir 10 entiers et qui affiche le nombre d'occurrences de la note la plus haute.

Correction exercice 3 :

#include<iostream>
using namespace std;

int main()
{
int nb,max,x,i;

for(i=0;i<10;i++)
{
cout<<"Tapez un entier : ";cin>>x;
if(i==0){max=x;nb=1;}
else if(x==max)nb++;
else if(max<x){max=x;nb=1;}
}

cout<<"le nombre d'occurences de "<<max<<" est "<<nb<<endl;

return 0;
}

Exercice 4 : 

Ecrire un programme qui demande de saisir un entier N et qui affiche N!.

Correction exercice 4 :

#include<iostream>
using namespace std;

int main()
{
int N,i,f=1;

cout<<"Tapez un entier : ";cin>>N;
for(i=2;i<=N;i++)f=f*i;
cout<<N<<"! vaut "<<f<<endl;

return 0;
}

Exercice 5 : 

Ecrire un programme qui demande de saisir un entier et qui indique si cet entier est premier ou non.

Correction exercice 5 :

#include<iostream>
using namespace std;

int main()
{
int n;
bool premier=true;
int d=2;

cout<<"Veuillez saisir un entier : ";cin>>n;

if(n<=1)premier=false;
else
{
while(premier==true && d*d<=n)
if(n%d==0)premier=false; else d=d+1;
}
if(premier)cout<<n<<" est premier"<<endl;
else cout<<n<<" n'est pas premier"<<endl;

return 0;
}

Exercice 6 : 

Ecrire un programme qui demande à l'utilisateur de saisir un entier N et qui affiche le nombre de nombres premiers inférieurs ou égaux à N.

Correction exercice 6 :

#include<iostream>
using namespace std;

int main()
{
int N,i,nb=0,d;
bool est_premier;

cout<<"Tapez la valeur de N : ";cin>>N;

for(i=2;i<=N;i++)
{
/* ecrire un programme qui teste si i est premier*/
est_premier=true;
d=2;
while(est_premier && d*d<=i)
if(i%d==0)est_premier=false; else d++;

if(est_premier==true)nb++;
}

cout<<"Le nombre de nombre premiers inférieurs ou égaux à "
<<N<<" est "<<nb<<endl;

return 0;
}

Exercice 7 : 

Ecrire un programme qui demande à l'utilisateur de saisir un entier N et qui affiche le N-ième nombre premier.

Correction exercice 7 :

#include<iostream>
using namespace std;

int main()
{
int N,i=1,nb=0,d;
bool est_premier;

cout<<"Tapez la valeur de N : ";cin>>N;

while(nb<N)
{
i++;
est_premier=true;
d=2;
while(est_premier && d*d<=i)
if(i%d==0)est_premier=false; else d++;

if(est_premier==true)nb++;
}

cout<<"Le N-ième nombre premier est "<<i<<endl;

return 0;
}

Exercice 8 : 

Ecrire un programme qui demande à l'utilisateur de saisir un entier N et qui affiche la figure suivante.
N=1
*
N=2
**
*
N=3
***
**
*

Correction exercice 8 :

#include <iostream>

using namespace std;

int main()
{
int N=0;
cout<<"Saisissez une valeur pour N: ";
cin>>N;
cout<<endl<<endl;
cout<<"N= "<<n<<endl;
for(int i=0;i<N;i++)
{

for(int j=0;j<(N-i);j++)
{
cout<<"*";
}
cout<<endl;
}
cout << "Appuyez sur une touche pour continuer ..." << endl;
cin.ignore();
cin.get();
return 0;
}

Exercice 9 : 

Ecrire un programme qui demande à l'utilisateur de saisir un entier N et qui affiche la figure suivante.
N=1
*
N=2
**
*
N=3
***
**
*
et ainsi de suite

Correction exercice 9 :

#include<iostream>
using namespace std;

int main()
{
int i,j,N;

cout<<"Tapez la valeur de N : ";cin>>N;

for(i=1;i<=N;i++)
{
for(j=1;j<i;j++)cout<<" ";
for(j=1;j<=N+1-i;j++)cout<<"*";
cout<<endl;
}
return 0;
}

Exercice 10 : 

On considère la suite hongroise : u(0)=a (a entier)
si u(n) pair alors u(n+1)=u(n)/2 sinon u(n+1)=3*u(n)+1
Pour toutes les valeurs a, il existe un entier N tel que u(N)=1 (conjecture admise).
a)
 Ecrire un programme qui demande à l'utilisateur de taper a et qui affiche toutes les valeurs de u(n) de  n=1 à n=N.

b)
 Ecrire un programme qui demande à l'utilisateur de taper un entier M puis qui cherche la valeur de a  comprise entre 2 et M qui maximise la valeur de N. On appelle A cette valeur. La programme doit  afficher la valeur A et la valeur N correspondante.

Correction exercice 10 :

a- 

#include<iostream>
using namespace std;

int main()
{
int a,n,u;
cout<<"Tapez la valeur de a : ";cin>>a;
n=0;
u=a;

while(u!=1)
{
if(u%2==0)u=u/2; else u=3*u+1;
n++;
cout<<"u("<<n<<")="<<u<<endl;
}
return 0;
}

b-

#include<iostream>
using namespace std;

int main()
{
int a,n,u,M,amax,nmax;
cout<<"Tapez la valeur de M : ";cin>>M;
amax=2;
nmax=2;

for(a=3;a<=M;a++)
{
n=0;
u=a;
while(u!=1)
{
if(u%2==0)u=u/2; else u=3*u+1;
n++;
}
if(n>nmax){amax=a;nmax=n;}
}
cout<<"La valeur de A est :"<<amax<<endl;
cout<<"La valeur de N correspondante est :"<<nmax<<endl;

return 0;
}

Exercices corrigés en langage C++ : Les structures de contrôles (1)

Exercices corrigés en langage C++ : Les structures de contrôles
langage c++
Exercice 1 : 

Ecrire un programme qui demande à l'utilisateur de taper un entier et qui affiche GAGNE si l'entier est entre 56 et 78 bornes incluses PERDU sinon.

Correction exercice 1 :

#include<iostream>
using namespace std;

int main()
{

int a;
cout<<"Tapez un entier : ";cin>>a;
if((a>=56)&&(a<=78))cout<<"GAGNE"<<endl; else cout<<"PERDU"<<endl;

cout << "Appuyez sur une touche pour continuer ..." << endl;
cin.ignore();
cin.get();
return EXIT_SUCCESS;
}


Exercice 2 : 

Ecrire un programme qui affiche tous les entiers de 8 jusqu’à 23 (bornes incluses) en utilisant un for.

Correction exercice 2 :

#include<iostream>
using namespace std;

int main()
{

int i;
for(i=8;i<=23;i++)cout<<i<<endl;

return 0;
}


Exercice 3 : 

Ecrire un programme qui affiche tous les entiers de 8 jusqu’à 23 (bornes incluses) en utilisant un while.

Correction exercice 3 :

#include<iostream>
using namespace std;
int main()
{

int i=8;
while(i<=23)
{
cout<<i<<endl;
i++;
}

return 0;
}

Exercice 4 : 

Ecrire un programme qui demande à l’utilisateur de taper 10 entiers et qui affiche leur somme.

Correction exercice 4 :

#include<iostream>
using namespace std;

int main()
{
int i,s=0,x;

for(i=0;i<10;i++)
{
cout<<"Tapez un entier : ";cin>>x;
s=s+x;
}

cout<<"La somme vaut : "<<s<<endl;

return 0;
}

Exercice 5 : 

Ecrire un programme qui demande à l’utilisateur de taper 10 entiers et qui affiche le plus petit de ces entiers.

Correction exercice 5 :

#include<iostream>
using namespace std;

int main()
{

int i,ppt,x;

for(i=0;i<10;i++)
{
cout<<"Tapez un entier : ";cin>>x;
if(i==0)ppt=x;else if(x<ppt)ppt=x;
}

cout<<"Le plus petit vaut vaut : "<<ppt<<endl;

return 0;
}

Exercice 6 : 

Ecrire un programme qui demande à l'utilisateur de taper un entier N et qui calcule la somme des cubes de 5^3 à N^3.

Correction exercice 6 :

#include<iostream.h>
using namespace std;
int main()

{
int N;
double somme;
cout << "Entrer un entier : "; cin >> N;
if (N>=5) {
for (int i=5; i<=N; i++) somme += i*i*i;
}
cout << "Somme des cubes de 5^3 a " << N << "^3 = " << somme << endl;
cin.ignore();
cin.get();
return EXIT_SUCCESS;
}


Exercice 7 : 

Ecrire un programme qui demande à l'utilisateur de taper un entier N et qui calcule u(N) défini par :
u(0)=3
u(n+1)=3.u(n)+4


Correction exercice 7 :

#include<iostream>
using namespace;
int main()
{
int i,u=3,N;

cout<<"Tapez N : ";cin>>N;

for(i=0;i<N;i++)
u=u*3+4;

cout<<"u("<<N<<")="<<u<<endl;

return 0;
}

Exercice 8 : 

Ecrire un programme qui demande à l'utilisateur de taper un entier N et qui calcule u(N) défini par :
u(0)=1
u(1)=1
u(n+1)=u(n)+u(n-1)


Correction exercice 8 :

#include<iostream>
using namespace std;

int main()
{
int i,u=1,v=1,w,N;

cout<<"Tapez N : ";cin>>N;

w=1;

for(i=2;i<=N;i++)
{
w=u+v;
u=v;
v=w;
}

cout<<"u("<<N<<")="<<w<<endl;

return 0;
}

Exercice 9 : 

Ecrire un programme qui demande à l’utilisateur de taper un entier N entre 0 et 20 bornes incluses et qui affiche N+17. Si on tape une valeur erronée, il faut afficher "erreur" et demander de saisir à nouveau l'entier.

Correction exercice 9 :

#include<iostream>
using namespace std;

int main()
{
int N;
bool ok;

do
{
cout<<"Tapez N entre 0 et 20 :";cin>>N;
ok= N<=20 && N>=0;
if(!ok)cout<<"ERREUR RECOMMENCEZ"<<endl;
}while(!ok);

N=N+17;
cout<<"La valeur finale est : "<<N<<endl;

return 0;
}

Exercice 10 : 

Ecrire un programme qui permet de faire des opérations sur un entier (valeur initiale à 0). Le programme affiche la valeur de l'entier puis affiche le menu suivant :
1. Ajouter 1
2. Multiplier par 2
3. Soustraire 4
4. Quitter

Le programme demande alors de taper un entier entre 1 et 4. Si l'utilisateur tape une valeur entre 1 et 3, on effectue l'opération, on affiche la nouvelle valeur de l'entier puis on réaffiche le menu et ainsi de suite jusqu'à ce qu'on tape 4. Lorsqu'on tape 4, le programme se termine.

Correction exercice 10 :

#include<iostream>
using namespace std;

int main()
{
int x=0,choix;

do
{
cout<<"x vaut "<<x<<endl;
cout<<"1 : Ajouter 1"<<endl;
cout<<"2 : Multiplier par 2"<<endl;
cout<<"3 : Soustraire 4"<<endl;
cout<<"4 : Quitter"<<endl;
cout<<"Votre choix : ";cin>>choix;

switch(choix)
{
case 1 : x++;break;
case 2: x=x*2; break;
case 3: x=x-4;break;
}
}while(choix!=4);

cout<<"La valeur finale de x vaut : "<<x<<endl;

return 0;
}

Exercices corrigés en langage C++ : notions de base

Exercices corrigés en langage C++ : notions de base
langage c++
Exercice 1 : 

Ecrire un programme qui affiche ceci à l'écran:
Hello world!
Voici un programme illustrant l'utilisation de cout!

Correction exercice 1 :

#include<iostream>
using namespace std;

int main(int argc, char **argv)
{
cout << "Hello world!" << endl;
cout << "Voici un programme illustrant l'utilisation de cout!";
cout << "Appuyez sur une touche pour continuer ..." << endl;
cin.ignore();
cin.get();
return EXIT_SUCCESS;
}



Exercice 2 : 

Ecrire un programme qui demande à l'utilisateur de taper la largeur et la longeur d'un champ et qui en affiche le périmetre et la surface.

Correction exercice 2 :

#include<iostream>
using namespace std;
int main()
{
double largeur,longueur,surface, perimetre;

cout << "Tapez la largeur du champ : "; cin >> largeur;
cout << "Tapez la longueur du champ : "; cin >> longueur;

surface = largeur * longueur;
perimetre = 2 * (largeur + longueur);

cout << "La surface vaut : " << surface << endl;
cout << "Le perimetre vaut : " << perimetre << endl;

cout << "Appuyez sur une touche pour continuer." << endl;
cin.ignore();
cin.get();

return EXIT_SUCCESS;
}



Exercice 3 : 

Ecrire un programme qui demande à l'utilisateur de taper 5 entiers et qui affiche leur moyenne. Le programme ne devra utiliser que 2 variables.

Correction exercice 3 :

#include<iostream>
using namespace std;
int main()
{
int a;double s=0;

cout<<"Tapez la valeur numero 1 : ";cin>>a;s=s+a;
cout<<"Tapez la valeur numero 2 : ";cin>>a;s=s+a;
cout<<"Tapez la valeur numero 3 : ";cin>>a;s=s+a;
cout<<"Tapez la valeur numero 4 : ";cin>>a;s=s+a;
cout<<"Tapez la valeur numero 5 : ";cin>>a;s=s+a;

s=s/5.0;
cout<<"La moyenne vaut : "<<s<<endl;

cout << "Appuyez sur une touche pour continuer ..." << endl;
cin.ignore();
cin.get();

return EXIT_SUCCESS;
}


Exercice 4 : 

Ecrire un programme qui demande à l’utilisateur de saisir 2 entiers A et B, qui échange le contenu des variables A et B puis qui affiche A et B.

Correction exercice 4 :

#include<iostream>
using namespace std;

int main()
{
int a,b,temp;

cout<<"Tapez la valeur de a : ";cin>>a;
cout<<"Tapez la valeur de b : ";cin>>b;

temp=a;
a=b;
b=temp;

cout<<"La valeur de a est "<<a<<endl;
cout<<"La valeur de b est "<<b<<endl;

cout << "Appuyez sur une touche pour continuer ..." << endl;
cin.ignore();
cin.get();

return EXIT_SUCCESS;
}


Exercice 5 : 

Ecrire un programme qui demande à l'utilisateur de taper le prix HT d'un kilo de tomates, le nombre de kilos de tomates achetés, le taux de TVA (Exemple 10%,20%,...). Le programme affiche alors le prix TTC des marchandises.

Correction exercice 5 :

#include<iostream>
using namespace std;
int main()
{
double prixht,poids,tva,total;

cout<<"Tapez le prix HT d'un kilo de tomates : ";cin>>prixht;
cout<<"Combien de kilos avez-vous achetes : ";cin>>poids;
cout<<"Quel est le taux de TVA : ";cin>>tva;

total=(1+tva/100)*prixht*poids;

cout<<"Le prix TTC est : "<<total<<endl;

cout << "Appuyez sur une touche pour continuer ..." << endl;
cin.ignore();
cin.get();

return EXIT_SUCCESS;;
}