Correction TD4-2021

Télécharger au format pdf ou txt
Télécharger au format pdf ou txt
Vous êtes sur la page 1sur 18

Correction TD4

Les Tableaux, les structures conditionnelles et le tri des


éléments du tableau

Exercice 1
Algorithme ex1-P1
Const
M = 100
Variable
T : Tableau [1..M] d’Entier
T_min, i_min, i, N : Entier
Début
Répeter
Écrire("Donner la dimension N du Tableau T ")
Lire (N)
Jusqu’à (N <= M) ET (N > 0)
Pour i de 1 à N Faire
Écrire(" Donner l’élément T [," i , " ] = ")
Lire (T[i])
FinPour
T_min T[1]
i_min 1
Pour i de 2 à N Faire
Si T[i] <= T_min Alors
T_min T[i]
i_min i
FinSi
FinPour
Écrire("La plus petite valeur du tableau T= ", T_min, " est son indice = ", i_min)
Fin

Algorithme ex1-P2
Const
M = 100
Variable
T : Tableau [1..M] d’Entier
T_max, i_max, N,i : Entier
Début
Répeter
Écrire("Donner la dimension N du Tableau T ")
Lire (N)
Jusqu’à (N <= M) ET (N > 0)
Pour i de 1 à N Faire
Écrire(" Donner l’élément T [," i , " ] = ")
Lire (T[i])
FinPour
T_max T[1]
i_max 1
Pour i de 2 à N Faire
Si T[i] > T_min Alors
T_max T[i]
i_max i
FinSi
FinPour
Écrire("La plus petite valeur du tableau T= ", T_max, " est son indice = ", i_max)
Fin

Algorithme ex1_P3
Const
M = 100
Variable
T : Tableau [1..M] d’Entier
nb_T_nul, N,i : Entier
Début
Répeter
Écrire("Donner la dimension N du Tableau T ")
Lire (N)
Jusqu’à (N <= M) ET (N > 0)
Pour i de 1 à N Faire
Écrire(" Donner l’élément T [," i , " ] = ")
Lire (T[i])
Si T[i] = 0 Alors
nb_T_nul nb_T_nul + 1
FinSi
FinPour
Écrire("Le nombre d’éléments nul du tableau T= ", nb_T_nul)
Fin

Algorithme ex1_P4
Const
M = 100
Variable
T : Tableau [1..M] d’Entier
N,i : Entier
T_moy :Réel
Début
Répeter
Écrire("Donner la dimension N du Tableau T ")
Lire (N)
Jusqu’à (N <= M) ET (N > 0)
Pour i de 1 à N Faire
Écrire(" Donner l’élément T [," i , " ] = ")
Lire (T[i])
T_moyT_moy + T[i]
FinPour
T_moy T_moy / N
Écrire("La moyenne des éléments du tableau T= ", T_moy)
Fin

Exercie 2
Algorithme ex2_P1
Variable
A : Tableau [1..120] de Réel
B : Tableau [1..50] de Réel
i, N, M : Entier
Début
Répeter
Écrire("Donner la dimension N du Tableau B ")
Lire (N)
Jusqu’à (N <= 50) ET (N > 0)
Pour i de 1 à N Faire
Écrire(" Donner l’élément B[," i , " ] = ")
Lire (B[i])
FinPour
Répeter
Écrire("Donner la dimension M du Tableau A ")
Lire (M)
Jusqu’à (M <= 70) ET (M > 0)
Pour i de 1 à M Faire
Écrire(" Donner l’élément A[," i , " ] = ")
Lire (A[i])
FinPour
Pour i de 1 à N Faire
A[M+i] B[i]
FinPour
Fin

Algorithme ex2_P2
Variable
A : Tableau [1..120] de Réel
B : Tableau [1..50] de Réel
j, i, N, M : Entier
Début.
Répeter
Écrire("Donner la dimension N du Tableau B ")
Lire (N)
Jusqu’à (N <= 50) ET (N > 0)
Pour i de 1 à N Faire
Écrire(" Donner l’élément B[," i , " ] = ")
Lire (B[i])
FinPour
Répeter
Écrire("Donner la dimension M du Tableau A ")
Lire (M)
Jusqu’à (M <= 70) ET (M > 0)
Pour i de 1 à M Faire
Écrire(" Donner l’élément A[," i , " ] = ")
Lire (A[i])
FinPour
i M
j 1
TantQue j <= N Faire
Si B[j] >= 0 Alors
i i+1
A[i] B[j]
FinSi
j j+1
FinTantQue
Fin

Algorithme ex2_P3
Variable
A : Tableau [1..120] de Réel
B : Tableau [1..50] de Réel
i, N, M : Entier
Début.
Répeter
Écrire("Donner la dimension N du Tableau B ")
Lire (N)
Jusqu’à (N <= 50) ET (N > 0)
Pour i de 1 à N Faire
Écrire(" Donner l’élément B[," i , " ] = ")
Lire (B[i])
FinPour
Répeter
Écrire("Donner la dimension M du Tableau A ")
Lire (M)
Jusqu’à (M <= 70) ET (M > 0)
Pour i de 1 à M Faire
Écrire(" Donner l’élément A[," i , " ] = ")
Lire (A[i])
FinPour
Pour i de 2 à N pas 2 Faire
A[M+ (i div 2) ] B[i]
FinPour
Fin

Exercie 3
#include <stdio.h>

main()

/* Déclarations */
int T[50]; /* tableau donné */

int N; /* dimension */

int I,J; /* indices courants */

int AIDE; /* pour l'échange */

/* Saisie des données */

printf("Dimension du tableau (max.50) : ");

scanf("%d", &N );

for (I=0; I<N; I++)

printf("Elément %d : ", I);

scanf("%d", &T[I]);

/* Affichage du tableau */

printf("Tableau donné : \n");

for (I=0; I<N; I++)

printf("%d ", T[I]);

printf("\n");
/* Inverser le tableau */

for (I=0, J=N-1 ; I<J ; I++,J--)

/* Echange de T[I] et T[J] */

AIDE = T[I];

T[I] = T[J];

T[J] = AIDE;

/* Edition des résultats */

printf("Tableau résultat :\n");

for (I=0; I<N; I++)

printf("%d ", T[I]);

printf("\n");

return 0;
}

Exercice 4
Explication de l’idée
• Vérifier si T est symétrique :
– Rappel, T est symétrique si T(i,j) = T(j,i) pour tout i et j
• Idée: D’abord supposer que T est symétrique avec S = 1
• Ensuite, comparer chaque case T(i,j) avec la case T(j,i).
– Si elles sont différentes alors affecter la valeur 0 à S
•A la fin, il suffit de voir la valeur de S pour savoir si le tableau est symétrique ou pas

Solution (cas de symétrie dans un tableau multidimensionnel)

Exercice 5
Variables Nb, i : Entier

Variable Flag : Booleen


Tableau T[] :Entier

Debut

Ecrire ("Entrez le nombre de valeurs :")

Lire (Nb)

Pour i de 0 à Nb - 1

Ecrire ("Entrez le nombre n° ")

Lire T[i]

Fin pour

Flag ← Vrai

Pour i de 1 à Nb - 1

Si (T[i] <> T[i +1]) Alors

Flag ← Faux

FinSi

Fin pour

Si Flag Alors

Ecrire ("Les nombres sont consécutifs")

Sinon

Ecrire ("Les nombres ne sont pas consécutifs")

FinSi

Fin

Exercice 6
*Ecrire un algorithme permettant de trier par ordre croissant les éléments d’un tableau.

lgorithme tri_Croissant;
Var
T : tableau [1..100] de réels ;
N ,i,j: entiers ;
Aux: réel ;
Debut
Si N=0 alors
Ecrire(‘le tableau est vide ‘) ;
Sinon
Pour i <-- 1 à N-1 Faire
Pour j <-- i+1 à N Faire
Si T[i] > T[j] alors
Aux <-- T[i] ;
T[i] <-- T[j] ;
T[j] <-- Aux ;
Finsi
Finpour j
Finpour i
Finsi
Fin

*Ecrire un algorithme permettant de trier par ordre décroissant les éléments d’un tableau.

Algorithme tri_Décroissant;
Var
T : tableau [1..100] de réels ;
N ,i,j: entiers ;
Aux: réel ;
Debut
Si N=0 alors
Ecrire(‘le tableau est vide ‘) ;
Sinon
Pour i <-- 1 à N-1 Faire
Pour j <-- i+1 à N Faire
Si T[i] < T[j] alors
Aux <-- T[i] ;
T[i] <-- T[j] ;
T[j] <-- Aux ;
Finsi
Finpour j
Finpour i
Finsi
Fin

 Solution algorithmique de l’exercice (sans trie + fusion)

https://waytolearnx.com/2019/08/fusionner-deux-tableaux-en-c.html

 Solution algorithmique de l’exercice (avec trie des éléments du Tableau


+ fusion)
Explication de l’exercice corrige

Utiliser trois indices IA, IB et IFUS. Comparer A[IA] et B[IB]; remplacer FUS[IFUS]
par le plus petit des deux éléments; avancer dans le tableau FUS et dans le
tableau qui a contribué son élément. Lorsque l’un des deux tableaux A ou B est
épuisé, il suffit de recopier les éléments restants de l’autre tableau dans le
tableau FUS.
#include <stdio.h>
main()
{
/* Déclarations */
/* Les tableaux et leurs dimensions */
int A[50], B[50], FUS[100];
int N, M;
int IA, IB, IFUS; /* indices courants */
/* Saisie des données */
printf("Dimension du tableau A (max.50) : ");
scanf("%d", &N );
printf("Entrer les éléments de A dans l'ordre croissant :\n");
for (IA=0; IA<N; IA++)
{
printf("Elément A[%d] : ", IA);
scanf("%d", &A[IA]);
}
printf("Dimension du tableau B (max.50) : ");
scanf("%d", &M );
printf("Entrer les éléments de B dans l'ordre croissant :\n");
for (IB=0; IB<M; IB++)
{
printf("Elément B[%d] : ", IB);
scanf("%d", &B[IB]);
}
/* Affichage des tableaux A et B */
printf("Tableau A :\n");
for (IA=0; IA<N; IA++)
printf("%d ", A[IA]);
printf("\n");
printf("Tableau B :\n");
for (IB=0; IB<M; IB++)
printf("%d ", B[IB]);
printf("\n");

/* Fusion des éléments de A et B dans FUS */


/* de façon à ce que FUS soit aussi trié. */
IA=0; IB=0; IFUS=0;
while ((IA<N) && (IB<M))
if(A[IA]<B[IB])
{
FUS[IFUS]=A[IA];
IFUS++;
IA++;
}
else
{
FUS[IFUS]=B[IB];
IFUS++;
IB++;
}
/* Si IA ou IB sont arrivés à la fin de leur tableau, */
/* alors copier le reste de l'autre tableau. */
while (IA<N)
{
FUS[IFUS]=A[IA];
IFUS++;
IA++;
}
while (IB<M)
{
FUS[IFUS]=B[IB];
IFUS++;
IB++;
}

/* Affichage du résultat FINAL*/


printf("Tableau FUS :\n");
for (IFUS=0; IFUS<N+M; IFUS++)
printf("%d ", FUS[IFUS]);
printf("\n");
return 0;
}

Exercice 7
1. #include<stdio.h>

2. #include<stdlib.h>

3. int main()

4. {

5. int t[100];

6. int i,j,n,a;

7. printf("Donnez le nombre des elements du tableau:\n");

8. scanf("%d",&n);

9. for(i=0;i<n;i++)

10. {

11. printf("Donnez l'element %d:\t",i+1);

12. scanf("%d",&t[i]);

13. }

14. for(i=0;i<n;i++)

15. printf("%d ",t[i]);

16. printf("\n");

17. printf("Donnez l'element a supprimer du tableau:\n");

18. scanf("%d",&a);

19. for(i=0;i<n;i++)

20. {

21. if(t[i]==a)

22. {

23. for(j=i;j<n-1;j++)

24. t[j]=t[j+1];

25. n--;

26. i--;

27. }
28. }

29. for(i=0;i<n;i++)

30. printf("%d ",t[i]);

31. printf("\n");

32. system("pause");

33. return 0;

34. }

Exercice 8
• #include <stdio.h>

• int main()

• {

• int n;

• int T[100];

• int i, insertVal, pos;

• do

• {

• printf("Combien de valeur à saisir dans le tableau ? : ");

• scanf("%d",&n);

• }while(n <= 0 || n > 100);

• //remplissage du tableau

• printf("\nDonnez un tableau de %d case :\n", n);

• for(i=0; i<n; i++)

• {

• printf("\tT[%d] = ",i + 1);

• scanf("%d",&T[i]);

• }

• printf("\n=> Tableau avant insertion : ");

• for(i=0; i<n ; i++)


• printf("%d|", T[i]);

• printf("\n\nDonner l'entier à inserrer :");

• scanf("%d",&insertVal);

• do

• {

• printf("\nEntrez la position d'insertion <= %d : ", n+1);

• scanf("%d",&pos);

• }while(pos < 0 || pos > n+1);

• //décalage d'une position à droite pour libérer la case d'indice pos-1 pur l'insertion

• for (i = n; i >= pos; i--)

• T[i] = T[i-1];

• T[pos-1] = insertVal; //inserer

• n++; // incrementer le nombre d'élément de 1

• //Affichage du tableau

• printf("\n=> Tableau après insertion : ");

• for(i=0; i<n ; i++)

• printf("%d|", T[i]);

• }

Exercice 9
Q1
#include <stdio.h>

int main()

// Déclarations

int M1[100][100];

int M2[100][100];
int M3[100][100];

int N, M, P;

int i, j, k;

/* Saisie des données */

puts("*** Matrice M1 ***\n");

do

printf("Nombre de lignes de M1 (max.100) : ");

scanf("%d", &N );

}while(N<=0 || N>100);

do

printf("Nombre de colonnes de M1 (max.100) : ");

scanf("%d", &M );

}while(M<=0 || M>100);

for (i=0; i<N; i++)

printf("\n=> Ligne numero %d \n", i+1);

for (j=0; j<M; j++)

printf("\tElément[%d][%d] : ",i+1,j+1);

scanf("%d", &M1[i][j]);

puts("\n*** Matrice M2 ***\n");

printf("Nombre de lignes de M2 : %d\n", M); //doivent avoir le même nombre de ligne


do

printf("Nombre de colonnes de M2 (max.100) : ");

scanf("%d", &P );

}while(P<=0 || P>100);

for (i=0; i<M; i++)

printf("\n=> Ligne numero %d \n", i+1);

for (j=0; j<P; j++)

printf("\tElément[%d][%d] : ",i+1,j+1);

scanf("%d", &M2[i][j]);

/* Affichage des matrices */

puts("\nMatrice M1 :\n");

for (i=0; i<N; i++)

for (j=0; j<M; j++)

printf("%5d", M1[i][j]);

printf("\n");

puts("\nMatrice M2 :\n");

for (i=0; i<M; i++)

for (j=0; j<P; j++)

printf("%5d", M2[i][j]);

printf("\n");

/* Affectation du résultat de la multiplication à M3 */


for (i=0; i<N; i++)

for (j=0; j<P; j++)

M3[i][j]=0;

for (k=0; k<M; k++)

M3[i][j] += M1[i][k]*M2[k][j]; //la somme des produits des element de la même ligne

/* Edition du résultat */

puts("\nMatrice résultat M3 :\n");

for (i=0; i<N; i++)

for (j=0; j<P; j++)

printf("%5d", M3[i][j]);

printf("\n");

Q2.
#include <stdio.h>

int main()

// Déclarations

int M1[100][100];

int M2[100][100];

int N;

int i, j, k;

/* Saisie des données */

puts("*** Matrice carré ***\n");

do

{
printf("Nombre de lignes/colonne (max.100) : ");

scanf("%d", &N );

}while(N<=0 || N>100);

for (i=0; i<N; i++)

printf("\n=> Ligne numero %d \n", i+1);

for (j=0; j<N; j++)

printf("\tElément[%d][%d] : ",i+1,j+1);

scanf("%d", &M1[i][j]);

for (i=0; i<N; i++)

for (j=0; j<N; j++)

M2[i][j] = M1[j][i];

/* Affichage des matrices */

puts("\nMatrice initiale :\n");

for (i=0; i<N; i++)

for (j=0; j<N; j++)

printf("%5d", M1[i][j]);

printf("\n");

puts("\nMatrice résultat :\n");

for (i=0; i<N; i++)

for (j=0; j<N; j++)


printf("%5d", M2[i][j]);

printf("\n");

Q3
#include <stdio.h>

int main()

// Déclarations

int M[50][50];

int T[2500];

int n, m;

int i, j, k;

// Saisie des données

puts("*** Matrice ***\n");

do

printf("Nombre de lignes (max.50) : ");

scanf("%d", &n );

}while(n<=0 || n>50);

do

printf("Nombre de colonne (max.50) : ");

scanf("%d", &m );

}while(m<=0 || m>50);

for (i=0; i<n; i++)

{
printf("\n=> Ligne numero %d \n", i+1);

for (j=0; j<m; j++)

printf("\tElément[%d][%d] : ",i+1,j+1);

scanf("%d", &M[i][j]);

//remplissage du tableau

k = 0;

for (i=0; i<n; i++)

for (j=0; j<m; j++)

T[k] = M[i][j];

k++;

//Affichage du tableau

puts("\nTableau résultat : ")

for (i=0; i<k; i++)

printf("%d |", T[i]);

Pour d’autre solution algorithmique, veillez consulter le lien suivant :


https://www.examanet.net/universite-de-tunis-el-manar/fseg-tunis/133-
exercices-corriges-en-algorithmique-les-tableaux

Vous aimerez peut-être aussi