Manipulation Des Matrices avec GasTon Bellagha !

Toutes vos questions, aides et informations sur le Langage C
Avatar de l’utilisateur
Gaston
Tutomaker Junior
Tutomaker Junior
 
Messages: 10
Enregistré le: Dim Mar 30, 2008 2:34 am

Manipulation Des Matrices avec GasTon Bellagha !

Messagepar Gaston le Lun Mar 31, 2008 3:37 pm

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** mat1int** mat2,int** mat3,int nl,int nc);
void SousMat(int** mat1int** 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)
{
    
chart;
    
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) : "ij);
            
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** mat1int** 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** mat1int** 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)
{
    
chart;
    
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 :
╗╬ ═ ╦ ...

Avatar de l’utilisateur
Yoyo
Gérant
Gérant
 
Messages: 2031
Enregistré le: Mer Sep 27, 2006 4:54 pm

Messagepar Yoyo le Lun Mar 31, 2008 4:03 pm

Salut,

C'est du C ca non ? Je déplace ^^

Merci pour le petit code :)

Sinon, je lirai ça plus tard, je m'en vais la, bye :)
Vive les tutomakers ;)

Avatar de l’utilisateur
Gaston
Tutomaker Junior
Tutomaker Junior
 
Messages: 10
Enregistré le: Dim Mar 30, 2008 2:34 am

Messagepar Gaston le Lun Avr 07, 2008 1:47 am

éhh oui voila mon pti code ^^ chui enkor débutant et là j'utilise des simple structure YoYo :)

Avatar de l’utilisateur
Yoyo
Gérant
Gérant
 
Messages: 2031
Enregistré le: Mer Sep 27, 2006 4:54 pm

Messagepar Yoyo le Lun Avr 07, 2008 2:01 am

Oui, je m'étonnais de pas voir de classes dedans ^^ Me suis donc dit que ce n'était ptet pas du C++ :D

Une fois je testerai, mais la, j'ai du boulot ^^
Vive les tutomakers ;)



Retourner vers Langage C

Qui est en ligne

Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 1 invité