TD Tableaux à deux dimensions - Matrices Langage C

Discussion in 'TD LANGAGE C' started by abdelouafi, Feb 6, 2018.

Cours en arabe Tableaux 2 dimensions langage c:

TD Tableaux à deux dimensions - Matrices Langage C:

Exercice 1:
Ecrire un programme qui met à zéro les éléments de la diagonale principale d'une matrice carrée A donnée.

Exercice 2:
Ecrire un programme qui construit et affiche une matrice carrée unitaire U de dimension N. Une matrice unitaire est une matrice, telle que:

uij = 1 si i=j , et uij = 0 si ij

Exercice 3 Transposition d'une matrice

Ecrire un programme qui effectue la transposition tA d'une matrice A de dimensions N et M en une matrice de dimensions M et N.

a) La matrice transposée sera mémorisée dans une deuxième matrice B qui sera ensuite affichée.

b) La matrice A sera transposée par permutation des éléments.

Rappel: Exercice 4 Multiplication d'une matrice par un réel

Ecrire un programme qui réalise la multiplication d'une matrice A par un réel X.

Rappel: Exercice 5: Addition de deux matrices

Ecrire un programme qui réalise l'addition de deux matrices A et B de mêmes dimensions N et M.

Rappel: a) Le résultat de l'addition sera mémorisé dans une troisième matrice C qui sera ensuite affichée.
b) La matrice B est ajoutée à A.

Exercice 6: Multiplication de deux matrices

En multipliant une matrice A de dimensions N et M avec une matrice B de dimensions M et P on obtient une matrice C de dimensions N et P:

A(N,M) * B(M,P) = C(N,P)

La multiplication de deux matrices se fait en multipliant les composantes des deux matrices lignes par colonnes: Rappel: Exercice 7: Triangle de Pascal

Ecrire un programme qui construit le triangle de PASCAL de degré N et le mémorise dans une matrice carrée P de dimension N+1.

Exemple: Triangle de Pascal de degré 6: Méthode:

Construire le triangle ligne par ligne:

- Initialiser le premier élément et l'élément de la diagonale à 1.

- Calculer les valeurs entre les éléments initialisés de gauche à droite en utilisant la relation:

Pi,j = Pi-1,j + Pi-1,j-1

Last edited: Mar 1, 2018
Exercice 1:

Code:
```#include <stdio.h>
main()
{
/* Déclarations */
int A; /* matrice carrée   */
int N;         /* dimension de la matrice carrée */
int I, J;      /* indices courants */

/* Saisie des données */
printf("Dimension de la matrice carrée (max.50) : ");
scanf("%d", &N);
for (I=0; I<N; I++)
for (J=0; J<N; J++)
{
printf("Elément[%d][%d] : ",I,J);
scanf("%d", &A[I][J]);
}
/* Affichage de la matrice */
printf("Matrice donnée :\n");
for (I=0; I<N; I++)
{
for (J=0; J<N; J++)
printf("%7d", A[I][J]);
printf("\n");
}

/* Mise à zéro de la diagonale principale */
for (I=0; I<N; I++)
A[I][I]=0;
/* Edition du résultat */
printf("Matrice résultat :\n");
for (I=0; I<N; I++)
{
for (J=0; J<N; J++)
printf("%7d", A[I][J]);
printf("\n");
}
return 0;
}```

Exercice 2:

Code:
```#include <stdio.h>
main()
{
/* Déclarations */
int U; /* matrice unitaire */
int N;         /* dimension de la matrice unitaire */
int I, J;      /* indices courants */

/* Saisie des données */
printf("Dimension de la matrice carrée (max.50) : ");
scanf("%d", &N);

/* Construction de la matrice carrée unitaire */
for (I=0; I<N; I++)
for (J=0; J<N; J++)
if (I==J)
U[I][J]=1;
else
U[I][J]=0;
/* Edition du résultat */
printf("Matrice unitaire de dimension %d :\n", N);
for (I=0; I<N; I++)
{
for (J=0; J<N; J++)
printf("%7d", U[I][J]);
printf("\n");
}
return 0;
}```

Exercice 3: Transposition d'une matrice

Code:
```a)    La matrice transposée sera mémorisée dans une deuxième matrice B qui sera ensuite affichée.

#include <stdio.h>
main()
{
/* Déclarations */
int A;  /* matrice initiale */
int B;  /* matrice résultat */
int N, M;       /* dimensions des matrices */
int I, J;       /* indices courants */

/* Saisie des données */
printf("Nombre de lignes   (max.50) : ");
scanf("%d", &N );
printf("Nombre de colonnes (max.50) : ");
scanf("%d", &M );
for (I=0; I<N; I++)
for (J=0; J<M; J++)
{
printf("Elément[%d][%d] : ",I,J);
scanf("%d", &A[I][J]);
}
/* Affichage de la matrice */
printf("Matrice donnée :\n");
for (I=0; I<N; I++)
{
for (J=0; J<M; J++)
printf("%7d", A[I][J]);
printf("\n");
}
/* Affectation de la matrice transposée à B */
for (I=0; I<N; I++)
for (J=0; J<M; J++)
B[J][I]=A[I][J];
/* Edition du résultat */
/* Attention: maintenant le rôle de N et M est inversé. */
printf("Matrice résultat :\n");
for (I=0; I<M; I++)
{
for (J=0; J<N; J++)
printf("%7d", B[I][J]);
printf("\n");
}
return 0;
}
b)    La matrice A sera transposée par permutation des éléments.

#include <stdio.h>
main()
{
/* Déclarations */
int A;  /* matrice donnée           */
int N, M;       /* dimensions de la matrice */
int I, J;       /* indices courants         */
int AIDE;       /* pour la permutation      */
int DMAX;       /* la plus grande des deux dimensions */

/* Saisie des données */
printf("Nombre de lignes   (max.50) : ");
scanf("%d", &N );
printf("Nombre de colonnes (max.50) : ");
scanf("%d", &M );
for (I=0; I<N; I++)
for (J=0; J<M; J++)
{
printf("Elément[%d][%d] : ",I,J);
scanf("%d", &A[I][J]);
}
/* Affichage de la matrice */
printf("Matrice donnée :\n");
for (I=0; I<N; I++)
{
for (J=0; J<M; J++)
printf("%7d", A[I][J]);
printf("\n");
}
/* Transposition de la matrice A par permutation des   */
/* éléments [I][J] à gauche de la diagonale principale */
/* avec les éléments [J][I] à droite de la diagonale.  */
DMAX = (N>M) ? N : M;
for (I=0; I<DMAX; I++)
for (J=0; J<I; J++)
{
AIDE = A[I][J];
A[I][J] = A[J][I];
A[J][I] = AIDE;
}
/* Edition du résultat */
/* Attention: maintenant le rôle de N et M est inversé. */
printf("Matrice résultat :\n");
for (I=0; I<M; I++)
{
for (J=0; J<N; J++)
printf("%7d", A[I][J]);
printf("\n");
}
return 0;
}```

Exercice 4: Multiplication d'une matrice par un réel

a) Le résultat de la multiplication sera mémorisé dans une deuxième matrice A qui sera ensuite affichée.

#include <stdio.h>
main()
{
/* Déclarations */
float A; /* matrice donnée */
float B; /* matrice résultat */
int N, M; /* dimensions des matrices */
int I, J; /* indices courants */
float X; /* multiplicateur */
/* Saisie des données */
printf("Nombre de lignes (max.50) : ");
scanf("%d", &N );
printf("Nombre de colonnes (max.50) : ");
scanf("%d", &M );
for (I=0; I<N; I++)
for (J=0; J<M; J++)
{
printf("Elément[%d][%d] : ",I,J);
scanf("%f", &A[J]);
}
printf("Multiplicateur X : ");
scanf("%f", &X );
/* Affichage de la matrice */
printf("Matrice donnée :\n");
for (I=0; I<N; I++)
{
for (J=0; J<M; J++)
printf("%10.2f", A[J]);
printf("\n");
}
/* Affectation du résultat de la multiplication à B */
for (I=0; I<N; I++)
for (J=0; J<M; J++)
B[J] = X*A[J];

/* Edition du résultat */
printf("Matrice résultat :\n");
for (I=0; I<N; I++)
{
for (J=0; J<M; J++)
printf("%10.2f", B[J]);
printf("\n");
}
return 0;
}
b) Les éléments de la matrice A seront multipliés par X.

#include <stdio.h>
main()
{
/* Déclarations */
float A; /* matrice donnée */
int N, M; /* dimensions de la matrice */
int I, J; /* indices courants */
float X; /* multiplicateur */

/* Saisie des données */
printf("Nombre de lignes (max.50) : ");
scanf("%d", &N );
printf("Nombre de colonnes (max.50) : ");
scanf("%d", &M );
for (I=0; I<N; I++)
for (J=0; J<M; J++)
{
printf("Elément[%d][%d] : ",I,J);
scanf("%f", &A[J]);
}
printf("Multiplicateur X : ");
scanf("%f", &X);
/* Affichage de la matrice */
printf("Matrice donnée :\n");
for (I=0; I<N; I++)
{
for (J=0; J<M; J++)
printf("%10.2f", A[J]);
printf("\n");
}
/* Multiplication des éléments de A par X */
for (I=0; I<N; I++)
for (J=0; J<M; J++)
A[J] *= X;

/* Edition du résultat */
printf("Matrice résultat :\n");
for (I=0; I<N; I++)
{
for (J=0; J<M; J++)
printf("%10.2f", A[J]);
printf("\n");
}
return 0;
}

Exercice 5: Addition de deux matrices

Code:
```a)    Le résultat de l'addition sera mémorisé dans une troisième matrice C qui sera ensuite affichée.

#include <stdio.h>
main()
{
/* Déclarations */
int A; /* matrice donnée   */
int B; /* matrice donnée   */
int C; /* matrice résultat */
int N, M;      /* dimensions des matrices */
int I, J;      /* indices courants */

/* Saisie des données */
printf("Nombre de lignes   (max.50) : ");
scanf("%d", &N );
printf("Nombre de colonnes (max.50) : ");
scanf("%d", &M );
printf("*** Matrice A ***\n");
for (I=0; I<N; I++)
for (J=0; J<M; J++)
{
printf("Elément[%d][%d] : ",I,J);
scanf("%d", &A[I][J]);
}
printf("*** Matrice B ***\n");
for (I=0; I<N; I++)
for (J=0; J<M; J++)
{
printf("Elément[%d][%d] : ",I,J);
scanf("%d", &B[I][J]);
}
/* Affichage des matrices */
printf("Matrice donnée A :\n");
for (I=0; I<N; I++)
{
for (J=0; J<M; J++)
printf("%7d", A[I][J]);
printf("\n");
}
printf("Matrice donnée B :\n");
for (I=0; I<N; I++)
{
for (J=0; J<M; J++)
printf("%7d", B[I][J]);
printf("\n");
}

/* Affectation du résultat de l'addition à C */
for (I=0; I<N; I++)
for (J=0; J<M; J++)
C[I][J] = A[I][J]+B[I][J];
/* Edition du résultat */
printf("Matrice résultat C :\n");
for (I=0; I<N; I++)
{
for (J=0; J<M; J++)
printf("%7d", C[I][J]);
printf("\n");
}
return 0;
}
b) La matrice B est ajoutée à A.

#include <stdio.h>
main()
{
/* Déclarations */
int A; /* matrice donnée et résultat */
int B; /* matrice donnée   */
int N, M;      /* dimensions des matrices */
int I, J;      /* indices courants */

/* Saisie des données */
printf("Nombre de lignes   (max.50) : ");
scanf("%d", &N );
printf("Nombre de colonnes (max.50) : ");
scanf("%d", &M );
printf("*** Matrice A ***\n");
for (I=0; I<N; I++)
for (J=0; J<M; J++)
{
printf("Elément[%d][%d] : ",I,J);
scanf("%d", &A[I][J]);
}
printf("*** Matrice B ***\n");
for (I=0; I<N; I++)
for (J=0; J<M; J++)
{
printf("Elément[%d][%d] : ",I,J);
scanf("%d", &B[I][J]);
}
/* Affichage des matrices */
printf("Matrice donnée A :\n");
for (I=0; I<N; I++)
{
for (J=0; J<M; J++)
printf("%7d", A[I][J]);
printf("\n");
}

printf("Matrice donnée B :\n");
for (I=0; I<N; I++)
{
for (J=0; J<M; J++)
printf("%7d", B[I][J]);
printf("\n");
}
/* Addition de B à A */
for (I=0; I<N; I++)
for (J=0; J<M; J++)
A[I][J] += B[I][J];
/* Edition du résultat */
printf("Matrice résultat A :\n");
for (I=0; I<N; I++)
{
for (J=0; J<M; J++)
printf("%7d", A[I][J]);
printf("\n");
}
return 0;
}```

Exerccie 6: Multiplication de deux matrices

Code:
```#include <stdio.h>
main()
{
/* Déclarations */
int A; /* matrice donnée   */
int B; /* matrice donnée   */
int C; /* matrice résultat */
int N, M, P;   /* dimensions des matrices */
int I, J, K;   /* indices courants */

/* Saisie des données */
printf("*** Matrice A ***\n");
printf("Nombre de lignes de   A (max.50) : ");
scanf("%d", &N );
printf("Nombre de colonnes de A (max.50) : ");
scanf("%d", &M );
for (I=0; I<N; I++)
for (J=0; J<M; J++)
{
printf("Elément[%d][%d] : ",I,J);
scanf("%d", &A[I][J]);
}
printf("*** Matrice B ***\n");
printf("Nombre de lignes de   B : %d\n", M);
printf("Nombre de colonnes de B (max.50) : ");
scanf("%d", &P );
for (I=0; I<M; I++)
for (J=0; J<P; J++)
{
printf("Elément[%d][%d] : ",I,J);
scanf("%d", &B[I][J]);
}
/* Affichage des matrices */
printf("Matrice donnée A :\n");
for (I=0; I<N; I++)
{
for (J=0; J<M; J++)
printf("%7d", A[I][J]);
printf("\n");
}
printf("Matrice donnée B :\n");
for (I=0; I<M; I++)
{
for (J=0; J<P; J++)
printf("%7d", B[I][J]);
printf("\n");
}
/* Affectation du résultat de la multiplication à C */
for (I=0; I<N; I++)
for (J=0; J<P; J++)
{
C[I][J]=0;
for (K=0; K<M; K++)
C[I][J] += A[I][K]*B[K][J];
}
/* Edition du résultat */
printf("Matrice résultat C :\n");
for (I=0; I<N; I++)
{
for (J=0; J<P; J++)
printf("%7d", C[I][J]);
printf("\n");
}
return 0;
}```

Exercice 7: Triangle de Pascal

Code:
```#include <stdio.h>
main()
{
/* Déclarations */
int P; /* matrice résultat  */
int N;         /* degré du triangle */
int I, J;      /* indices courants  */
/* Saisie des données */
do {
printf("Entrez le degré N du triangle (max.13) : ");
scanf("%d", &N);
} while (N>13||N<0);
/* Construction des lignes 0 à N du triangle: */
/* Calcul des composantes du triangle jusqu'à */
/* la diagonale principale. */
for (I=0; I<=N; I++)
{
P[I][I]=1;
P[I]=1;
for (J=1; J<I; J++)
P[I][J] = P[I-1][J] + P[I-1][J-1];
}
/* Edition du résultat */
printf("Triangle de Pascal de degré %d :\n", N);
for (I=0; I<=N; I++)
{
printf(" N=%2d", I);
for (J=0; J<=I; J++)
if (P[I][J])
printf("%5d", P[I][J]);
printf("\n");
}
return 0;
}```