Programmation C++/Les tableaux/Exercices sur les tableaux statiques
Exercices
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>
const int N = 10;
int main()
{
int t[N], i, nb = 0;
for (i=0; i<N; i++) {
std::cout << "Tapez un entier ";
std::cin >> t[i];
}
for (i=0; i<N; i++) {
if(t[i]>=10) {
nb++;
}
}
std::cout << "Le nombre d'entiers supérieurs ou égaux à 10 est : " << nb << std::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>
const int N=10;
int main()
{
int t[N], i, V;
bool trouve;
for (i=0; i<N; i++) {
std::cout << "Tapez un entier : ";
std::cin >> t[i];
}
std::cout << "Tapez la valeur de V : ";
std::cin >> V;
trouve = false;
i = 0;
while (!trouve && i<N) {
if (t[i]==V) {
trouve=true;
} else {
i++;
}
}
if (trouve) {
std::cout << "La valeur V se trouve dans le tableau" << std::endl;
} else {
std::cout << "La valeur V ne se trouve pas dans le tableau" << std::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>
const int N = 10;
int main()
{
int t[N], i, indice;
for (i=0; i<N; i++) {
std::cout << "Tapez un entier :";
std::cin >> t[i];
}
indice=0;
for (i=1; i<N; i++) {
if (t[indice]<t[i]) {
indice=i;
}
}
std::cout << "L'indice du plus grand élément est : " << indice << std::endl;
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 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.
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éments avec décalage des suivants.
Voici le fichier source :
#include <iostream>
const int N=10;
int main()
{
int t[N], i, j, V;
bool trouve;
for (i=0; i<N; i++) {
std::cout << "Tapez un entier ";
std::cin >> t[i];
}
std::cout << "Tapez la valeur de V : ";
std::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++) {
std::cout << t[i] << std::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>
const int N = 10;
int main()
{
int t[N], i, indice, V;
for (i=0; i<N; i++) {
std::cout << "Tapez un entier ";
std::cin >> t[i];
}
std::cout << "Tapez un indice (de 0 à 9) : ";
std::cin >> indice;
std::cout << "Tapez la valeur de V : ";
std::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++) {
std::cout<< t[i] << std::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>
const int N=10;
int main()
{
int a[N],i;
bool croissant = true, decroissant = true;
for (i=0; i<N; i++) {
std::cout << "Veuillez taper l'entier numero " << i << " : ";
std::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) {
std::cout << "Le tableau est constant" << std::endl;
}
if (croissant && !decroissant) {
std::cout << "Le tableau est croissant" << std::endl;
}
if (!croissant && decroissant) {
std::cout << "Le tableau est décroissant"<< std::endl;
}
if (!croissant && !decroissant) {
std::cout << "Le tableau est quelconque" << std::endl;
}
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>
const int N=10;
int main()
{
int a[N], i, j, min, imin, tmp;
for (i=0; i<N; i++) {
std::cout << "Veuillez taper l'entier numero " << i << " : ";
std::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;
}
std::cout << "Voici le tableau trié :" << std::endl;
for (i=0; i<N; i++) {
std::cout<<"a[" << i << "]=" << a[i] << std::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>
const int N=10;
int main()
{
int a[N], i, nb, tmp;
for(i=0; i<N; i++) {
std::cout << "Veuillez taper l'entier numero " << i << " : ";
std::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);
std::cout << "Voici le tableau trié :" << std::endl;
for (i=0; i<N; i++) {
std::cout << "a[" << i <<"]=" << a[i] << std::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>
const int N=10;
int main()
{
int a[N], b[N], c[2*N], i;
std::cout << "Saisie du tableau a :" << std::endl;
for (i=0; i<N; i++) {
std::cout << "Tapez un entier : ";
std::cin >> a[i];
}
std::cout << "Saisie du tableau b :" << std::endl;
for (i=0; i<N; i++) {
std::cout << "Tapez un entier : ";
std::cin >> b[i];
}
for (i=0; i<2*N; i++) {
if (i<N) {
c[i] = a[i];
} else {
c[i] = b[i-N];
}
}
std::cout << "Voici le tableau c"<< std::endl;
for (i=0; i<2*N; i++) {
std::cout << c[i] << " ";
}
std::cout << std::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 le 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<<"LE 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 : lorsqu’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;
bool fini=false, trouve;
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 ;
- gestion d'une liste triée grâce à un tableau statique.
Voici le fichier source :
#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 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 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 15
Écrire un programme qui demande à l’utilisateur de taper le contenu d’un tableau de réels de 4 lignes et 2 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;
const int N_LIGNES = 4;
const int N_COLONNES = 2;
int main()
{
double t[N_LIGNES][N_COLONNES], moyL[N_LIGNES], moyC[N_COLONNES], moy;
int i, j;
for(i=0; i<N_LIGNES; i++)
for(j=0;j<N_COLONNES;j++)
{
cout<<"Tapez la valeur de la ligne "<<i<<" colonne "<<j<<" : ";
cin >> t[i][j];
}
for(i=0; i<N_LIGNES; i++) moyL[i]=0;
for(j=0; j<N_COLONNES; j++) moyC[j]=0;
moy=0;
for(i=0; i<N_LIGNES; i++)
for(j=0; j<N_COLONNES; j++)
{
moyL[i] += t[i][j];
moyC[j] += t[i][j];
moy += t[i][j];
}
// N_COLONNES valeurs par ligne
for(i=0; i<N_LIGNES; i++) moyL[i] /= N_COLONNES;
// N_LIGNES valeurs par colonne
for(j=0; j<N_COLONNES; j++) moyC[j] /= N_LIGNES;
moy /= (N_LIGNES*N_COLONNES);
for(i=0; i<N_LIGNES; i++)
{
for(j=0; j<N_COLONNES; j++)
cout << t[i][j] <<" ";
cout << moyL[i] <<endl;
}
for(j=0; j<N_COLONNES; j++)
cout << moyC[j] <<" ";
cout << endl;
return 0;
}