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 :

tableau à 3 dimensions


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    53
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 53
    Par défaut tableau à 3 dimensions
    bonjour , voilà j'ai une fonction qui génére un tableau de caractères à 3 dimensions et je voudrai qu'elle me retourne le tableau comment dois déclarer le type de ma fonction ?.
    Merci

  2. #2
    Expert confirmé
    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
    Par défaut
    Quelle que soit la dimension, si la fonction engendre un tableau, elle doit le faire de façon dynamique (malloc) et renvoyer l'adresse obtenue par malloc.
    Le type de retour de la fonction est dépendant du détail de la création du tableau par le(s) malloc. Il faudrait donc avoir un idée du code que tu utilises pour cette création.

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    53
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 53
    Par défaut
    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
    #include<stdio.h>
     
    char * tableau()
    {
         char tab[10][10][10];
         int a,b,c;
         char d='a';
     
         for(a=0;a<10;a++)
         {
         for(b=0;b<10;b++)
         {
                          for(c=0;c<10;c++)
         {
         tab[a][b][c]=d;
         }
         }
         }
         return tab;
    }
     
     
    int main(void)
    {
        char tab[10][10][10];
     
        int a,b,c;
     
        tab=tableau();
     
        for(a=0;a<10;a++)
         {
         for(b=0;b<10;b++)
         {
                          for(c=0;c<10;c++)
         {
         printf("%c",tab[a][b][c]);
         }
         }
         }
     
    }

  4. #4
    Expert confirmé
    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
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    char * tableau()
    {
         char tab[10][10][10];
    ...
         return tab;
    }
    Tu ne peux pas!
    Ton tableau est un tableau local à la fonction et sera DETRUIT en sortie de la fonction.
    Tu DOIS le créer par un malloc pour qu'il "survive" à la sortie de la fonction.

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    53
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 53
    Par défaut
    alors comment dois je faire pour allouer un tableau à 3d

    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
     
    #include<stdio.h>
     
    int car(int ***tab) 
    {
     
    int *** curtab = &*tab;
     
      int a=0,b=0,c=0;
      for(a=0;a<5;a++)
      {
       for(b=0;b<5;b++)
       {
        for(c=0;c<5;c++)
        {
           curtab[a][b][c]=1;
           }
           }
           }   
     
      for(a=0;a<5;a++)
      {
       for(b=0;b<5;b++)
       {
        for(c=0;c<5;c++)
        {
           printf("%d ",curtab[a][b][c]);
           }
           }
           }   
      printf("\n");
    }
    int main()
    {
    int ***tab=NULL;
    int a,b,c;
       tab = (int***)malloc(sizeof(int));
     
     
     for(a=0;a<5;a++)
       {
       tab[a]=(int **)malloc(sizeof(int));
       for(b=0;b<5;b++)
       {
       tab[a][b]=(int*)malloc(sizeof(int));
       }
       }
     
    if(tab==NULL){printf("non\n");}
    else {printf("oui\n");}
     
    car(tab);
    return 0;
    }

    // le seul problème c'est la fonction
    // aucune erreure et met oui pour le tableau allouer

  6. #6
    Expert confirmé
    Avatar de Thierry Chappuis
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Mai 2005
    Messages
    3 499
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Suisse

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 499
    Par défaut
    Si la taille du tableau est connue à l'exécution, on peut faire quelque chose comme:

    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
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    #include<stdio.h>
     
    #define X_SIZE 3
    #define Y_SIZE 4
    #define Z_SIZE 5
     
    #define ARRAY_SIZE(a) ( sizeof (a) / sizeof *(a) )
     
    struct Tableau3D
    {
        int data[X_SIZE][Y_SIZE][Z_SIZE];
        size_t xsize;
        size_t ysize;
        size_t zsize;
    };
     
    int init(struct Tableau3D *self)
    {
        int err = 0;
     
        if (self != NULL)
        {
            size_t i, j, k;
     
            self->xsize = ARRAY_SIZE(self->data);
            self->ysize = ARRAY_SIZE(self->data[0]);
            self->zsize = ARRAY_SIZE(self->data[0][0]);
     
            for (i = 0; i < self->xsize; i++)
            {
                for (j = 0; j < self->ysize; j++)
                {
                    for (k = 0; k < self->zsize; k++)
                    {
                        self->data[i][j][k] = i * self->ysize * self->zsize +
                                              j * self->zsize + k;
                    }
                }
            }
        }
        else
        {
            err = 1;
        }
     
        return err;
    }
     
    void display(struct Tableau3D *self)
    {
        if (self != NULL)
        {
            size_t i, j, k;
     
            for (i = 0; i < self->xsize; i++)
            {
                for (j = 0; j < self->ysize; j++)
                {
                    for (k = 0; k < self->zsize; k++)
                    {
                        printf("%3d ", self->data[i][j][k]);
                    }
                    printf("\n");
                }
                printf("\n\n");
            }
        }
    }
     
    int main(void)
    {
        struct Tableau3D tab;
     
        init(&tab);
        display(&tab);
     
        return 0;
    }
    Thierry
    "The most important thing in the kitchen is the waste paper basket and it needs to be centrally located.", Donald Knuth
    "If the only tool you have is a hammer, every problem looks like a nail.", probably Abraham Maslow

    FAQ-Python FAQ-C FAQ-C++

    +

Discussions similaires

  1. [Collections] lecture tableau 2 dimensions
    Par heloise dans le forum Collection et Stream
    Réponses: 2
    Dernier message: 30/09/2004, 10h49
  2. [tableau à 2 dimensions] association String et float
    Par LoLoSS dans le forum Collection et Stream
    Réponses: 3
    Dernier message: 12/07/2004, 10h53
  3. Tableau à n dimensions
    Par youb dans le forum MFC
    Réponses: 10
    Dernier message: 13/05/2004, 14h13
  4. Passage d'un tableau à deux dimensions
    Par karl3i dans le forum C
    Réponses: 3
    Dernier message: 20/10/2003, 14h50
  5. Réponses: 23
    Dernier message: 21/08/2003, 07h16

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