Appel d'une matrice dans une fonction
Bonjour, je veux calculer la somme de deux matrices mais sous forme de fonctions mais mon programme bogue au niveau de l'appel. Quelcun pourrait il maider à trouver où se trouve le problème?merci
#include<stdio.h>
#include<conio.h>
#define N_MAX 10
#define M_MAX 10
void somme (int A[][M_MAX],int B[][M_MAX]);
int main()
{
int n,m,i,j,A[N_MAX ][M_MAX ],B[N_MAX ][M_MAX ];
printf("Donnez les dimensions des matrices\n");
scanf("%d%d",&n,&m);
printf("Remplir la matrice A\n");
for(i=0;i<n;i++)
for(j=0;j<m;j++)
scanf("%d",&A[i][j]);
printf("Remplir la matrice B\n");
for(i=0;i<n;i++)
for(j=0;j<m;j++)
scanf("%d",&B[i][j]);
somme (A,B);
return 0;
getch();
}
void somme (int A[][M_MAX],int B[][M_MAX])
{
int n,m;
int som[n][m], i,j;
for(i=0;i<n;i++)
for(j=0;j<m;j++)
som[i][j]=A[i][j]+B[i][j];
for(i=0;i<n;i++)
{
printf("|");
for(j=0;j<m;j++)
printf("%d",som[i][j]);
printf("|\n");
}
}
#include<stdio.h>
#include<conio.h>
#define N_MAX 10
#define M_MAX 10
void somme (int A[][M_MAX],int B[][M_MAX]);
int main()
{
int n,m,i,j,A[N_MAX ][M_MAX ],B[N_MAX ][M_MAX ];
printf("Donnez les dimensions des matrices\n");
scanf("%d%d",&n,&m);
printf("Remplir la matrice A\n");
for(i=0;i<n;i++)
for(j=0;j<m;j++)
scanf("%d",&A[i][j]);
printf("Remplir la matrice B\n");
for(i=0;i<n;i++)
for(j=0;j<m;j++)
scanf("%d",&B[i][j]);
somme (A,B);
return 0;
getch();
}
void somme (int A[][M_MAX],int B[][M_MAX])
{
int n,m;
int som[n][m], i,j;
for(i=0;i<n;i++)
for(j=0;j<m;j++)
som[i][j]=A[i][j]+B[i][j];
for(i=0;i<n;i++)
{
printf("|");
for(j=0;j<m;j++)
printf("%d",som[i][j]);
printf("|\n");
}
}
5 réponses
-
c bon il y a des erreurs indétectables au premier regard
on commence par la fonction somme
voici ta version
void somme (int A[][M_MAX],int B[][M_MAX]) { int n,m; int som[n][m], i,j; for(i=0;i<n;i++) for(j=0;j<m;j++) som[i][j]=A[i][j]+B[i][j]; for(i=0;i<n;i++) { printf("|"); for(j=0;j<m;j++) printf("%d",som[i][j]); printf("|\n"); } }
# il faut corriger l prototype comme je l'ai dit auparavant.
# la ligne du codeint som[n][m], i,j;
est fausse
on la remplace parint som[N_MAX][M_MAX], i,j;
car on ne put pas déclarer un tableau a taille variable, mais on peut le créer grâce a l'allocation dynamique
notez que "N_MAX" et "M_MAX" ne sont pas des variables
# quand vous faitefor(i=0;i<n;i++) for(j=0;j<m;j++)
a l'intérieur de la fonction somme les variable n et m sont déclarée mais il n'ont aucune valeur , il faut donc penser au passage des valeurs des dimension du tableau
alors on change le prototype de la fonction somme comme suitevoid somme (int A[N_MAX][M_MAX],int B[N_MAX][M_MAX], int n ,int m);
DANS LE MAIN()
#quand vous faite
return 0; getch();
vous arrêter la fonction main() par l'instruction "return 0"
et le "getch()" ne s'execute pas
#question affichage de la matrice
au lieu de faireprintf("%d",som[i][j]);
fait plutot :printf(" %d ",som[i][j]);
espace les %d sinon tout les éléments de la ligne de cette matrice apparaissent comme un seul nombre
___________________________________________________
enfin voici ton programme après ces modifications :
#include<stdio.h> #include<conio.h> #define N_MAX 10 #define M_MAX 10 void somme (int A[N_MAX][M_MAX],int B[N_MAX][M_MAX], int n ,int m); int main() { int n,m,i,j,A[N_MAX ][M_MAX ],B[N_MAX ][M_MAX ]; printf("Donnez les dimensions des matrices\n"); scanf("%d%d",&n,&m); printf("Remplir la matrice A\n"); for(i=0;i<n;i++) for(j=0;j<m;j++) scanf("%d",&A[i][j]); printf("Remplir la matrice B\n"); for(i=0;i<n;i++) for(j=0;j<m;j++) scanf("%d",&B[i][j]); somme (A,B,n,m); getch(); return 0; } void somme (int A[N_MAX][M_MAX],int B[N_MAX][M_MAX],int n ,int m) { int som[N_MAX][M_MAX],i,j; for(i=0;i<n;i++) for(j=0;j<m;j++) som[i][j]=A[i][j]+B[i][j]; for(i=0;i<n;i++) { printf("|"); for(j=0;j<m;j++) printf(" %d ",som[i][j]); printf("|\n"); } }
_____________________________________________________
DÉSOLÉ POUR LE RETARD JE CROYAIS QUE LE SUJET ÉTÉ DÉJÀ RÉSOLU PAR MA PREMIÈRE INTERVENTION -
l'erreur est dans le prototype de la fonction somme :
void somme (int A[N_MAX][M_MAX],int B[N_MAX][M_MAX]);
et non pas
void somme (int A[][M_MAX],int B[][M_MAX]);
(avant le main() ,et après car cette erreur est commise 2 fois ) -
c fait mais jai toujours le meme probleme ça bogue à lappel
void somme (int A[N_MAX ][M_MAX],int B[N_MAX ][M_MAX]);
au début et à la fin comme tu l'as di
merci -
Je vais le recopier et l'étudier a tête reposé
-
C'EST MA MAILLURE REPENSE MON AMI
SI TU EST SATISFAIT MARQUE LE SUJET COMME ÉTANT RÉSOLU
a bientôt