Appel d'une matrice dans une fonction

lejeune -  
 Utilisateur anonyme -
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. Utilisateur anonyme
     
    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
  2. Utilisateur anonyme
     
    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
  3. lejeune
     
    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
  4. Utilisateur anonyme
     
    Je vais le recopier et l'étudier a tête reposé
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. Utilisateur anonyme
     
    C'EST MA MAILLURE REPENSE MON AMI
    SI TU EST SATISFAIT MARQUE LE SUJET COMME ÉTANT RÉSOLU

    a bientôt
    0