Exercice 1
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 (*L<0 || *L>LMAX); do { printf("Nombre de colonnes de la matrice (max.%d) : ",CMAX); scanf("%d", C); } while (*C<0 || *C>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.
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; I<L; I++) for (J=0; J<C; J++) { printf("Elément[%d][%d] : ", I, J); scanf("%d", MAT + I*CMAX + J); } }
Exercice 2
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<L; I++) { for (J=0; J<C; J++) printf("%7d", *(MAT + I*CMAX + J)); printf("\n"); } }
Exercice 3
#include <stdio.h> 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; I<L; I++) for (J=0; J<C; J++) SOMME += *(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) { . . . }
Exercice 4
#include <stdio.h> 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; I<L; I++) for (J=0; J<C; 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) { . . . }
Exercice 5
#include <stdio.h> 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; I<L; I++) for (J=0; J<C; 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) { . . . }
Exercice 6
#include <stdio.h> 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; I<DMAX; I++) for (J=0; J<I; J++) PERMUTER (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) { . . . }
Exercice 7
#include <stdio.h> 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; I<N; I++) for (J=0; J<P; J++) { *(MAT3+I*CMAX+J)=0; for (K=0; K<M; 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) { . . . }