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

Messages postés
3
Date d'inscription
lundi 8 juin 2009
Statut
Membre
Dernière intervention
8 juin 2009
- - Dernière réponse : Pistol_Pete
Messages postés
1055
Date d'inscription
samedi 2 octobre 2004
Statut
Membre
Dernière intervention
9 juillet 2013
- 9 juin 2009 à 08:31
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.
Afficher la suite 

4 réponses

Meilleure réponse
Messages postés
1055
Date d'inscription
samedi 2 octobre 2004
Statut
Membre
Dernière intervention
9 juillet 2013
7
3
Merci
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

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 128 internautes nous ont dit merci ce mois-ci

Commenter la réponse de Pistol_Pete
Messages postés
3
Date d'inscription
lundi 1 juin 2009
Statut
Membre
Dernière intervention
8 juin 2009
0
Merci
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;
}
Commenter la réponse de ident0
Messages postés
3
Date d'inscription
lundi 8 juin 2009
Statut
Membre
Dernière intervention
8 juin 2009
0
Merci
ç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
Commenter la réponse de lionpri
Messages postés
3
Date d'inscription
lundi 8 juin 2009
Statut
Membre
Dernière intervention
8 juin 2009
0
Merci
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]'
Commenter la réponse de lionpri