Passer un tableau 2D en paramètre et retourner une somme [Résolu]

Signaler
Messages postés
3
Date d'inscription
lundi 8 juin 2009
Statut
Membre
Dernière intervention
8 juin 2009
-
Pistol_Pete
Messages postés
1054
Date d'inscription
samedi 2 octobre 2004
Statut
Membre
Dernière intervention
9 juillet 2013
-
Bonjour,

Je suis débutant en C et j'ai du mal à comprendre les déclarations de fonction. J'aimerais passer un tableau 2D en paramètre d'une fonction et retourner la somme des composants dans mon programme principal. Voici ce que j'ai écrit.

#include <stdlib.h>
#include <stdio.h>

// passe en constante, 2 lignes, 2 colonnes
#define NBCOL 2
#define NBLIG 2

//prototype fonction. Que dois-je déclarer, le tableau en entré ou la valeur en sortie?
int sommetab (tab[NBLIG][NBCOL]);

void main (){

    int a, i, j, resultat;
    int tabelle [NBLIG][NBCOL];

    a=1;

    for (i=0 ; i<NBLIG ; i++){
        for (j=0; j<NBCOL ; j++){
            tabelle [i][j] = a;
            a++;
        }
    }
    resultat = sommetab (somme);
    system("pause");
}

int sommetab (tab[NBLIG][NBCOL]){

    int i, j, somme;
   
    for (i=0 ; i<NBLIG ; i++){
        for (j=0; j<NBCOL ; j++){
            somme = somme + tab[i][j];
        }
    }
    return somme;
}

Biensûr ça ne compile pas, mais je ne comprends pas comment déclarer ces variables, si quelqu'un pouvait corriger ce code et m'expliquer, je lui en serai très reconnaissant.

4 réponses

Messages postés
1054
Date d'inscription
samedi 2 octobre 2004
Statut
Membre
Dernière intervention
9 juillet 2013
6
Essaye cela:
J'ai mis en rouge les modifs apporté à ton premier code.

#include <stdlib.h>
#include <stdio.h>

// passe en constante, 2 lignes, 2 colonnes
#define NBCOL 2
#define NBLIG 2

//prototype fonction. Que dois-je déclarer, le tableau en entré ou la valeur en sortie?
int sommetab (int tab[NBLIG][NBCOL]);

void main (){

    int a, i, j, resultat;
    int tabelle [NBLIG][NBCOL];

    a=1;

    for (i=0 ; i<NBLIG ; i++){
        for (j=0; j<NBCOL ; j++){
            tabelle [i][j] = a;
            a++;
        }
    }
    resultat = sommetab (tabelle);
    system("pause");
}

int sommetab (int tab[NBLIG][NBCOL]){

    int i, j, somme=0;
  
    for (i=0 ; i<NBLIG ; i++){
        for (j=0; j<NBCOL ; j++){
            somme = somme + tab[i][j];
        }
    }
    return somme;
}
A+
____________________________________________________________________________
Mon site internet :  
http://ImAnalyse.free.fr
Messages postés
3
Date d'inscription
lundi 1 juin 2009
Statut
Membre
Dernière intervention
8 juin 2009

quelque chose comme ceci:

#include <stddef.h>
#include <stdio.h>

#define NBCOL    10
#define NBLIG    10

unsigned int somme(const int** tab, size_t x, size_t y);

int main()
{
    size_t a;
    size_t b;
    unsigned int result;
    int tab[NBCOL][NBLIG];

    for (a = 0; a < NBCOL; ++a)
    {
        for (b = 0; b < NBLIG; ++b)
        {
            tab[a][b] = ((a << 5) * b) + 1;
        }
    }

    result = somme(tab, NBCOL, NBLIG);
    printf("somme: %u\n", result);

    return 0;
}

unsigned int somme(const int** tab, size_t x, size_t y)
{
    size_t a;
    size_t b;
    unsigned int result = 0;

    for (a = 0; a < x; ++a)
    {
        for (b = 0; b < y; ++b)
        {
            result += tab[a][b];
        }
    }

    return result;
}
Messages postés
3
Date d'inscription
lundi 8 juin 2009
Statut
Membre
Dernière intervention
8 juin 2009

ça ne joue pas, il ne compile pas, il affiche le message suivant

error C2664: 'somme' : cannot convert parameter 1 from 'int [10][10]' to 'const int **'
 Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast
Messages postés
3
Date d'inscription
lundi 8 juin 2009
Statut
Membre
Dernière intervention
8 juin 2009

J'ai modifié mon programme comme suit :

#include <stdlib.h>
#include <stdio.h>

// passe en constante, 2 lignes, 2 colonnes
#define NBCOL 2
#define NBLIG 2

int sommetab (int tab[NBLIG][NBCOL]);

void main (){

    int a, i, j, resultat, somme;
    int tabelle [NBLIG][NBCOL];

    a=1;

    for (i=0 ; i<NBLIG ; i++){
        for (j=0; j<NBCOL ; j++){
            tabelle [i][j] = a;
            a++;
        }
    }
    resultat = sommetab(somme);
    system("pause");
}

int sommetab (int tab[NBLIG][NBCOL]){

    int i, j, somme;
   
    for (i=0 ; i<NBLIG ; i++){
        for (j=0; j<NBCOL ; j++){
            somme = somme + tab[i][j];
        }
    }
    return somme;
}

Il m'affiche le message suivant :

c:\documents and settings\lio\mes documents\visual studio 2005\projects\passagetableau\passagetableau.cpp(26) : error C2664: 'sommetab' : cannot convert parameter 1 from 'int' to 'int [][2]'