Produit_Matriciel Programmation En C
Fermé
reda4211
Messages postés
3
Date d'inscription
vendredi 6 janvier 2012
Statut
Membre
Dernière intervention
7 janvier 2012
-
6 janv. 2012 à 23:31
jenaimarre2fr - 7 janv. 2012 à 16:27
jenaimarre2fr - 7 janv. 2012 à 16:27
A voir également:
- Produit_Matriciel Programmation En C
- Application de programmation - Guide
- Programmation logo tortue télécharger - Télécharger - Études & Formations
- Mettre en veille un programme - Guide
5 réponses
alaa_xavi
Messages postés
1
Date d'inscription
samedi 7 janvier 2012
Statut
Membre
Dernière intervention
7 janvier 2012
7 janv. 2012 à 01:28
7 janv. 2012 à 01:28
mais ca marche pas ????? resultat pas vrais ou n'execute rien???? expliqué??
reda4211
Messages postés
3
Date d'inscription
vendredi 6 janvier 2012
Statut
Membre
Dernière intervention
7 janvier 2012
7 janv. 2012 à 02:40
7 janv. 2012 à 02:40
Le programme se plante "dépassement de mémoire" un truc de ce genre
BONJOUR,
voici un programme qui fonctionne bien, par contre il n'utilise pas d'allocation dynamique de mémoire
#include<stdio.h>
void main(void)
{
int nbrcol1,nbrcol2,nbrlign1,nbrlign2=1,i,j,k=1,som=0;
int A[10][10], B[10][10],C[10][10];
while(nbrcol1!=nbrlign2)
{
printf("donner le nombre de ligne de la matrice A\n");
scanf("%d",&nbrlign1);
printf("donner le nombre de colonne de la matrice A\n");
scanf("%d",&nbrcol1);
printf("donner le nombre de ligne de la matrice B\n");
scanf("%d",&nbrlign2);
printf("donner le nombre de colonne de la matrice B\n");
scanf("%d",&nbrcol2);
if(nbrcol1!=nbrlign2)
{
printf("ATTENTION: le nombre de colonne de la matricr A doit etre egale au nombre de ligne de la matrice B\n");
}
}
/*saisie des matrices*/
printf("A= \n");
for(i=0;i<nbrlign1;i++)
{
for(j=0;j<nbrcol1;j++)
{
printf("Entrer le %d element de la matrice A\n",k++);
scanf("%d",&A[i][j]);
}
}
k=1;
for(i=0;i<nbrlign2;i++)
{
for(j=0;j<nbrcol2;j++)
{
printf("Entrer le %d element de la matrice B\n",k++);
scanf("%d",&B[i][j]);
}
}
/* Affichage des matrices */
printf("A= \n");
for(i=0;i<nbrlign1;i++)
{
for(j=0;j<nbrcol1;j++)
{
printf(" %d ",A[i][j]);
}
printf("\n");
}
printf("B= \n");
for(i=0;i<nbrlign2;i++)
{
for(j=0;j<nbrcol2;j++)
{
printf(" %d ",B[i][j]);
}
printf("\n");
}
//Produit matriciel A*B
for(i=0;i<nbrcol2;i++)
{
for(j=0;j<nbrlign1;j++)
{
for(k=0;k<nbrcol1;k++)
{
som=som+A[j][k]*B[k][i];
}
C[j][i]=som;
som=0;
}
}
printf("C= \n");
for(i=0;i<nbrlign1;i++)
{
for(j=0;j<nbrcol2;j++)
{
printf(" %d ",C[i][j]);
}
printf("\n");
}
}
voici un programme qui fonctionne bien, par contre il n'utilise pas d'allocation dynamique de mémoire
#include<stdio.h>
void main(void)
{
int nbrcol1,nbrcol2,nbrlign1,nbrlign2=1,i,j,k=1,som=0;
int A[10][10], B[10][10],C[10][10];
while(nbrcol1!=nbrlign2)
{
printf("donner le nombre de ligne de la matrice A\n");
scanf("%d",&nbrlign1);
printf("donner le nombre de colonne de la matrice A\n");
scanf("%d",&nbrcol1);
printf("donner le nombre de ligne de la matrice B\n");
scanf("%d",&nbrlign2);
printf("donner le nombre de colonne de la matrice B\n");
scanf("%d",&nbrcol2);
if(nbrcol1!=nbrlign2)
{
printf("ATTENTION: le nombre de colonne de la matricr A doit etre egale au nombre de ligne de la matrice B\n");
}
}
/*saisie des matrices*/
printf("A= \n");
for(i=0;i<nbrlign1;i++)
{
for(j=0;j<nbrcol1;j++)
{
printf("Entrer le %d element de la matrice A\n",k++);
scanf("%d",&A[i][j]);
}
}
k=1;
for(i=0;i<nbrlign2;i++)
{
for(j=0;j<nbrcol2;j++)
{
printf("Entrer le %d element de la matrice B\n",k++);
scanf("%d",&B[i][j]);
}
}
/* Affichage des matrices */
printf("A= \n");
for(i=0;i<nbrlign1;i++)
{
for(j=0;j<nbrcol1;j++)
{
printf(" %d ",A[i][j]);
}
printf("\n");
}
printf("B= \n");
for(i=0;i<nbrlign2;i++)
{
for(j=0;j<nbrcol2;j++)
{
printf(" %d ",B[i][j]);
}
printf("\n");
}
//Produit matriciel A*B
for(i=0;i<nbrcol2;i++)
{
for(j=0;j<nbrlign1;j++)
{
for(k=0;k<nbrcol1;k++)
{
som=som+A[j][k]*B[k][i];
}
C[j][i]=som;
som=0;
}
}
printf("C= \n");
for(i=0;i<nbrlign1;i++)
{
for(j=0;j<nbrcol2;j++)
{
printf(" %d ",C[i][j]);
}
printf("\n");
}
}
RE,
en version un peu plus pro (en utilisant des fonctions)ça donnerait ça:
#include<stdio.h>
void affiche_matrice(int*,int,int);
void produit_matriciel(int*,int*,int*,int,int,int,int);
void saisie_matrice(int*,char*,int,int);
void main(void)
{
int nbrcol1,nbrcol2,nbrlign1,nbrlign2=1,i,j,k=1,som=0;
int A[10][10], B[10][10],C[10][10];
while(nbrcol1!=nbrlign2)
{
printf("donner le nombre de ligne de la matrice A\n");
scanf("%d",&nbrlign1);
printf("donner le nombre de colonne de la matrice A\n");
scanf("%d",&nbrcol1);
printf("donner le nombre de ligne de la matrice B\n");
scanf("%d",&nbrlign2);
printf("donner le nombre de colonne de la matrice B\n");
scanf("%d",&nbrcol2);
if(nbrcol1!=nbrlign2)
{
printf("ATTENTION: le nombre de colonne de la matricr A doit etre egale au nombre de ligne de la matrice B\n");
}
}
/*saisie des matrices*/
saisie_matrice(A,'A',nbrlign1,nbrcol1);
saisie_matrice(B,'B',nbrlign2,nbrcol2);
/* Affichage des matrices */
printf("A=\n");
affiche_matrice(A,nbrlign1,nbrcol1);
printf("B=\n");
affiche_matrice(B,nbrlign2,nbrcol2);
produit_matriciel(A,B,C,nbrlign1,nbrcol1,nbrlign2,nbrcol2);
printf("C=\n");
affiche_matrice(C,nbrlign1,nbrcol2);
}
// Debut de la fonction saisie_matrice
void saisie_matrice(int*Mat,char* c,int nbrl,int nbrc)
{
int i,j,k=1;
for(i=0;i<nbrl;i++)
{
for(j=0;j<nbrc;j++)
{
printf("Entrer le %d element de la matrice %c\n",k++,c);
scanf("%d",(Mat+i*10+j));
}
}
}
//Début de la fonction afficche_matrice
void affiche_matrice(int* Mat,int nbrl,int nbrc)
{
int i,j;
for(i=0;i<nbrl;i++)
{
for(j=0;j<nbrc;j++)
{
printf(" %d ",*(Mat+i*10+j));
}
printf("\n");
}
}
//Début de la fonction produit_matriciel
void produit_matriciel(int*A,int*B,int*C,int nbrlign1,int nbrcol1,int nbrlign2,int nbrcol2)
{
int i,j,k,som=0;
for(i=0;i<nbrcol2;i++)
{
for(j=0;j<nbrlign1;j++)
{
for(k=0;k<nbrcol1;k++)
{
som=som+(*(A+j*10+k))*(*(B+k*10+i));
}
*(C+j*10+i)=som;
//printf("%d \n",som);
som=0;
}
}
}
en version un peu plus pro (en utilisant des fonctions)ça donnerait ça:
#include<stdio.h>
void affiche_matrice(int*,int,int);
void produit_matriciel(int*,int*,int*,int,int,int,int);
void saisie_matrice(int*,char*,int,int);
void main(void)
{
int nbrcol1,nbrcol2,nbrlign1,nbrlign2=1,i,j,k=1,som=0;
int A[10][10], B[10][10],C[10][10];
while(nbrcol1!=nbrlign2)
{
printf("donner le nombre de ligne de la matrice A\n");
scanf("%d",&nbrlign1);
printf("donner le nombre de colonne de la matrice A\n");
scanf("%d",&nbrcol1);
printf("donner le nombre de ligne de la matrice B\n");
scanf("%d",&nbrlign2);
printf("donner le nombre de colonne de la matrice B\n");
scanf("%d",&nbrcol2);
if(nbrcol1!=nbrlign2)
{
printf("ATTENTION: le nombre de colonne de la matricr A doit etre egale au nombre de ligne de la matrice B\n");
}
}
/*saisie des matrices*/
saisie_matrice(A,'A',nbrlign1,nbrcol1);
saisie_matrice(B,'B',nbrlign2,nbrcol2);
/* Affichage des matrices */
printf("A=\n");
affiche_matrice(A,nbrlign1,nbrcol1);
printf("B=\n");
affiche_matrice(B,nbrlign2,nbrcol2);
produit_matriciel(A,B,C,nbrlign1,nbrcol1,nbrlign2,nbrcol2);
printf("C=\n");
affiche_matrice(C,nbrlign1,nbrcol2);
}
// Debut de la fonction saisie_matrice
void saisie_matrice(int*Mat,char* c,int nbrl,int nbrc)
{
int i,j,k=1;
for(i=0;i<nbrl;i++)
{
for(j=0;j<nbrc;j++)
{
printf("Entrer le %d element de la matrice %c\n",k++,c);
scanf("%d",(Mat+i*10+j));
}
}
}
//Début de la fonction afficche_matrice
void affiche_matrice(int* Mat,int nbrl,int nbrc)
{
int i,j;
for(i=0;i<nbrl;i++)
{
for(j=0;j<nbrc;j++)
{
printf(" %d ",*(Mat+i*10+j));
}
printf("\n");
}
}
//Début de la fonction produit_matriciel
void produit_matriciel(int*A,int*B,int*C,int nbrlign1,int nbrcol1,int nbrlign2,int nbrcol2)
{
int i,j,k,som=0;
for(i=0;i<nbrcol2;i++)
{
for(j=0;j<nbrlign1;j++)
{
for(k=0;k<nbrcol1;k++)
{
som=som+(*(A+j*10+k))*(*(B+k*10+i));
}
*(C+j*10+i)=som;
//printf("%d \n",som);
som=0;
}
}
}
reda4211
Messages postés
3
Date d'inscription
vendredi 6 janvier 2012
Statut
Membre
Dernière intervention
7 janvier 2012
7 janv. 2012 à 13:59
7 janv. 2012 à 13:59
Oui ça je l'ai compris Mais ce que je demande c'est le programme qui fait le produit de deux matrice on utilisant l'allocation dynamique Bah voila avec cette méthode ça marche (si vous avez d'autre solution n'hésitez pas à les mettre ici Merci d avance ) LES VALEURS des deux matrices sont initialisé à 2
#include <stdio.h>
#include <stdlib.h>
int **produit(int l1,int c1,int **m1,int l2,int c2,int **m2)
{
int i,j,k;
int **m=(int **)malloc(l1*sizeof(int*));
for(i=0;i<l1;i++)
{
*(m+i)=(int *)malloc(c2*sizeof(int));
}
for(i=0;i<l1;i++)
for(j=0;j<c2;j++)
{
*(*(m+i)+j)=0;
for(k=0;k<c1;k++)
*(*(m+i)+j)+=*(*(m1+i)+k)*(*(*(m2+k)+j));
}
return (m);
}
void affich(int**t,int l,int c){
int i,j;
for(i=0;i<l;i++){
for (j=0;j<c;j++)
printf("%d\t",*(*(t+i)+j));
printf("\n");
}}
main(){
int l1,c1,l2,c2,**mat1,**mat2,**pro,i,j;
printf("donner l1\n");
scanf("%d",&l1);
printf("donner c1\n");
scanf("%d",&c1);
printf("donner lé\n");
scanf("%d",&l2);
printf("donner c2\n");
scanf("%d",&c2);
mat1=(int**)malloc(l1*sizeof(int*));
for(i=0;i<l1;i++)
*(mat1+i)=(int*)malloc(c1*sizeof(int));
for(i=0;i<l1;i++)
for(j=0;j<c1;j++)
*(*(mat1+i)+j)=2;
mat2=(int**)malloc(l2*sizeof(int*));
for(i=0;i<l2;i++)
*(mat2+i)=(int*)malloc(c2*sizeof(int));
for(i=0;i<l2;i++)
for(j=0;j<c2;j++)
*(*(mat2+i)+j)=2;
affich(mat1,l1,c1);
printf("\n");
printf("\n");
affich(mat2,l2,c2);
printf("le produit est :\n");
printf("\n");
printf("\n");
pro=produit(l1,c1,mat1,l2,c2,mat2);
affich(pro,l1,c2);
system("pause");
return(0);
}
#include <stdio.h>
#include <stdlib.h>
int **produit(int l1,int c1,int **m1,int l2,int c2,int **m2)
{
int i,j,k;
int **m=(int **)malloc(l1*sizeof(int*));
for(i=0;i<l1;i++)
{
*(m+i)=(int *)malloc(c2*sizeof(int));
}
for(i=0;i<l1;i++)
for(j=0;j<c2;j++)
{
*(*(m+i)+j)=0;
for(k=0;k<c1;k++)
*(*(m+i)+j)+=*(*(m1+i)+k)*(*(*(m2+k)+j));
}
return (m);
}
void affich(int**t,int l,int c){
int i,j;
for(i=0;i<l;i++){
for (j=0;j<c;j++)
printf("%d\t",*(*(t+i)+j));
printf("\n");
}}
main(){
int l1,c1,l2,c2,**mat1,**mat2,**pro,i,j;
printf("donner l1\n");
scanf("%d",&l1);
printf("donner c1\n");
scanf("%d",&c1);
printf("donner lé\n");
scanf("%d",&l2);
printf("donner c2\n");
scanf("%d",&c2);
mat1=(int**)malloc(l1*sizeof(int*));
for(i=0;i<l1;i++)
*(mat1+i)=(int*)malloc(c1*sizeof(int));
for(i=0;i<l1;i++)
for(j=0;j<c1;j++)
*(*(mat1+i)+j)=2;
mat2=(int**)malloc(l2*sizeof(int*));
for(i=0;i<l2;i++)
*(mat2+i)=(int*)malloc(c2*sizeof(int));
for(i=0;i<l2;i++)
for(j=0;j<c2;j++)
*(*(mat2+i)+j)=2;
affich(mat1,l1,c1);
printf("\n");
printf("\n");
affich(mat2,l2,c2);
printf("le produit est :\n");
printf("\n");
printf("\n");
pro=produit(l1,c1,mat1,l2,c2,mat2);
affich(pro,l1,c2);
system("pause");
return(0);
}
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
RE
voici ma version de programme avec allocation dynamique
#include<stdio.h>
#include<stdlib.h>
void affiche_matrice(int*,int,int);
void produit_matriciel(int*,int*,int*,int,int,int,int);
void saisie_matrice(int*,char*,int,int);
void main(void)
{
int nbrcol1,nbrcol2,nbrlign1,nbrlign2=1,i,j,k=1,som=0;
//int A[10][10], B[10][10],C[10][10];
int *A,*B,*C;
while(nbrcol1!=nbrlign2)
{
printf("donner le nombre de ligne de la matrice A\n");
scanf("%d",&nbrlign1);
printf("donner le nombre de colonne de la matrice A\n");
scanf("%d",&nbrcol1);
//allaocation dynamique pour A
A=(char*)malloc(nbrlign1*nbrcol1*sizeof(char) );
if ( A == NULL )
{
fprintf(stderr,"Allocation impossible \n");
exit(EXIT_FAILURE);
}
printf("donner le nombre de ligne de la matrice B\n");
scanf("%d",&nbrlign2);
printf("donner le nombre de colonne de la matrice B\n");
scanf("%d",&nbrcol2);
//allaocation dynamique pour B
B=(char*)malloc(nbrlign2*nbrcol2*sizeof(char) );
if ( B == NULL )
{
fprintf(stderr,"Allocation impossible \n");
exit(EXIT_FAILURE);
}
//allaocation dynamique pour C
C=(char*)malloc(nbrlign2*nbrcol2*sizeof(char) );
if ( C == NULL )
{
fprintf(stderr,"Allocation impossible \n");
exit(EXIT_FAILURE);
}
if(nbrcol1!=nbrlign2)
{
printf("ATTENTION: le nombre de colonne de la matricr A doit etre egale au nombre de ligne de la matrice B\n");
//liberer les mémoire
free(A);
free(B);
free(C);
}
}
/*saisie des matrices*/
saisie_matrice(A,'A',nbrlign1,nbrcol1);
saisie_matrice(B,'B',nbrlign2,nbrcol2);
/* Affichage des matrices */
printf("A=\n");
affiche_matrice(A,nbrlign1,nbrcol1);
printf("B=\n");
affiche_matrice(B,nbrlign2,nbrcol2);
produit_matriciel(A,B,C,nbrlign1,nbrcol1,nbrlign2,nbrcol2);
printf("C=\n");
affiche_matrice(C,nbrlign1,nbrcol2);
//liberation des mémoires
free(A);
free(B);
free(C);
}
// Debut de la fonction saisie_matrice
void saisie_matrice(int*Mat,char* c,int nbrl,int nbrc)
{
int i,j,k=1;
for(i=0;i<nbrl;i++)
{
for(j=0;j<nbrc;j++)
{
printf("Entrer le %d element de la matrice %c\n",k++,c);
scanf("%d",(Mat+i*10+j));
}
}
}
//Début de la fonction afficche_matrice
void affiche_matrice(int* Mat,int nbrl,int nbrc)
{
int i,j;
for(i=0;i<nbrl;i++)
{
for(j=0;j<nbrc;j++)
{
printf(" %d ",*(Mat+i*10+j));
}
printf("\n");
}
}
//Début de la fonction produit_matriciel
void produit_matriciel(int*A,int*B,int*C,int nbrlign1,int nbrcol1,int nbrlign2,int nbrcol2)
{
int i,j,k,som=0;
for(i=0;i<nbrcol2;i++)
{
for(j=0;j<nbrlign1;j++)
{
for(k=0;k<nbrcol1;k++)
{
som=som+(*(A+j*10+k))*(*(B+k*10+i));
}
*(C+j*10+i)=som;
//printf("%d \n",som);
som=0;
}
}
}
voici ma version de programme avec allocation dynamique
#include<stdio.h>
#include<stdlib.h>
void affiche_matrice(int*,int,int);
void produit_matriciel(int*,int*,int*,int,int,int,int);
void saisie_matrice(int*,char*,int,int);
void main(void)
{
int nbrcol1,nbrcol2,nbrlign1,nbrlign2=1,i,j,k=1,som=0;
//int A[10][10], B[10][10],C[10][10];
int *A,*B,*C;
while(nbrcol1!=nbrlign2)
{
printf("donner le nombre de ligne de la matrice A\n");
scanf("%d",&nbrlign1);
printf("donner le nombre de colonne de la matrice A\n");
scanf("%d",&nbrcol1);
//allaocation dynamique pour A
A=(char*)malloc(nbrlign1*nbrcol1*sizeof(char) );
if ( A == NULL )
{
fprintf(stderr,"Allocation impossible \n");
exit(EXIT_FAILURE);
}
printf("donner le nombre de ligne de la matrice B\n");
scanf("%d",&nbrlign2);
printf("donner le nombre de colonne de la matrice B\n");
scanf("%d",&nbrcol2);
//allaocation dynamique pour B
B=(char*)malloc(nbrlign2*nbrcol2*sizeof(char) );
if ( B == NULL )
{
fprintf(stderr,"Allocation impossible \n");
exit(EXIT_FAILURE);
}
//allaocation dynamique pour C
C=(char*)malloc(nbrlign2*nbrcol2*sizeof(char) );
if ( C == NULL )
{
fprintf(stderr,"Allocation impossible \n");
exit(EXIT_FAILURE);
}
if(nbrcol1!=nbrlign2)
{
printf("ATTENTION: le nombre de colonne de la matricr A doit etre egale au nombre de ligne de la matrice B\n");
//liberer les mémoire
free(A);
free(B);
free(C);
}
}
/*saisie des matrices*/
saisie_matrice(A,'A',nbrlign1,nbrcol1);
saisie_matrice(B,'B',nbrlign2,nbrcol2);
/* Affichage des matrices */
printf("A=\n");
affiche_matrice(A,nbrlign1,nbrcol1);
printf("B=\n");
affiche_matrice(B,nbrlign2,nbrcol2);
produit_matriciel(A,B,C,nbrlign1,nbrcol1,nbrlign2,nbrcol2);
printf("C=\n");
affiche_matrice(C,nbrlign1,nbrcol2);
//liberation des mémoires
free(A);
free(B);
free(C);
}
// Debut de la fonction saisie_matrice
void saisie_matrice(int*Mat,char* c,int nbrl,int nbrc)
{
int i,j,k=1;
for(i=0;i<nbrl;i++)
{
for(j=0;j<nbrc;j++)
{
printf("Entrer le %d element de la matrice %c\n",k++,c);
scanf("%d",(Mat+i*10+j));
}
}
}
//Début de la fonction afficche_matrice
void affiche_matrice(int* Mat,int nbrl,int nbrc)
{
int i,j;
for(i=0;i<nbrl;i++)
{
for(j=0;j<nbrc;j++)
{
printf(" %d ",*(Mat+i*10+j));
}
printf("\n");
}
}
//Début de la fonction produit_matriciel
void produit_matriciel(int*A,int*B,int*C,int nbrlign1,int nbrcol1,int nbrlign2,int nbrcol2)
{
int i,j,k,som=0;
for(i=0;i<nbrcol2;i++)
{
for(j=0;j<nbrlign1;j++)
{
for(k=0;k<nbrcol1;k++)
{
som=som+(*(A+j*10+k))*(*(B+k*10+i));
}
*(C+j*10+i)=som;
//printf("%d \n",som);
som=0;
}
}
}