Solution TP 6
Exercice 1
a) La matrice transposée sera mémorisée dans une deuxième matrice B qui sera ensuite
affichée.
#include <stdio.h>
#include <conio.h>
main()
{
/* Déclarations */
int A[50][50]; /* matrice initiale */
int B[50][50]; /* 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");
}
getch();
}
exosup.com page facebook
b) La matrice A sera transposée par permutation des éléments.
#include
main()
{
/* Déclarations */
int A[50][50]; /* 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");
}
getch();
}
exosup.com page facebook
Exercice 2
a) Le résultat de l'addition sera mémorisé dans une troisième matrice C qui sera ensuite
affichée.
#include
main()
{
/* Déclarations */
int A[50][50]; /* matrice donnée */
int B[50][50]; /* matrice donnée */
int C[50][50]; /* 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");
exosup.com page facebook
}
getch();
}
b) La matrice B est ajoutée à A.
#include
main()
{
/* Déclarations */
int A[50][50]; /* matrice donnée et résultat */
int B[50][50]; /* 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++)
exosup.com page facebook
printf("%7d", A[I][J]);
printf("\n");
}
getch();
}
Exercice 3
main()
{
/* Déclarations */
int A[50][50]; /* matrice donnée */
int B[50][50]; /* matrice donnée */
int C[50][50]; /* 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");
}
exosup.com page facebook
/* 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");
}
getch();
}
Exercice 4
#include
main()
{
/* Déclarations */
int P[14][14]; /* 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][0]=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");
}
getch();
}
exosup.com page facebook
Exercice 5
/ 1 si A[i,j] est un Maximum
MAX[i,j]= | sur la ligne i
\ 0 sinon
/ 1 si A[i,j] est un Minimum
MIN[i,j] = | sur la colonne j
\ 0 sinon
main()
{
/* Déclarations */
int A[50][50]; /* matrice donnée */
int MAX[50][50];/* matrice indiquant les maxima des lignes */
int MIN[50][50];/* matrice indiquant les minima des colonnes */
int N, M; /* dimensions des matrices */
int I, J; /* indices courants */
int AIDE; /* pour la détection des extréma */
int C; /* compteur des points-cols */
/* 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");
}
/* Construction de la matrice d'aide MAX */
/* qui indique les positions de tous les */
/* maxima sur une ligne. */
for (I=0; I<N; I++)
{
/* Recherche du maximum sur la ligne I */
AIDE=A[I][0];
for (J=1; J<M; J++)
if (A[I][J]>AIDE) AIDE=A[I][J];
/* Marquage de tous les maxima sur la ligne */
for (J=0; J<M; J++)
if (A[I][J]==AIDE) MAX[I][J]=1;
else MAX[I][J]=0;
}
/* Construction de la matrice d'aide MIN */
/* qui indique les positions de tous les */
/* minima sur une colonne. */
exosup.com page facebook
for (J=0; J<M; J++)
{
/* Recherche du minimum sur la colonne J */
AIDE=A[0][J];
for (I=1; I<N; I++)
if (A[I][J]<AIDE) AIDE=A[I][J];
/* Marquage de tous les minima sur la colonne J */
for (I=0; I<N; I++)
if (A[I][J]==AIDE) MIN[I][J]=1;
else MIN[I][J]=0;
}
/* Edition du résultat */
/* Les composantes qui sont marquées comme extréma */
/* dans MAX et dans MIN sont des points-cols. */
printf("Points - cols :\n");
for (C=0, I=0; I<N; I++)
for (J=0; J<M; J++)
if (MAX[I][J]&&MIN[I][J])
{
C++;
printf("L'élément %d\t est un maximum sur la ligne %d\n \t et
un minimum sur la colonne %d\n", A[I][J], I, J);
}
if (C==0)
printf("Le tableau ne contient pas de points-cols.\n");
getch();
}
exosup.com page facebook