Appel d'une matrice dans une fonction

Fermé
lejeune - 11 sept. 2010 à 01:27
 Utilisateur anonyme - 13 sept. 2010 à 02:56
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");
}
}



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 code
  int som[n][m], i,j; 
est fausse
on la remplace par
  int 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 faite
for(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 suite
 void 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 faire
 printf("%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
2
Utilisateur anonyme
11 sept. 2010 à 03:03
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 )
0
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
0
Utilisateur anonyme
13 sept. 2010 à 02:20
Je vais le recopier et l'étudier a tête reposé
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Utilisateur anonyme
13 sept. 2010 à 02:56
C'EST MA MAILLURE REPENSE MON AMI
SI TU EST SATISFAIT MARQUE LE SUJET COMME ÉTANT RÉSOLU

a bientôt
0