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");
}
}

5 réponses

  1. 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
    1. 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
      1. 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
        1. Je vais le recopier et l'étudier a tête reposé
          0
          1. C'EST MA MAILLURE REPENSE MON AMI
            SI TU EST SATISFAIT MARQUE LE SUJET COMME ÉTANT RÉSOLU

            a bientôt
            0