Exercices corrigés sur les tableaux en Python, Java et langage C - TD2-
Un tableau est une collection d'éléments stockés dans des emplacements de mémoire continus.
Le tableau utilise un index de valeur entière pour accéder à un élément spécifique. L'index commence à 0 et va jusqu'à N-1 (où N est la taille du tableau).

Dans les exercices suivants, nous essaierons de vous montrer comment faire face à certains problèmes difficiles pour manipuler les tableaux
Tous les exercices sont résolus en utilisant Python, Java et C
Exercice 1
Créez un programme qui crée et initialise un tableau, puis insère un élément à la position spécifiée dans ce tableau (de 0 à N-1).
Pour insérer un nouvel élément dans le tableau, déplacez les éléments de la position d'insertion donnée vers une position vers la droite.
- Saisir le nombre d'éléments : 5
- Elément 1 : 3
- Elément 2 : 7
- Elément 3 : 4
- Elément 4 : 9
- Elément 5 : 8
- Saisir un élément : 5
- Saisir une position : 2
Données de sortie
- 3 5 7 4 9 8
Corrigé
import java.util.Scanner;
public class Test {
public static void main(String[] variables) {
Scanner clavier = new Scanner(System.in);
int tab[];
int i, N, num, pos;
// Saisir la taille actuelle du tableau */
System.out.print("Saisir le nombre d'éléments : ");
N = clavier.nextInt();
// intialiser la taille des tableaux avec N
tab = new int[N + 1];
// Saisir les éléments du tableau source */
for (i = 0; i < N; i++) {
System.out.print("Elément " + (i + 1) + " : ");
tab[i] = clavier.nextInt();
}
// Saisir un élément et sa position d'insertion */
System.out.print("Saisir un élément : ");
num = clavier.nextInt();
System.out.print("Saisir une position : ");
pos = clavier.nextInt();
// Si la position et non valide */
if (pos > N + 1 || pos <= 0) {
System.out.println("Position invalide! Veuillez saisir une position entre 1 et " + N);
} else {
/*
Faites de la place pour un nouvel élément de tableau en déplaçant les
éléments juste après la position vers la droite
*/
for (i = N; i >= pos; i--) {
tab[i] = tab[i - 1];
}
// Insérer un nouvel élément à une position donnée et incrémenter N */
tab[pos - 1] = num;
N++;
// Afficher le tableau après l'opération d'insertion */
for (i = 0; i < N; i++) {
System.out.print(tab[i] + " , ");
}
}
// fermer les ressources
clavier.close();
}
}
#include <stdio.h>
#define TAILLE_MAX 1000 // La taille maximale
int main()
{
int tab[TAILLE_MAX];
int i, N, num, pos;
/* Saisir la taille actuelle du tableau < TAILLE_MAX */
printf("Saisir le nombre d'éléments : ");
scanf("%d", &N);
/* Saisir les éléments du tableau tab */
for(i=0; i<N; i++)
{
printf("Elément %d", i+1);
scanf("%d", &tab[i]);
}
/* Saisir un élément et sa position d'insertion */
printf("Saisir un élément : ");
scanf("%d", &num);
printf("Saisir une position : ");
scanf("%d", &pos);
/* Si la position et non valide */
if(pos > N+1 || pos $lt;= 0)
{
printf("Position invalide! Veuillez saisir une position entre 1 et %d", N);
}
else
{
/* Faites de la place pour un nouvel élément de tableau en déplaçant les éléments juste après la position vers la droite */
for(i=N; i>=pos; i--)
{
tab[i] = tab[i-1];
}
/* Insérer un nouvel élément à une position donnée et incrémenter N */
tab[pos-1] = num;
N++;
/* Afficher le tableau après l'opération d'insertion */
for(i=0; i<N; i++)
{
printf("%d\t", tab[i]);
}
}
return 0;
}
# Saisir la taille actuelle du tableau
N = int(input("Saisir le nombre d'éléments : "))
# intialiser la taille des tableaux avec N
tab=[0]*(N+1)
# Saisir les éléments du tableau source
for i in range(N):
tab[i]=int(input("Saisir l'élement {0} : ".format(i+1)))
# Saisir un élément et sa position d'insertion */
num = int(input("Saisir un élément : "))
pos = int(input("Saisir une position : "))
# Si la position et non valide */
if (pos > N + 1 or pos <= 0):
print("Position invalide! Veuillez saisir une position entre 1 et " , N)
else:
#Faites de la place pour un nouvel élément de tableau en déplaçant les
#éléments juste après la position vers la droite
for i in range(N,-1,-1):
tab[i] = tab[i - 1]
# Insérer un nouvel élément à une position donnée et incrémenter N
tab[pos - 1] = num
N+=1
# Afficher le tableau après l'opération d'insertion */
for i in range(N):
print(tab[i] , " , ")
Exercice 2
Créez un programme qui crée et initialise un tableau, puis supprimez un élément de ce tableau à la position spécifiée (de 0 à N-1).
Pour supprimer un élément du tableau, déplacez les éléments juste après la position donnée vers une position à gauche et réduisez la taille du tableau.
- Saisir le nombre d'éléments : 5
- Elément 1 : 3
- Elément 2 : 7
- Elément 3 : 4
- Elément 4 : 9
- Elément 5 : 8
- Saisir la position de l'élément à supprimer : 2
Données de sortie
- 3 4 9 8
Corrigé
import java.util.Scanner;
public class Test {
public static void main(String[] variables) {
Scanner clavier = new Scanner(System.in);
int tab[];
int i, N, pos;
// Saisir la taille actuelle du tableau */
System.out.print("Saisir le nombre d'éléments : ");
N = clavier.nextInt();
// intialiser la taille des tableaux avec N
tab = new int[N + 1];
// Saisir les éléments du tableau source */
for (i = 0; i < N; i++) {
System.out.print("Elément " + (i + 1) + " : ");
tab[i] = clavier.nextInt();
}
// Position de l'élément à supprimer */
System.out.print("Saisir la position de l'élément à supprimer : ");
pos = clavier.nextInt();
// Position de suppression non valide */
if (pos < 0 || pos > N) {
System.out.println("Position invalide! Veuillez saisir une position entre 1 et " + N);
} else {
// Copier la valeur de l'élément suivant dans l'élément actuel */
for (i = pos - 1; i < N - 1; i++) {
tab[i] = tab[i + 1];
}
// Décrémenter N par 1 */
N--;
}
// Afficher le tableau après suppression */
for (i = 0; i < N; i++) {
System.out.print(tab[i] + " , ");
}
// fermer les ressources
clavier.close();
}
}
#include <stdio.h>
#define TAILLE_MAX 1000 // La taille maximale
int main()
{
int tab[TAILLE_MAX];
int i, N, pos;
/* Saisir la taille actuelle du tableau < TAILLE_MAX */
printf("Saisir le nombre d'éléments : ");
scanf("%d", &N);
/* Saisir les éléments du tableau tab */
for(i=0; i<N; i++)
{
printf("Elément %d", i+1);
scanf("%d", &tab[i]);
}
/* Position de l'élément à supprimer */
printf("Saisir la position de l'élément à supprimer : ");
scanf("%d", &pos);
/* Position de suppression non valide */
if(pos < 0 || pos > N)
{
printf("Position invalide! Veuillez saisir une position entre 1 et %d", N);
}
else
{
/* Copier la valeur de l'élément suivant dans l'élément actuel */
for(i=pos-1; i<N-1; i++)
{
tab[i] = tab[i + 1];
}
/* Décrémenter N par 1 */
N--;
}
/* Afficher le tableau après suppression */
for(i=0; i<N; i++)
{
printf("%d\t", tab[i]);
}
return 0;
}
# Saisir la taille actuelle du tableau
N = int(input("Saisir le nombre d'éléments : "))
# intialiser la taille des tableaux avec N
tab=[0]*(N)
# Saisir les éléments du tableau source
for i in range(N):
tab[i]=int(input("Saisir l'élement {0} : ".format(i+1)))
pos = int(input("Saisir la position de l'élément à supprimer : "))
# Si la position et non valide */
if (pos > N + 1 or pos <= 0):
print("Position invalide! Veuillez saisir une position entre 1 et " , N)
else:
#Copier la valeur de l'élément suivant dans l'élément actuel
for i in range(pos-1, N-1):
tab[i] = tab[i + 1]
#Décrémenter N par 1 */
N-=1
#Afficher le tableau après suppression */
for i in range(N):
print(tab[i] , " , ")
Exercice 3
Créez un programme qui crée et initialise un tableau, puis trouve la fréquence de chaque élément de ce tableau.
- Saisir le nombre d'éléments : 5
- Elément 1 : 3
- Elément 2 : 7
- Elément 3 : 3
- Elément 4 : 9
- Elément 5 : 8
Données de sortie
- 3 se produit 2 fois
- 7 se produit 1 fois
- 3 se produit 2 fois
- 9 se produit 1 fois
- 8 se produit 1 fois
Corrigé
import java.util.Scanner;
public class Test {
public static void main(String[] variables) {
Scanner clavier = new Scanner(System.in);
int tab[], freq[];
int N, i, j, cpt;
// Saisir la taille actuelle du tableau */
System.out.print("Saisir le nombre d'éléments : ");
N = clavier.nextInt();
// intialiser la taille des tableaux avec N
tab = new int[N];
freq = new int[N];
// Saisir les éléments du tableau source */
for (i = 0; i < N; i++) {
System.out.print("Elément " + (i + 1) + " : ");
tab[i] = clavier.nextInt();
freq[i] = 1; // fréquence de l'élément i = 1
}
for (i = 0; i < N; i++) {
cpt = 1;
for (j = 0; j < N; j++) {
// Si un élément en double est trouvé */
if ((i != j) && (tab[i] == tab[j])) {
cpt++;
}
}
freq[i] = cpt;
}
/*
Afficher la fréquence de chaque élément
*/
for (i = 0; i < N; i++) {
if (freq[i] != 0) {
System.out.print(tab[i] + " se produit " + freq[i] + " fois\n");
}
}
// fermer les ressources
clavier.close();
}
}
#include <stdio.h>
int main()
{
int tab[100], freq[100];
int N, i, j, cpt;
/* Saisir la taille actuelle du tableau < TAILLE_MAX */
printf("Saisir le nombre d'éléments : ");
scanf("%d", &N);
/* Saisir les éléments du tableau tab */
for(i=0; i<N; i++)
{
printf("Elément %d : ", i+1);
scanf("%d", &tab[i]);
freq[i] = -1;
}
for(i=0; i<N; i++)
{
cpt = 1;
for(j=0; j<N; j++)
{
/* Si un élément en double est trouvé */
if((i!=j) && (tab[i]==tab[j]))
{
cpt++;
}
}
freq[i] = cpt;
}
/*
* Afficher la fréquence de chaque élément
*/
for(i=0; i<N; i++)
{
if(freq[i] != 0)
{
printf("%d se produit %d fois\n", tab[i], freq[i]);
}
}
return 0;
}
# Saisir la taille actuelle du tableau
N = int(input("Saisir le nombre d'éléments : "))
# intialiser la taille des tableaux avec N
tab=[0]*(N)
freq=[0]*(N)
# Saisir les éléments du tableau source
for i in range(N):
tab[i]=int(input("Saisir l'élement {0} : ".format(i+1)))
freq[i] = -1
for i in range(N):
cpt = 1
for j in range(N):
# Si un élément en double est trouvé */
if((i!=j) and (tab[i]==tab[j])):
cpt+=1
freq[i] = cpt
#Afficher la fréquence de chaque élément
for i in range(N):
if(freq[i] != 0):
print(tab[i] , " se produit " , freq[i] , " fois")
Exercice 4
Créez un programme qui crée et initialise un tableau, puis affichez tous les éléments uniques de ce tableau
Idée: utiliser un tableau de fréquences
- Saisir le nombre d'éléments : 5
- Elément 1 : 3
- Elément 2 : 7
- Elément 3 : 3
- Elément 4 : 9
- Elément 5 : 8
Données de sortie
- 7 9 8
Corrigé
import java.util.Scanner;
public class Test {
public static void main(String[] variables) {
Scanner clavier = new Scanner(System.in);
int tab[], freq[];
int N, i, j, cpt;
// Saisir la taille actuelle du tableau */
System.out.print("Saisir le nombre d'éléments : ");
N = clavier.nextInt();
// intialiser la taille des tableaux avec N
tab = new int[N];
freq = new int[N];
// Saisir les éléments du tableau source */
for (i = 0; i < N; i++) {
System.out.print("Elément " + (i + 1) + " : ");
tab[i] = clavier.nextInt();
freq[i] = 1; // fréquence de l'élément i = 1
}
for (i = 0; i < N; i++) {
cpt = 1;
for (j = 0; j < N; j++) {
// Si un élément en double est trouvé */
if ((i != j) && (tab[i] == tab[j])) {
cpt++;
}
}
freq[i] = cpt;
}
// afficher tous les éléments uniques du tableau */
for (i = 0; i < N; i++) {
if (freq[i] == 1) {
System.out.println(tab[i] + " , ");
}
}
// fermer les ressources
clavier.close();
}
}
#include <stdio.h>
#define TAILLE_MAX 1000 // La taille maximale
int main()
{
int tab[TAILLE_MAX], freq[TAILLE_MAX];
int N, i, j, count;
/* Saisir la taille actuelle du tableau < TAILLE_MAX */
printf("Saisir le nombre d'éléments : ");
scanf("%d", &N);
/* Saisir les éléments du tableau tab */
for(i=0; i<N; i++)
{
printf("Elément %d (<100)", i+1);
scanf("%d", &tab[i]);
freq[i] = 1;
}
/* Trouver la fréquence de chaque élément */
for(i=0; i<N; i++)
{
cpt = 1;
for(j=i+1; j<N; j++)
{
/* Si un élément en double est trouvé */
if((i!=j) && (tab[i]==tab[j]))
{
cpt++;
/* Make sure not to count frequency of same element again */
freq[j] = 0;*/
}
}
freq[i] = cpt;
}
/* afficher tous les éléments uniques du tableau */
for(i=0; i<N; i++)
{
if(freq[i] == 1)
{
printf("%d ", tab[i]);
}
}
return 0;
}
# Saisir la taille actuelle du tableau
N = int(input("Saisir le nombre d'éléments : "))
# intialiser la taille des tableaux avec N
tab=[0]*(N)
freq=[0]*(N)
# Saisir les éléments du tableau source
for i in range(N):
tab[i]=int(input("Saisir l'élement {0} : ".format(i+1)))
freq[i] = -1
for i in range(N):
cpt = 1
for j in range(N):
# Si un élément en double est trouvé */
if((i!=j) and (tab[i]==tab[j])):
cpt+=1
freq[i] = cpt
#afficher tous les éléments uniques du tableau
for i in range(N):
if(freq[i] == 1):
print(tab[i] , end=" - ")
Exercice 5
Créez un programme qui crée et initialise un tableau, puis comptez les éléments en double dans ce tableau.
- Saisir le nombre d'éléments : 5
- Elément 1 : 3
- Elément 2 : 7
- Elément 3 : 3
- Elément 4 : 7
- Elément 5 : 8
Données de sortie
- Nombre total d'éléments en double trouvés dans le tableau = 2
Corrigé
import java.util.Scanner;
public class Test {
public static void main(String[] variables) {
Scanner clavier = new Scanner(System.in);
int tab[];
int N, i, j, cpt = 0;
// Saisir la taille actuelle du tableau */
System.out.print("Saisir le nombre d'éléments : ");
N = clavier.nextInt();
// intialiser la taille des tableaux avec N
tab = new int[N];
// Saisir les éléments du tableau source */
for (i = 0; i < N; i++) {
System.out.print("Elément " + (i + 1) + " : ");
tab[i] = clavier.nextInt();
}
/*
Trouver tous les éléments en double dans le tableau
*/
for (i = 0; i < N; i++) {
for (j = i + 1; j < N; j++) {
// Si un doublon est trouvé, incrémentez cpt de 1 */
if (tab[i] == tab[j]) {
cpt++;
break;
}
}
}
System.out.println("Nombre total d'éléments en double trouvés dans le tableau = " + cpt);
// fermer les ressources
clavier.close();
}
}
#include <stdio.h>
#define TAILLE_MAX 1000 // La taille maximale
int main()
{
int tab[TAILLE_MAX];
int i, j, N, cpt = 0;
/* Saisir la taille actuelle du tableau < TAILLE_MAX */
printf("Saisir le nombre d'éléments : ");
scanf("%d", &N);
/* Saisir les éléments du tableau tab */
for(i=0; i<N; i++)
{
printf("Elément %d", i+1);
scanf("%d", &tab[i]);
}
/*
* Trouver tous les éléments en double dans le tableau
*/
for(i=0; i<N; i++)
{
for(j=i+1; j<N; j++)
{
/* Si un doublon est trouvé, incrémentez cpt de 1 */
if(tab[i] == tab[j])
{
cpt++;
break;
}
}
}
printf("\nNombre total d'éléments en double trouvés dans le tableau = %d", cpt);
return 0;
}
# Saisir la taille actuelle du tableau
N = int(input("Saisir le nombre d'éléments : "))
# intialiser la taille des tableaux avec N
tab=[0]*(N)
# Saisir les éléments du tableau source
for i in range(N):
tab[i]=int(input("Saisir l'élement {0} : ".format(i+1)))
#Trouver tous les éléments en double dans le tableau
cpt=0
for i in range(N):
for j in range(i+1,N):
# Si un doublon est trouvé, incrémentez cpt de 1 */
if (tab[i] == tab[j]):
cpt+=1
break
print("Nombre total d'éléments en double trouvés dans le tableau = " , cpt)
Exercice 6
Créez un programme qui crée et initialise un tableau, puis supprimez les éléments en double dans ce tableau.
- Saisir le nombre d'éléments : 5
- Elément 1 : 3
- Elément 2 : 7
- Elément 3 : 3
- Elément 4 : 9
- Elément 5 : 8
Données de sortie
- 3 7 9 8
Corrigé
import java.util.Scanner;
public class Test {
public static void main(String[] variables) {
Scanner clavier = new Scanner(System.in);
int tab[];
int N, i, j, k;
// Saisir la taille actuelle du tableau */
System.out.print("Saisir le nombre d'éléments : ");
N = clavier.nextInt();
// intialiser la taille des tableaux avec N
tab = new int[N];
// Saisir les éléments du tableau source */
for (i = 0; i < N; i++) {
System.out.print("Elément " + (i + 1) + " : ");
tab[i] = clavier.nextInt();
}
/*
Rechercher des éléments en double dans le tableau
*/
for (i = 0; i < N; i++) {
for (j = i + 1; j < N; j++) {
// Si un doublon est trouvé */
if (tab[i] == tab[j]) {
// Supprimer l'élément en double actuel */
for (k = j; k < N - 1; k++) {
tab[k] = tab[k + 1];
}
// Décrémenter N après avoir supprimé l'élément en double */
N--;
// Si un décalage d'éléments se produit, n'incrémentez pas j */
j--;
}
}
}
/*
Afficher le tableau après avoir supprimé les éléments en double
*/
for (i = 0; i < N; i++) {
System.out.print(tab[i] + " , ");
}
// fermer les ressources
clavier.close();
}
}
#include <stdio.h>
#define TAILLE_MAX 1000 // La taille maximale
int main()
{
int tab[TAILLE_MAX];
int N;
int i, j, k;
/* Saisir la taille actuelle du tableau < TAILLE_MAX */
printf("Saisir le nombre d'éléments : ");
scanf("%d", &N);
/* Saisir les éléments du tableau tab */
for(i=0; i<N; i++)
{
printf("Elément %d", i+1);
scanf("%d", &tab[i]);
}
/*
* Rechercher des éléments en double dans le tableau
*/
for(i=0; i<N; i++)
{
for(j=i+1; j<N; j++)
{
/* Si un doublon est trouvé */
if(tab[i] == tab[j])
{
/* Supprimer l'élément en double actuel */
for(k=j; k<N-1; k++)
{
tab[k] = tab[k + 1];
}
/* Décrémenter N après avoir supprimé l'élément en double */
N--;
/* Si un décalage d'éléments se produit, n'incrémentez pas j */
j--;
}
}
}
/*
* Afficher le tableau après avoir supprimé les éléments en double
*/
for(i=0; i<N; i++)
{
printf("%d\t", tab[i]);
}
return 0;
}
# Saisir la taille actuelle du tableau
N = int(input("Saisir le nombre d'éléments : "))
# intialiser la taille des tableaux avec N
tab=[0]*(N)
# Saisir les éléments du tableau source
for i in range(N):
tab[i]=int(input("Saisir l'élement {0} : ".format(i+1)))
# Rechercher des éléments en double dans le tableau
for i in range(N):
for j in range(i+1,N):
# Si un doublon est trouvé */
if (tab[i] == tab[j]):
#Supprimer l'élément en double actuel */
for k in range(j,N-1):
tab[k] = tab[k + 1]
# Décrémenter N après avoir supprimé l'élément en double */
N-=1
# Si un décalage d'éléments se produit, n'incrémentez pas j */
j-=1
#Afficher le tableau après avoir supprimé les éléments en double
for i in range(N):
print(tab[i] ," , ")
Exercice 7
Créez un programme qui crée et initialise un tableau, puis inversez ce tableau sans utiliser un tableau supplémentaire.
- Saisir le nombre d'éléments : 5
- Elément 1 : 3
- Elément 2 : 7
- Elément 3 : 4
- Elément 4 : 9
- Elément 5 : 8
Données de sortie
- 8 9 4 7 3
Corrigé
import java.util.Scanner;
public class Test {
public static void main(String[] variables) {
Scanner clavier = new Scanner(System.in);
int tab[];
int N, i;
int indexAvant;
int indexArriere;
int temp; // pour échanger deux éléments
// Saisir la taille actuelle du tableau */
System.out.print("Saisir le nombre d'éléments : ");
N = clavier.nextInt();
// intialiser la taille des tableaux avec N
tab = new int[N];
// Saisir les éléments du tableau source */
for (i = 0; i < N; i++) {
System.out.print("Elément " + (i + 1) + " : ");
tab[i] = clavier.nextInt();
}
indexArriere = 0;
indexAvant = N - 1;
while (indexArriere < indexAvant) {
// inverser le dernier élément avec le premier élément */
temp = tab[indexArriere];
tab[indexArriere] = tab[indexAvant];
tab[indexAvant] = temp;
// incrémenter l'index du premier élément et décrémenter l'index du dernier
// élément
indexArriere++;
indexAvant--;
}
// Afficher le tableau inversé
for (i = 0; i < N; i++) {
System.out.print(tab[i] + " , ");
}
// fermer les ressources
clavier.close();
}
}
#include <stdio.h>
#define TAILLE_MAX 1000 // La taille maximale
int main()
{
int tab[TAILLE_MAX];
int N, i;
int indexAvant;
int indexArriere;
int temp; // pour échanger deux éléments
/* Saisir la taille actuelle du tableau < TAILLE_MAX */
printf("Saisir le nombre d'éléments : ");
scanf("%d", &N);
/* Saisir les éléments du tableau tab */
for(i=0; i<N; i++)
{
printf("Elément %d", i+1);
scanf("%d", &tab[i]);
}
indexArriere = 0;
indexAvant = N - 1;
while(indexArriere < indexAvant)
{
/* inverser le dernier élément avec le premier élément */
temp = tab[indexArriere];
tab[indexArriere] = tab[indexAvant];
tab[indexAvant] = temp;
// incrémenter l'index du premier élément et décrémenter l'index du dernier élément
indexArriere++;
indexAvant--;
}
// Afficher le tableau inversé
for(i=0; i<N; i++)
{
printf("%d\t", tab[i]);
}
return 0;
}
# Saisir la taille actuelle du tableau
N = int(input("Saisir le nombre d'éléments : "))
# intialiser la taille des tableaux avec N
tab=[0]*(N)
# Saisir les éléments du tableau source
for i in range(N):
tab[i]=int(input("Saisir l'élement {0} : ".format(i+1)))
indexArriere = 0
indexAvant = N - 1
while (indexArriere < indexAvant):
# inverser le dernier élément avec le premier élément */
temp = tab[indexArriere]
tab[indexArriere] = tab[indexAvant]
tab[indexAvant] = temp
# incrémenter l'index du premier élément et décrémenter l'index du dernier
# élément
indexArriere+=1
indexAvant-=1
#Afficher le tableau après avoir supprimé les éléments en double
for i in range(N):
print(tab[i] ,end= " , ")
