IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C Discussion :

Structure affichage et remplissage d'un tableau à 2 dimensions


Sujet :

C

  1. #1
    Membre du Club
    Homme Profil pro
    Lycéen
    Inscrit en
    Avril 2015
    Messages
    224
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Avril 2015
    Messages : 224
    Points : 62
    Points
    62
    Par défaut Structure affichage et remplissage d'un tableau à 2 dimensions
    Bonjour à tous,

    Pour l'instant en cours j'ai surtout vu les tableaux à 1 dimension, mais je voudrais un peu anticiper sur les choses basiques des tableaux à 2 dimensions.
    J'ai ce programme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
     
    #include<stdlib.h>
    #include <stdio.h>
    #define DimLigne 2
    #define DimColonne 2
     
    void LigneEtoile() /* Ligne d'etoiles */
    {
        int i;
        printf("\n");
        for (i = 0; i < 15; i++)
        {
            printf("*");
        }
        printf("\n");
        printf("\n");
    }
     
    void AfficheTableau2d(int *Tab[][]) /* Procédure d'affiche d'un tableau à 2 dimensions */
    {
        int x, y;
        for(x = 0; x < DimLigne; x++)
        {
     
            for(y = 0; y < DimColonne; y++)
            {
                printf("Tab[%d][%d]=%d", x, y, Tab[x][y]);
                printf("\n");
            }
        }
     
    }
     
     
    int main ()
    {
        /* Remplissage du tableau à 2 dimensions */
        int tab[DimLigne][DimColonne];
        for(int x = 0; x < DimLigne; x++)
        {
            for(int y = 0; y < DimColonne; y++)
            {
                printf ("Saisir tab[%d][%d] : ", x, y);
                scanf("%d", &tab[x][y]);
            }
        }
     
        LigneEtoile();
     
        /* Affichage du tableau à 2 dimensions saisi avant */
        for(int y = 0; y < DimLigne; y++)
        {
     
            for(int x = 0; x < DimColonne; x++)
            {
                printf("tab[%d][%d]=%d", y, x, tab[y][x]);
                printf("\n");
            }
     
        }
     
        LigneEtoile();
     
        AfficheTableau2d(tab);
        return 0;
    }
    Ma structure ne marche pas, il est écrit "Array has incomplete element type 'int []' ".
    Je voudrais juste que ma fonction m'affiche le tableau précédemment remplit, comme le fait la partie du programme déjà écrite.
    Je précise que j'utilise Xcode.

    Pourriez-vous m'aider sur cette structure ?

    Merci d'avance !

  2. #2
    Expert confirmé
    Inscrit en
    Mars 2005
    Messages
    1 431
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 1 431
    Points : 4 182
    Points
    4 182
    Par défaut
    Tu dois préciser les dimensions du tableau à la fonction. De plus il s'agit d'un tableau d'int, pas d'int *. Essaies avec la signature suivante : void AfficheTableau2d(int Tab[DimLigne][DimColonne]).

  3. #3
    Expert éminent sénior

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 189
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 189
    Points : 17 141
    Points
    17 141
    Par défaut
    dans ta fonction affichage, l'argument est int *tab[][].

    Donc tab[x][y], comme tu l'écris, est un int*. Forcément, l'affichage ne marchera pas comme tu veux.

    En fait, le nom d'un tableau est automatiquement convertible en pointeur vers son premier élément.
    C'est même systématiquement le cas pour les tableaux en arguments.

    Comme c'est converti en pointeur, tu n'as plus d'information sur la taille du tableau, qu'il convient alors de prendre en argument.
    Le seul cas différent, c'est lorsque tu as une valeur sentinelle, comme le '\0' des chaines de caractères.

    Ainsi, la bonne fonction serait void AfficheTableau2d(int tab[][], unsigned int rows, unsigned int cols).
    Mes principes de bases du codeur qui veut pouvoir dormir:
    • Une variable de moins est une source d'erreur en moins.
    • Un pointeur de moins est une montagne d'erreurs en moins.
    • Un copier-coller, ça doit se justifier... Deux, c'est un de trop.
    • jamais signifie "sauf si j'ai passé trois jours à prouver que je peux".
    • La plus sotte des questions est celle qu'on ne pose pas.
    Pour faire des graphes, essayez yEd.
    le ter nel est le titre porté par un de mes personnages de jeu de rôle

  4. #4
    Membre du Club
    Homme Profil pro
    Lycéen
    Inscrit en
    Avril 2015
    Messages
    224
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Avril 2015
    Messages : 224
    Points : 62
    Points
    62
    Par défaut
    Merci pour les réponses ultra-rapides !

    Effectivement la "méthode" de Matt_Houston fonctionne correctement.

    J'avais mis un pointeur car j'avais fait comme ceci pour la structure qui affiche un tableau de dimension 1, et ça marchait bien.

    Par contre leternel, je veux bien essayer aussi comme tu m'as dit, mais je ne comprends les "unsigned int rows, unsigned int cols", enfin je veux dire, je ne comprends pas leur utilité. Pourrais tu m'expliquer à quoi ça sert ? Je me disais peut être que c'est ce qui remplace mes #define DimLigne et DimColonne mais apparemment non.

  5. #5
    Expert éminent sénior

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 189
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 189
    Points : 17 141
    Points
    17 141
    Par défaut
    En fait, ca permettrait de rendre la fonction utilisable avec d'autres tailles.

    Suppose que tu aies deux tableaux, de dimensions différentes,.tu ne voudrais pas avoir à écrire deux fonctions.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    #define MACRO_tab1_rows 4
    #define MACRO_tab1_cols 2
    #define MACRO_tab2_rows 2
    #define MACRO_tab2_cols 4
     
    void AfficheTableau2d(int tab[][], unsigned int rows, unsigned int cols);
     
    int main() {
        int tab1[MACRO_tab1_rows][MACRO_tab1_cols] = { {1,2}, {3,4}, {5,6}, {7,8} };
        int tab2[MACRO_tab2_rows][MACRO_tab2_cols] = { {1,2, 3,4}, {5,6, 7,8} };
     
        AfficheTableau2d(tab1, MACRO_tab1_rows, MACRO_tab1_cols);
        AfficheTableau2d(tab2, MACRO_tab2_rows, MACRO_tab2_cols);
        return 0;
    }
    Mes principes de bases du codeur qui veut pouvoir dormir:
    • Une variable de moins est une source d'erreur en moins.
    • Un pointeur de moins est une montagne d'erreurs en moins.
    • Un copier-coller, ça doit se justifier... Deux, c'est un de trop.
    • jamais signifie "sauf si j'ai passé trois jours à prouver que je peux".
    • La plus sotte des questions est celle qu'on ne pose pas.
    Pour faire des graphes, essayez yEd.
    le ter nel est le titre porté par un de mes personnages de jeu de rôle

Discussions similaires

  1. remplissage d'un tableau à 2 dimensions
    Par Amelie MOREAU dans le forum Langage
    Réponses: 7
    Dernier message: 04/04/2013, 16h52
  2. Remplissage d'un tableau de structure
    Par Bil'0x dans le forum C
    Réponses: 8
    Dernier message: 05/01/2013, 14h54
  3. [LG]Remplissage d'un tableau
    Par luno2545 dans le forum Langage
    Réponses: 2
    Dernier message: 29/01/2004, 21h47
  4. Réponses: 13
    Dernier message: 14/10/2003, 14h31
  5. Réponses: 11
    Dernier message: 04/08/2003, 15h30

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo