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 :

Comment créer un tableau à 3D par rapport à des variables


Sujet :

C

  1. #1
    Membre du Club Avatar de CactO_o's
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    98
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 98
    Points : 47
    Points
    47
    Par défaut Comment créer un tableau à 3D par rapport à des variables
    Bonjour à tous !

    J'ai un petit problème, il faut que j'envoie un tableau à 3 dimensions d'une fonction à une autre. Pour le moment rien de compliquer, le problème est que je ne connais qu'une seul solution sur les 3...

    Pour bien comprendre un petit bout de code :


    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
    void fonction2(int tailleX, int tailleY, int tableau[][][3])
    {
        /************************
           utilisation du tableau
         ************************/
    }
     
    void fonction1()
    {
        int tailleX = 0, tailleY = 0;
     
         /**************
           tailleX = ??;
           tailleY = ??;
         ***************/
     
        int tableau[tailleX][tailleY][3] = {0};
     
        fonction2(tailleX, tailleY, tableau);
    }
    Comme vous le savez surement tous, ce code ne marche pas... Mais au moins sa me permet de vous faire comprendre...

    Je ne sais vraiment pas comment faire. Aidez-moi

    Merci à tous

  2. #2
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Points : 13 017
    Points
    13 017
    Par défaut
    Bonjour,
    A priori, la seule solution serait une allocation dynamique de ton tableau:
    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
    void fonction2(int P_iTailleX, int P_iTailleY, int *P_piTableau)
    {
        /************************
           utilisation du tableau
         ************************/
    }
     
    void fonction1()
    {
        int L_iTailleX;
        int L_iTailleY;
        int *L_piTableau;
    
        L_iTailleX = 0;
        L_iTailleY = 0;
        
         /**************
           L_iTailleX = ??;
           L_iTailleY = ??;
         ***************/
         L_piTableau = malloc(sizeof(int)*L_iTailleX*L_iTailleX*3);
         if(L_piTableau){  
              fonction2(L_iTailleX, L_iTailleX, L_piTableau);
         }
         else{
              /* Erreur d'allocation! */
         }
    }

  3. #3
    Membre régulier
    Inscrit en
    Mai 2008
    Messages
    126
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 126
    Points : 91
    Points
    91
    Par défaut
    mais moi j'aurai plus fait de l'allocation dynamique comme ceci:

    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
     
    void fonction2(int tailleX, int tailleY, int tailleZ, int ***tableau)
    {
        /************************
           utilisation du tableau
         ************************/
    }
     
    void fonction1()
    {
        int tailleX = 1, tailleY = 1, tailleZ = 3;
        int ***tableau;
        int i,j;
     
        tableau = (int ***)malloc(tailleX *sizeof(int **));
        for (i=0;i<tailleX ;i++){
            tableau[i]=(int **)malloc(tailleY *sizeof(int *));
            for (j=0;j<tailleY ;j++){
                tableau[i][j] = (int *)malloc(tailleZ *sizeof(int));
            }
        }
     
        fonction2(tailleX, tailleY, tailleZ, tableau);
    }
    je pense aussi que le fait de mettre 0 en taille ça peut poser des problèmes

    si tu veux rester en statique :

    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
     
    void fonction2(int tailleX, int tailleY, int tailleZ, int tableau[tailleZ ][tailleY][tailleZ])
    {
        /************************
           utilisation du tableau
         ************************/
    }
     
    void fonction1()
    {
        int tailleX = 1, tailleY = 1, tailleZ = 3;
        int tableau[tailleX ][tailleY ][tailleZ ];
     
        fonction2(tailleX, tailleY, tailleZ, tableau);
    }

  4. #4
    Membre du Club Avatar de CactO_o's
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    98
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 98
    Points : 47
    Points
    47
    Par défaut
    Merci beaucoup à vous, je vais avoir de quoi me pencher sur le sujet et travailler.

    Je vais étudier vos code et je reviendrai Editer après pour donner des nouvelles

    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
    void fonction(int tailleX, int tailleY, int tailleZ, int tableau[tailleZ ][tailleY][tailleZ])
    {
     
    }
     
     
     
    void editerMap(char listeMap[], char sauvName[])
    {
        int tailleX = 1, tailleY = 1, tailleZ = 3;
        int tableau[tailleX ][tailleY ][tailleZ ];
     
        fonction(tailleX, tailleY, tailleZ, tableau);
     
    }
    Il me semblait bien que la méthode du tableau statique ne fonctionne pas :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    54 gestionMenuEditeurMap.cpp `tailleZ' was not declared in this scope 
    54 gestionMenuEditeurMap.cpp `tailleY' was not declared in this scope 
    54 gestionMenuEditeurMap.cpp `tailleX' was not declared in this scope
    PS : la ligne 54 est la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    void fonction(int tailleX, int tailleY, int tailleZ, int tableau[tailleZ ][tailleY][tailleZ])

  5. #5
    Scorpi0
    Invité(e)
    Par défaut
    Un conseil : utilise la version dynamique !!

    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
    void fonction2(int tailleX, int tailleY, int tailleZ, int ***tableau)
    {
        /************************
           utilisation du tableau
         ************************/
    }
     
    void fonction1()
    {
        int tailleX = 1, tailleY = 1, tailleZ = 3;
        int ***tableau;
        int i,j;
     
        tableau = (int ***)malloc(tailleX *sizeof(int **));
        for (i=0;i<tailleX ;i++){
            tableau[i]=(int **)malloc(tailleY *sizeof(int *));
            for (j=0;j<tailleY ;j++){
                tableau[i][j] = (int *)malloc(tailleZ *sizeof(int));
            }
        }
     
        fonction2(tailleX, tailleY, tailleZ, tableau);
    }

  6. #6
    Membre du Club Avatar de CactO_o's
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    98
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 98
    Points : 47
    Points
    47
    Par défaut
    Ouais je vais surement utiliser cette version, mais je voulais quand même essaye les autres pour voir..

    Par contre par rapport à cette façon dynamique, peut on changer la valeur de la taille d'une dimension du tableau au cour du programme ?
    Si oui, comment ?

    Merci

  7. #7
    Expert éminent sénior
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Points : 13 926
    Points
    13 926
    Par défaut
    C'est possible.
    On utilise la fonction realloc. Mais il faut faire attention parce que

    - la réallocation peut échouer (comme l'allocation avec malloc et le code présenté ci-dessus devrait être complété pour tester cette possibilité)

    - la réallocation peut changer l'adresse du bloc alloué.

Discussions similaires

  1. [XL-2010] Tableau automatique par rapport à des données d'un autre tableau
    Par ZHNEE dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 14/12/2014, 19h21
  2. Réponses: 9
    Dernier message: 09/12/2013, 16h32
  3. [Interbase]Comment créer une source ODBC par programme ?
    Par touhami dans le forum Bases de données
    Réponses: 1
    Dernier message: 13/03/2006, 16h40
  4. Réponses: 10
    Dernier message: 02/11/2005, 11h12
  5. Comment créer un nouveau dossier par programmation ?
    Par annecyrond dans le forum Langage
    Réponses: 3
    Dernier message: 27/03/2003, 07h59

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