Exercices en langage C++/Les tableaux
Exercices en langage C++ |
---|
Sommaire |
|
Liens |
Modifier ce modèle |
Les tableaux
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.
Cet exercice a pour but de vérifier les points techniques suivants :
- Utilisation simple de tableaux.
- Un algorithme simple sur un tableau : recherche du nombre d'éléments vérifiant une propriété.
Voici le fichier source :
#include<iostream>
#include<vector>
using namespace std;
int main()
{
vector<int> tab;
int N;
for (int i=0; i<10; i++)
{
cout << "Tapez un nombre : ";cin >> N;
tab.push_back(N);
}
N = 0;
for (int i=0; i<10; i++)
{
if (tab[i] >=10) N++;
}
if (N==0) cout << "Il n'y a aucun nombre supérieur ou égal à 10." << endl;
else if (N==1) cout << "Il y a 1 nombre supérieur ou égal à 10." << endl;
else cout << "Il y a " << N << " nombres supérieurs ou égaux à 10." << endl;
return 0;
}
EXERCICE 2
Écrire 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".
Cet exercice a pour but de vérifier les points techniques suivants :
- Utilisation simple de tableaux.
- Un algorithme simple sur un tableau : recherche d'un élément dans un tableau.
Voici le fichier source :
#include<iostream>
#include<vector>
using namespace std;
int main()
{
vector<int> tab;
int N, V, j;
for (int i=0; i<10; i++)
{
cout << "Tapez un nombre : "; cin >> N;
tab.push_back(N);
}
cout << "choisissez la valeur de V : "; cin >> V;
for (int i=0; i<10; i++)
{
if (tab[i] == V) j++;
}
if(j>0) cout << V << " se trouve dans le tableau" << endl;
else cout << V << " ne se trouve pas dans le tableau" << endl;
return 0;
}
EXERCICE 3
Écrire 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.
Cet exercice a pour but de vérifier les points techniques suivants :
- Utilisation simple de tableaux.
- Un algorithme simple sur un tableau : recherche de l'indice du plus grand élément.
Voici le fichier source :
#include<iostream>
using namespace std;
const int N=10;
int main()
{
const int N = 10;
int tab[N], pge=0, i=0, j;
for (i; i < N; i++)
{
cout << "Saisir le nombre " << i+1 << " : ";
cin >> tab[i];
if (i==0 || tab[i] > pge)
{
pge = tab[i];
j=i;
}
}
cout << "la plus grande valeur du tableau est " << pge<<" et son indice est " << j;
return 0;
}
EXERCICE 4
Écrire 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 valeur de V et doit afficher le tableau final.
Cet exercice a pour but de vérifier les points techniques suivants :
- Utilisation simple de tableaux.
- Un algorithme simple sur un tableau : suppression d'un élément avec décalage des suivants.
Voici le fichier source :
#include<iostream>
using namespace std;
int main()
{
int tab[10], r = 0;
for (int i=0 ; i<10 ; i++)
{
cout << "Saisir le nombre " << i+1 << ": ";
cin >> tab[i];
}
cout << "Choisissez la valeur à supprimer : "; cin >> V;
for (int i=0 ; i<10 ; i++)
{
if (r==0 && tab[i] == V) r=1;
else tab[i-1] = tab[i];
}
for (int i=0 ; i<10-r ; i++) // 9 nombre si V supprimé, 10 sinon.
{
cout << "- Nombre " << i+1 << " = " << tab[i] << endl;
}
return 0;
}
EXERCICE 5
Écrire 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.
- Cet exercice a pour but de vérifier les points techniques suivants :
- Utilisation simple de tableaux.
- Un algorithme simple sur un tableau : insertion dans en tableau avec décalage.
- Voici le fichier source :
#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
Écrire 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".
- Cet exercice a pour but de vérifier les points techniques suivants :
- Utilisation simple de tableaux.
- Un algorithme simple sur un tableau : vérifier si le tableau vérifie une propriété donnée.
- Voici le fichier source :
#include<iostream>
using namespace std;
const int N=10;
int main()
{
int a[N],i;
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;
}
Solution 2:
// Par Ismail Zouaoui
#include <iostream>
using namespace std;
int const SIZE = 10;
int main()
{
int table[SIZE];
bool ordre = true;
cout << "Entre 10 entiers: ";
for(int i=0; i < SIZE; i++)
{
cin >> table[i];
}
if(table[0] < table[SIZE-1])
{
for(int i=0; i<SIZE-1; i++)
{
if(table[i] > table[i+1])
{
cout << "le tableau est quelconque.\n";
ordre = false;
break;
}
}
if(ordre == true)
{
cout << "le tableau est croissant.\n";
}
}
else if(table[0] > table[SIZE-1])
{
for(int i=0; i<SIZE-1; i++)
{
if(table[i] < table[i+1])
{
cout << "le tableau est quelconque.\n";
ordre = false;
break;
}
}
if(ordre == true)
{
cout << "le tableau est décroissant.\n";
}
}
else if(table[0] == table[SIZE-1])
{
for(int i=0; i<SIZE-1; i++)
{
if(table[i] != table[i+1])
{
cout << "le tableau est quelconque.\n";
ordre = false;
break;
}
}
if(ordre == true)
{
cout << "le tableau est constant.\n";
}
}
return 0;
}
EXERCICE 7
Écrire 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].
- Cet exercice a pour but de vérifier les points techniques suivants :
- Utilisation simple de tableaux.
- Un algorithme simple sur un tableau : tri d'un tableau.
- Voici le fichier source :
#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 numéro "<<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;
}
- Voici le fichier source :
#include <iostream>
using namespace std;
int main()
{
const int taille = 10;
int tableau[taille];
int tampon;
for(int i = 0; i < taille; i++) // Remplissage du tableau
{
cout << "Quelle valeur a l'indice " << i << " : ";
cin >> tableau[i];
}
int j = 0;
while(j < taille) // Boucle principale
{
int indice = j;
for(int i = j; i < taille - 1; i++) // Boucle de recherche du plus petit élément
{
if(tableau[indice] > tableau[i + 1])
indice = i + 1;
}
// On inverse les éléments
tampon = tableau[j];
tableau[j] = tableau[indice];
tableau[indice] = tampon;
j++;
}
// On affiche le tableau trié
for(int i = 0; i < taille; i++)
cout << "Indice " << i << " : " << tableau[i] << endl;
return 0;
}
EXERCICE 8
Écrire 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é.
- Cet exercice a pour but de vérifier les points techniques suivants :
- Utilisation simple de tableaux.
- Un algorithme simple sur un tableau : tri d'un tableau.
- Voici le fichier source :
#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;
}
- Voici le fichier source :
#include <iostream>
using namespace std;
int main()
{
const int taille = 10;
int tableau[taille];
int tampon;
for(int i = 0; i < taille; i++) // Remplissage du tableau
{
cout << "Quelle valeur a l'indice " << i << " : ";
cin >> tableau[i];
}
bool trie = false; // Vérifie si un tri a eu lieu
while(!trie) // Si aucun tri n'a eu lieu, la boucle se finit
{
trie = true;
for(int i = 0; i < taille - 1; i++)
{
if(tableau[i] > tableau[i + 1])
{
tampon = tableau[i];
tableau[i] = tableau[i + 1];
tableau[i + 1] = tampon;
trie = false;
}
}
}
for(int i = 0; i < taille; i++) // Affiche le tableau trié
cout << "Indice " << i << " : " << tableau[i] << endl;
return 0;
}
EXERCICE 9
Écrire 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.
- Cet exercice a pour but de vérifier les points techniques suivants :
- Utilisation simple de tableaux.
- Un algorithme simple sur un tableau : fusion de 2 tableaux.
- Voici le fichier source :
#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;
}
Pour prévoir un usage futur, avec des tableaux de longueur différente, solution 2 :
#include<iostream>
using namespace std;
const int Na=10;
const int Nb=10;
int main()
{
int a[Na],b[Nb],c[Na + Nb],i;
cout<<"SAISIE DU TABLEAU a"<<endl;
for(i=0;i<Na;i++){cout<<"Tapez un entier ";cin>>a[i];}
cout<<"SAISIE DU TABLEAU b"<<endl;
for(i=0;i<Nb;i++){cout<<"Tapez un entier ";cin>>b[i];}
for(i=0;i<Na + Nb;i++)if(i<Na)c[i]=a[i];else c[i]=b[i-Na];
cout<<"VOICI LE TABLEAU c"<<endl;
for(i=0;i<Na + Nb;i++)cout<<c[i]<<" ";
cout<<endl;
return 0;
}
EXERCICE 10
Écrire 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.
#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 11
Écrire 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.
- Cet exercice a pour but de vérifier les points techniques suivants :
- Utilisation simple de tableaux.
- Gestion d'une liste simple grâce à un tableau statique.
- Voici le fichier source :
#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 12
Écrire 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.
- Cet exercice a pour but de vérifier les points techniques suivants :
- Utilisation simple de tableaux.
- Gestion d'une liste triée grâce à un tableau statique.
- Voici le fichier source :
#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 13
Écrire 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 ...
Cet exercice a pour but de vérifier les points techniques suivants :
- Utilisation simple de tableaux.
- Itération des éléments d'un tableau.
Voici le fichier source :
#include<iostream>
using namespace std;
int main()
{
int a[21],i,j,N;
cout << "Veuillez taper N : "; cin >> N;
if (N<0 || N>20)
{
cerr << "Nombre invalide." << endl;
return 1;
}
a[0]=1;
for(i=1 ; i<=N ; i++)
{
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 14
Écrire 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.
#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 numéro " << 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 15
Écrire 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.
Cet exercice a pour but de vérifier les points techniques suivants :
- Utilisation de tableaux à 2 dimensions.
- Modélisation d'un problème mathématique basique.
Voici le fichier source :
#include<iostream>
using namespace std;
// Taille du tableau
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];
}
// Initialisation
for(i=0 ; i<N ; i++) moyL[i]=0;
for(j=0 ; j<M ; j++) moyC[j]=0;
moy = 0;
// Ajout des valeurs
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];
}
// Division par le nombre de valeurs
for(i=0 ; i<N ; i++) moyL[i] /= M;
for(j=0 ; j<M ; j++) moyC[j] /= N;
moy /= (N*M);
// Affichage
for(i=0 ; i<N ; i++)
{
for(j=0 ; j<M ; j++)
cout << t[i][j] << " ";
cout << " --> Moyenne de la ligne = " << moyL[i] <<endl;
}
for(j=0 ; j<M ; j++)
cout << moyC[j] << " ";
cout << " <-- Moyenne des colonnes " << endl;
cout << "Moyenne totale = " << moy << endl;
return 0;
}