Exercices langage C : fonctions sur tableau à deux dimensions

Exercice 1

a) Ecrire la fonction LIRE_DIM à quatre paramètres L, LMAX, C, CMAX qui lit les dimensions L et C d'une matrice à deux dimensions. Les dimensions L et C doivent être inférieures à LMAX respectivement CMAX.

b) Ecrire la fonction LIRE_MATRICE à quatre paramètres MAT, L, C, et CMAX qui lit les composantes d'une matrice MAT du type int et de dimensions L et C.

Implémenter les fonctions en choisissant bien le type des paramètres et utiliser un dialogue semblable à celui de LIRE_TAB.

Exercice 2

Ecrire la fonction ECRIRE_MATRICE à quatre paramètres MAT, L, C et CMAX qui affiche les composantes de la matrice de dimensions L et C.

Exercice 3

Ecrire la fonction SOMME_MATRICE du type long qui calcule la somme des éléments d'une matrice MAT du type int. Choisir les paramètres nécessaires. Ecrire un petit programme qui teste la fonction SOMME_MATRICE.

Exercice 4

Ecrire la fonction ADDITION_MATRICE qui effectue l'addition des matrices suivante:

MAT1 = MAT1 + MAT2

Choisir les paramètres nécessaires et écrire un petit programme qui teste la fonction ADDITION_MATRICE.

Exercice 5

Ecrire la fonction MULTI_MATRICE qui effectue la multiplication de la matrice MAT1 par un entier X:

MAT1 = X * MAT1

Choisir les paramètres nécessaires et écrire un petit programme qui teste la fonction MULTI_MATRICE.

Exercice 6

Ecrire la fonction TRANSPO_MATRICE à cinq paramètres MAT, L, LMAX, C, CMAX qui effectue la transposition de la matrice MAT en utilisant la fonction PERMUTER. TRANSPO_MATRICE retourne une valeur logique qui indique si les dimensions de la matrice sont telles que la transposition a pu être effectuée. Ecrire un petit programme qui teste la fonction TRANSPO_MATRICE.

Exercice 7

Ecrire la fonction MULTI_2_MATRICES qui effectue la multiplication de deux matrices MAT1 (dimensions N et M) et MAT2 (dimensions M et P) en une troisième matrice MAT3 (dimensions N et P):

MAT3 = MAT1 * MAT2

Supposez que les dimensions maximales des trois matrices soient toutes égales à 30 lignes et 30 colonnes. Ecrire un petit programme qui teste la fonction MULTI_2_MATRICES. (Méthode de calcul: voir exercice 7.22.)

void LIRE_DIM (int *L, int LMAX, int *C, int CMAX)
{
/* Saisie des dimensions de la matrice */
do
{
printf("Nombre de lignes de la matrice (max.%d) : ",LMAX);
scanf("%d", L);
}
while (*LLMAX);
do
{
printf("Nombre de colonnes de la matrice (max.%d) : ",CMAX);
scanf("%d", C);
}
while (*CCMAX);
}

b) Ecrire la fonction LIRE_MATRICE à quatre paramètres MAT, L, C, et CMAX qui lit les composantes d'une matrice MAT du type int et de dimensions L et C.

void LIRE_MATRICE (int *MAT, int L, int C, int CMAX)
{
/* Variables locales */
int I,J;
/* Saisie des composantes de la matrice */
for (I=0; Ifor (J=0; J{
printf("Elément[%d][%d] : ", I, J);
scanf("%d", MAT + I*CMAX + J);
}
}

void ECRIRE_MATRICE (int *MAT, int L, int C, int CMAX)
{
/* Variables locales */
int I,J;
/* Affichage des composantes de la matrice */
for (I=0; I{
for (J=0; Jprintf("%7d", *(MAT + I*CMAX + J));
printf("\n");
}
}

#include

main()
{
/* Prototypes des fonctions appelées */
long SOMME_MATRICE (int *MAT, int L, int C, int CMAX);
void LIRE_DIM (int *L, int LMAX, int *C, int CMAX);
void LIRE_MATRICE (int *MAT, int L, int C, int CMAX);
void ECRIRE_MATRICE (int *MAT, int L, int C, int CMAX);


/* Variables locales */
int M[30][30]; /* Matrice d'entiers */
int L, C; /* Dimensions de la matrice */
/* Traitements */
LIRE_DIM (&L, 30, &C, 30);
LIRE_MATRICE ( (int*)M, L,C,30);
printf("Matrice donnée : \n");
ECRIRE_MATRICE ( (int*)M, L,C,30);
printf("Somme des éléments de la matrice : %ld\n",
SOMME_MATRICE( (int*)M, L,C,30));
return 0;
}

long SOMME_MATRICE(int *MAT, int L, int C, int CMAX)
{
/* Variables locales */
int I,J;
long SOMME = 0;
/* Calcul de la somme */
for (I=0; Ifor (J=0; JSOMME += *(MAT + I*CMAX + J);
return SOMME;
}

void LIRE_DIM (int *L, int LMAX, int *C, int CMAX)
{
. . .
}

void LIRE_MATRICE (int *MAT, int L, int C, int CMAX)
{
. . .
}

void ECRIRE_MATRICE (int *MAT, int L, int C, int CMAX)
{
. . .
}

#include

main()
{
/* Prototypes des fonctions appelées */
void ADDITION_MATRICE (int *MAT1, int *MAT2, int L, int C, int CMAX);
void LIRE_DIM (int *L, int LMAX, int *C, int CMAX);
void LIRE_MATRICE (int *MAT, int L, int C, int CMAX);
void ECRIRE_MATRICE (int *MAT, int L, int C, int CMAX);
/* Variables locales */
/* Les matrices et leurs dimensions */
int M1[30][30], M2[30][30];
int L, C;
/* Traitements */
LIRE_DIM (&L,30,&C,30);
printf("*** Matrice 1 ***\n");
LIRE_MATRICE ((int*)M1,L,C,30 );
printf("*** Matrice 2 ***\n");
LIRE_MATRICE ((int*)M2,L,C,30 );
printf("Matrice donnée 1 : \n");
ECRIRE_MATRICE ((int*)M1,L,C,30);
printf("Matrice donnée 2 : \n");
ECRIRE_MATRICE ((int*)M2,L,C,30);
ADDITION_MATRICE( (int*)M1 , (int*)M2 ,L,C,30);
printf("Matrice résultat : \n");
ECRIRE_MATRICE ((int*)M1,L,C,30);
return 0;
}

void ADDITION_MATRICE (int *MAT1, int *MAT2, int L, int C, int CMAX)
{
/* Variables locales */
int I,J;
/* Ajouter les éléments de MAT2 à MAT1 */
for (I=0; Ifor (J=0; J*(MAT1+I*CMAX+J) += *(MAT2+I*CMAX+J);
}

void LIRE_DIM (int *L, int LMAX, int *C, int CMAX)
{
. . .
}

void LIRE_MATRICE (int *MAT, int L, int C, int CMAX)
{
. . .
}

void ECRIRE_MATRICE (int *MAT, int L, int C, int CMAX)
{
. . .
}

#include

main()
{
/* Prototypes des fonctions appelées */
void MULTI_MATRICE(int X, int *MAT, int L, int C, int CMAX);
void LIRE_DIM (int *L, int LMAX, int *C, int CMAX);
void LIRE_MATRICE (int *MAT, int L, int C, int CMAX);
void ECRIRE_MATRICE (int *MAT, int L, int C, int CMAX);
/* Variables locales */
int M[30][30]; /* Matrice d'entiers */
int L, C; /* Dimensions de la matrice */
int X;
/* Traitements */
LIRE_DIM (&L,30,&C,30);
LIRE_MATRICE ((int*)M,L,C,30 );
printf("Introduire le multiplicateur (entier) : ");
scanf("%d", &X);
printf("Matrice donnée : \n");
ECRIRE_MATRICE ((int*)M,L,C,30);
MULTI_MATRICE (X,(int*)M,L,C,30);
printf("Matrice résultat : \n");
ECRIRE_MATRICE ((int*)M,L,C,30);
return 0;
}

void MULTI_MATRICE(int X, int *MAT, int L, int C, int CMAX)
{
/* Variables locales */
int I,J;
/* Multiplication des éléments */
for (I=0; Ifor (J=0; J*(MAT+I*CMAX+J) *= X;
}

void LIRE_DIM (int *L, int LMAX, int *C, int CMAX)
{
. . .
}

void LIRE_MATRICE (int *MAT, int L, int C, int CMAX)
{
. . .
}

void ECRIRE_MATRICE (int *MAT, int L, int C, int CMAX)
{
. . .
}

#include

main()
{
/* Prototypes des fonctions appelées */
int TRANSPO_MATRICE (int *MAT, int *L, int LMAX, int *C, int CMAX);
void LIRE_DIM (int *L, int LMAX, int *C, int CMAX);
void LIRE_MATRICE (int *MAT, int L, int C, int CMAX);
void ECRIRE_MATRICE (int *MAT, int L, int C, int CMAX);
/* Variables locales */
int M[30][30]; /* Matrice d'entiers */
int L, C; /* Dimensions de la matrice */
/* Traitements */
LIRE_DIM (&L,30,&C,30);
LIRE_MATRICE ((int*)M,L,C,30 );
printf("Matrice donnée : \n");
ECRIRE_MATRICE ((int*)M,L,C,30);
if (TRANSPO_MATRICE ((int*)M,&L,30,&C,30))
{
printf("Matrice transposée : \n");
ECRIRE_MATRICE ((int*)M,L,C,30);
}
else
printf("\aLa matrice n'a pas pu être transposée\n");
return 0;
}

int TRANSPO_MATRICE (int *MAT, int *L, int LMAX, int *C, int CMAX)
{
/* Prototypes des fonctions appelées */
void PERMUTER(int *A, int *B);
/* Variables locales */
int I,J;
int DMAX; /* la plus grande des deux dimensions */
/* Transposition de la matrice */
if (*L>CMAX || *C>LMAX)
return 0;
else
{
DMAX = (*L>*C) ? *L : *C;
for (I=0; Ifor (J=0; JPERMUTER (MAT+I*CMAX+J, MAT+J*CMAX+I);
PERMUTER(L,C); /* échanger les dimensions */
return 1;
}
}

void PERMUTER(int *A, int *B)
{
. . .
}

void LIRE_DIM (int *L, int LMAX, int *C, int CMAX)
{
. . .
}

void LIRE_MATRICE (int *MAT, int L, int C, int CMAX)
{
. . .
}

void ECRIRE_MATRICE (int *MAT, int L, int C, int CMAX)
{
. . .
}


#include

main()
{
/* Prototypes des fonctions appelées */
void MULTI_2_MATRICES (int *MAT1, int *MAT2, int *MAT3,
int N, int M, int P, int CMAX);
void LIRE_DIM (int *L, int LMAX, int *C, int CMAX);
void LIRE_MATRICE (int *MAT, int L, int C, int CMAX);
void ECRIRE_MATRICE (int *MAT, int L, int C, int CMAX);
/* Variables locales */
/* Les matrices et leurs dimensions */
int M1[30][30], M2[30][30], M3[30][30];
int N, M, P;
int DUMMY; /* pour la lecture de la première dimension de */
/* MAT2 à l'aide de LIRE_DIM. */

/* Traitements */
printf("*** Matrice 1 ***\n");
LIRE_DIM (&N,30,&M,30);
LIRE_MATRICE ((int*)M1,N,M,30 );
printf("*** Matrice 2 ***\n");
LIRE_DIM (&DUMMY,30,&P,30);
LIRE_MATRICE ((int*)M2,M,P,30 );
printf("Matrice donnée 1 : \n");
ECRIRE_MATRICE ((int*)M1,N,M,30);
printf("Matrice donnée 2 : \n");
ECRIRE_MATRICE ((int*)M2,M,P,30);
MULTI_2_MATRICES ((int*)M1 , (int*)M2 , (int*)M3 , N,M,P,30);
printf("Matrice résultat : \n");
ECRIRE_MATRICE ((int*)M3,N,P,30);
return 0;
}

void MULTI_2_MATRICES (int *MAT1, int *MAT2, int *MAT3,
int N, int M, int P, int CMAX)
{
/* Variables locales */
int I,J,K;
/* Multiplier MAT1 et MAT2 en affectant le résultat à MAT3 */
for (I=0; Ifor (J=0; J

{
*(MAT3+I*CMAX+J)=0;
for (K=0; K*(MAT3+I*CMAX+J) += *(MAT1+I*CMAX+K) * *(MAT2+K*CMAX+J);
}
}

void LIRE_DIM (int *L, int LMAX, int *C, int CMAX)
{
. . .
}

void LIRE_MATRICE (int *MAT, int L, int C, int CMAX)
{
. . .
}

void ECRIRE_MATRICE (int *MAT, int L, int C, int CMAX)
{
. . .
}

Article publié le 10 Février 2011 Mise à jour le Lundi, 07 Novembre 2022 23:56 par Salim KHALIL