- Code: Tout sélectionner
#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
/*Les Prototypes de nos Fonctions*/ int** Allocation_Matrice(int nl,int nc);
void liberer_Matrice(int** A,int nl);
void Saisir_Matrice(int nl,int nc,int** A);
void SommeMat(int** mat1, int** mat2,int** mat3,int nl,int nc);
void SousMat(int** mat1, int** mat2,int** mat3,int nl,int nc);
int** TransposeMatrice(int** A,int** B,int nl,int nc);
void ProduitMatrice(int** mat1,int** mat2,int** mat3,int nl1,int nc1,int nc2);
void AfficheMatrice(int** mat1,int nl,int nc);
int lire(int a);
/*Notre Fonction Principale*/
void main()
{
int** A;int**B;int** C;int** D;
int n;char a[1];
int nca,nla,ncb,nlb,ncc,nlc;
clrscr();
printf("***************************Saisie de la Matrice A***************************");
printf("\nDonner Le nbre de Ligne(s) de la Matrice A :(Donner 5 dans comme l'exemple)\n");
nla=lire(nla);
printf("\nDonner Le nbre de Colone(s) de la Matrice A :(Donner 3 comme dans l'exemple)\n");
nca=lire(nca);
A=Allocation_Matrice(nla,nca);
Saisir_Matrice(nla,nca,A);
AfficheMatrice(A,nla,nca);
printf("cliquer sur une touche pour continuer :");
gets(a);
clrscr();
printf("***************************Saisie de la Matrice B***************************");
printf("\nDonner Le nbre de Ligne(s) de la Matrice B :(Donner 3 dans comme l'exemple)\n");
nlb=lire(nlb);
printf("\nDonner Le nbre de Colone(s) de la Matrice B :(Donner 2 comme dans l'exemple)\n");
ncb=lire(ncb);
B=Allocation_Matrice(nlb,ncb);
Saisir_Matrice(nlb,ncb,B);
AfficheMatrice(B,nlb,ncb);
printf("cliquer sur une touche pour continuer :");
gets(a);
clrscr();
printf("***************************Saisie de la Matrice C***************************");
printf("\nDonner Le nbre de Ligne(s) de la Matrice C :(Donner 2 dans comme l'exemple)\n");
nlc=lire(nlc);
printf("\nDonner Le nbre de Colone(s) de la Matrice C :(Donner 3 comme dans l'exemple)\n");
ncc=lire(ncc);
C=Allocation_Matrice(nlc,ncc);
Saisir_Matrice(nlc,ncc,C);
AfficheMatrice(C,nlc,ncc);
printf("\ncliquer sur une touche pour continuer :");
gets(a);
clrscr();
printf("***************************Calcul et Affichage***************************\n1-Calcul et affichage de tB .\n2-Calcul et affichage de tB-C .2-Calcul et affichage de tB-C .\n3-Calcul et affichage de A*tC .\n4-Calcul et affichage de A*B*C .");
printf("\nLa Matrice B est :\n");
AfficheMatrice(B,nlb,ncb);
printf("\nLa Transposé de B est :\n");
D=Allocation_Matrice(ncb,nlb);
D=TransposeMatrice(B,D,nlb,ncb);
AfficheMatrice(D,ncb,nlb);
printf("cliquer sur une touche pour continuer :");
gets(a);
clrscr();
printf("\nCalcule et Affichage de tB-C :\n");
int** E;
E=Allocation_Matrice(nlc,ncc);
SousMat(D,C,E,nlc,ncc);
AfficheMatrice(E,nlc,ncc);
printf("cliquer sur une touche pour continuer :");
gets(a);
clrscr();
printf("\n3-Calcul et affichage de A*tC (Calculer la transposé de C \npuis la multiplier fois A) :\n");
liberer_Matrice(D,ncb);
D=Allocation_Matrice(ncc,nlc);
D=TransposeMatrice(C,D,nlc,ncc);
/* D=tC */
printf(" \n\tVoila tC :\n");
AfficheMatrice(D,ncc,nlc);
printf(" \n\tEt voila tC*A :\n");
int**F;
F=Allocation_Matrice(ncc,nca);
ProduitMatrice(D,A,F,ncc,nlc,nca);
AfficheMatrice(F,ncc,nca);
printf("cliquer sur une touche pour continuer :");
gets(a);
clrscr();
printf("\n4-Calcul et affichage de A*B*C .\n");
/* C'est trop simple : on va allouer une matrice qui va contenir A*B pui on va la multiplier avec C
il ya plusieurs autres méthodes */ liberer_Matrice(F,ncc);
F=Allocation_Matrice(nla,ncb);
ProduitMatrice(A,B,F,nla,nca,ncb);
liberer_Matrice(E,nlc);
E=Allocation_Matrice(nla,ncc);
ProduitMatrice(F,C,E,nla,ncb,ncc);
AfficheMatrice(E,nla,ncc);
printf("cliquer sur une touche pour continuer :");
gets(a);
clrscr();
printf("\tDomage g pas pu Atteindre le quadrillage double .. Sad");
liberer_Matrice(A,nla);
liberer_Matrice(B,nlb);
liberer_Matrice(C,nlc);
liberer_Matrice(D,ncc);
liberer_Matrice(E,nla);
liberer_Matrice(F,nla);
}
- Code: Tout sélectionner
/*** Nos Fonctions ***/
/* Alocation d'une matrice c'est comme créer un vecteur de pointeur et chaque pointeur pointe sur un autr vecteur
d'oû le premier vecteur correspond au lignes et l deuxiem correspond au colones */
int** Allocation_Matrice(int nl,int nc)
{
int i ;
int** A=NULL;
A=(int**)malloc(sizeof(int*)*nl);
if (A!=NULL)
{
for(i=0;i<nl;i++)
A[i]=(int*)malloc(sizeof(int)*nc);
}
return A;
}
/* Vider les matrice Aloueées */
void liberer_Matrice(int** A,int nl)
{
int i;
for(i=0;i<nl;i++)
free(A[i]);
free(A);
}
/*fonction qui lit un entier apres un controle de saisi et les placé dans
leur emplacement dans la matrice */
void Saisir_Matrice(int nl,int nc,int** A)
{
char* t;
t=(char*)malloc(sizeof(char)*4);
int i,j;
for(i=0;i<nl;i++)
for( j=0;j<nc;j++)
{
do{
printf("matrice(%d,%d) : ", i, j);
gets(t);
A[i][j]=atoi(t);
}while (A[i][j]==0);
}
}
/*Maintenant une fonction qui permet l'addition de deux Matrices*/
void SommeMat(int** mat1, int** mat2,int** mat3,int nl,int nc)
{
int i,j;
for(i=0;i<nl;i++)
for(j=0;j<nc;j++)
mat3[i][j] = mat2[i][j] + mat1[i][j];
}
/* Une autre pour la Soutraction */
void SousMat(int** mat1, int** mat2,int** mat3,int nl,int nc)
{
int i,j;
for(i=0;i<nl;i++)
for(j=0;j<nc;j++)
mat3[i][j] = mat2[i][j] - mat1[i][j];
}
/*Maintenant une fonction qui fai la transposé d'une Matrice*/
int** TransposeMatrice(int** A,int** B,int nl,int nc)
{
int i,j;
for(i=0;i<nc;i++)
for(j=0;j<nl;j++)
B[i][j]=A[j][i];
return B;
}
/*Maintenant une Fonction qui permmet le Produit de deux matrices*/
void ProduitMatrice(int** mat1,int** mat2,int** mat3,int nl1,int nc1,int nc2)
{
int i,j,k;
for(i=0;i<nl1;i++)
for(j=0;j<nc2;j++)
for(k=0;k<nc1;k++)
mat3[i][j]+=mat1[i][k]*mat2[k][j];
}
/* Maintenant une Fonction qui permet l'Affichage de nos matrices */
void AfficheMatrice(int** mat1,int nl,int nc)
{
int i,j;
for(i=0;i<nl;i++)
{
for(j=0;j<nc;j++)
{
if(j==0)
printf("\t__________\n");
printf("\t|| %.4d || ",mat1[i][j]);
}
printf("\n");
}
}
/*C'est bien de créer une autre ptite fonction qui controle si l nbre
saisi et un entier ou pas (sa va nous facilité la tâche) */
int lire(int a)
{
char* t;
t=(char*)malloc(sizeof(char)*4);
do
{
gets(t);
a=atoi(t);
}while(a==0);
return a;
}
Le Probleme ici se trouve dans l'affichage,
on veut afficher les matries dans des tableaux à double cadrillage en utilisant les symboles :
╗╬ ═ ╦ ...