Partage
  • Partager sur Facebook
  • Partager sur Twitter

Comprends rien aux tableaux multidimensionnels

Sujet résolu
    19 avril 2006 à 22:08:06

    Bonjours les zéros , je voudrais vous demander ce qu'est un tableau multidimensionel, si c'est avantageux , et comment les utiliser! Je vous assure avoir chercher sur le net , mais n'avoir rien trouvé de compréhensif !Merci d'avence
    • Partager sur Facebook
    • Partager sur Twitter
      19 avril 2006 à 22:15:10

      il ne faut pas que tu fasse attention au terme "multi dimensionel", c'est un mot qui peut faire fliper comme ça, alors qu'en fait c'est tout con.

      Un tableau, tu sais ce que c'est? C'est une suite de case qui contiens des trucs, on est d'accord.
      Il peut contenir des int, des double, des char, etc...
      Qu'est ce qui empeche qu'il contienne des tableaux?
      Tu peux creer un tableau qui contient des tableau qui contiennent des int. C'est donc un tableau à 2 dimensions.
      Mais ces tableaux, peuvent encore contenir des tableau, ça devient un tableau à 3 dimensions, etc...

      Enfait, pour vraiment comprendre exactement ce qu'est un tableau multidimensionel, il faudrait que tu saches c'est quoi le raport entre les tableaux et les pointeurs, je ne sais pas si c'est ton cas...
      • Partager sur Facebook
      • Partager sur Twitter
        19 avril 2006 à 22:16:08

        Le rapport entre les tableaux et les pointeurs ? c'est à dire ...
        • Partager sur Facebook
        • Partager sur Twitter
          19 avril 2006 à 22:16:48

          Citation : NarTy

          je voudrais vous demander ce qu'est un tableau multidimensionel, si c'est avantageux , et comment les utiliser!


          C'est pratique pour représenter des données en 2 dimensions, comme une image, un plan, un damier, une matrice... Tant que tu n'en as pas l'utilité, tu ne trouveras pas ça ... utile !

          Pense à une bataille navale, comment accéder aux éléments si ce n'est en utilisant un système de coordonnées cartésiennes...

          Pour 3 dimensions, on pense à la '3D', volume, espace etc.

          Au-dessus, ça devient un peu plus difficile pour nous pauvres êtres vivants en 3D (allez, 4 avec le temps...)

          Mais pour des données, il n'y a pas de limite à une organisation en tableau multidimentionnels, tant que les données sont de même nature (type).
          • Partager sur Facebook
          • Partager sur Twitter
          Music only !
            19 avril 2006 à 22:18:25

            Je comprends le concept , mais comment l'utiliser en C ?
            • Partager sur Facebook
            • Partager sur Twitter
              19 avril 2006 à 22:20:46

              En faite l'avantage des tableau multidimensionnel est qu'on peut indiquer le nombre de mot et le nombre de lettre par mot qu'il y aura dans ce tableau
              ex :
              char citer_vos_noms[5][10];
              le tableau aura donc 5 mot et ces mots seront maximum de 10 lettres !
              dites moi si je me trompe je pense pas pas me tromper (je susi debutant aussi lool)
              • Partager sur Facebook
              • Partager sur Twitter
                19 avril 2006 à 22:24:04

                ah un exemple ? c'est bon ? Mais apres , faut faire comme ca par exemple ?

                char citer_vos_noms[5][10];
                citer_vos_noms[1] = "Jean-marc";
                citer_vos_noms[2] = "Claude";
                // etc...
                • Partager sur Facebook
                • Partager sur Twitter
                  19 avril 2006 à 22:27:22

                  OUI , mais tu peut faire autrement !
                  char citer_vos_noms[5][10] = {"jean marc","philippe"};

                  normalement sa aussi c'est bon comme methode !
                  verifie au cas où lool
                  • Partager sur Facebook
                  • Partager sur Twitter
                    19 avril 2006 à 22:29:30

                    ce serait pas plutot

                    char citer_vos_noms[5][10];
                    citer_vos_noms[1][1] = "Jean-marc";
                    citer_vos_noms[2][1] = "Claude";


                    ???
                    • Partager sur Facebook
                    • Partager sur Twitter
                      19 avril 2006 à 22:31:19

                      Vous voyez que c'est un casse-tete ;) !
                      int main()
                      {
                      char citer_vos_noms[5][10];
                      citer_vos_noms[1] = "Jean-marc";
                      citer_vos_noms[2] = "Claude";
                              return 0;
                      }

                      Ce code retourne :
                      main.c:11: error: incompatible types in assignment
                      main.c:12: error: incompatible types in assignment

                      int main()
                      {
                      char citer_vos_noms[5][10];
                      citer_vos_noms[1][1] = "Jean-marc";
                      citer_vos_noms[2][1] = "Claude";
                              return 0;
                      }

                      Ce code retourne :
                      main.c:11: warning: assignment makes integer from pointer without a cast
                      main.c:12: warning: assignment makes integer from pointer without a cast

                      • Partager sur Facebook
                      • Partager sur Twitter
                        19 avril 2006 à 22:32:45

                        Citation : NarTy

                        Je comprends le concept , mais comment l'utiliser en C ?


                        Tu définies un tableau à 2 dimensions :


                        Création d'un tableau d'int de 3 x 4 :
                        #define X 3
                        #define Y 4

                        int tab[X][Y];

                        après tu utilises des indices pour accéder aux données. Par exemple, effacer :

                        size_t i;
                        for (i = 0; i < X; i++)
                        {
                           size_t j;
                           for (j = 0; j < Y; j++)
                           {
                              tab[i][j] = 0;
                           }
                        }

                        etc.

                        Je recherche un exemple que j'ai posté aujourd'hui ... voilà :

                        http://www.siteduzero.com/forum-83-34229-257307.html#r257307

                        • Partager sur Facebook
                        • Partager sur Twitter
                        Music only !
                          19 avril 2006 à 22:34:51

                          mais non c'est pas casse tête, faut juste un temps d'adaptation.

                          Par contre, quand on manipule des tableau, on est rapidement confronté à de l'allocation dynamique, donc faits gaffe
                          • Partager sur Facebook
                          • Partager sur Twitter
                            19 avril 2006 à 22:36:11

                            Citation : NarTy

                            ah un exemple ? c'est bon ? Mais apres , faut faire comme ca par exemple ?


                            char citer_vos_noms[5][10];
                            citer_vos_noms[1] = "Jean-marc";
                            citer_vos_noms[2] = "Claude";
                            // etc...

                            Pour copier une chaine, on utilise, par exemple, strcpy()... Tu n'as donc pas lu les cours de M@ateo ?
                            • Partager sur Facebook
                            • Partager sur Twitter
                            Music only !
                              19 avril 2006 à 22:36:18

                              si on reprends la descprition du problème par corebau, à savoir que la deuxième dimension serait le nombre de lettre max d'un nom, alors ce serait :


                              char citer_vos_noms[5][10];
                              citer_vos_noms[0][0] = "J";
                              citer_vos_noms[0][1] = "e";
                              citer_vos_noms[0][2] = "a";
                              citer_vos_noms[0][3] = "n";

                              citer_vos_noms[1][0] = "C";
                              citer_vos_noms[1][1] = "l";
                              citer_vos_noms[1][2] = "a";
                              citer_vos_noms[1][3] = "u";
                              citer_vos_noms[1][4] = "d";
                              citer_vos_noms[1][5] = "e";


                              etc

                              bien sur, initialiser comme ca, c'est pas idéal

                              donc en général, on fait une boucle comme -ed-

                              n'oubliez pas que la première valuer d'un tableau est à 0
                              • Partager sur Facebook
                              • Partager sur Twitter
                                19 avril 2006 à 22:37:22

                                ba oui mais comment tu veux utiliser une boucle pour entrer des noms??? :)
                                Et puis de toute façon, ton programme va planter quand tu arriveras à: citer_vos_noms[1][5] = "e";
                                car la derniere case du tableau c'est [1][4]

                                EDIT: oups, désolé, j'ai dit une connerie :D
                                • Partager sur Facebook
                                • Partager sur Twitter
                                  19 avril 2006 à 22:38:28

                                  Citation : N@CR0T!C

                                  ce serait pas plutot

                                  char citer_vos_noms[5][10];
                                  citer_vos_noms[1][1] = "Jean-marc";
                                  citer_vos_noms[2][1] = "Claude";




                                  Un pointeur dans un char ? Tu crois vraiment que ça a un sens ?


                                  :colere::colere::colere: Il faudrait peut être arréter de programmer au hasard et relire les cours...

                                  Ca vaut pour tout ceux qui ont éssayé de répondre à la question originale. Relisez les cours au lieu d'essayer de faire rentrer n'importe quoi n'importe où...

                                  • Partager sur Facebook
                                  • Partager sur Twitter
                                  Music only !
                                    19 avril 2006 à 22:40:22

                                    mais non c'est bien de programmer au hasard. C'est comme ça qu'on se plante et qu'on apprend
                                    • Partager sur Facebook
                                    • Partager sur Twitter
                                      19 avril 2006 à 22:42:12

                                      Merci à vous je bosserai dessus ce week-end @+
                                      EDIT :

                                      Citation : -ed-

                                      Il faudrait peut être arréter de programmer au hasard et relire les cours...


                                      Heu, comment te dire ?? Ya ca dans les cours ? Ils expliquent les talbeaux multidimensionnels ? :colere:
                                      • Partager sur Facebook
                                      • Partager sur Twitter
                                        19 avril 2006 à 22:52:06

                                        Enfait, quand on est débutant, on a tendance à manipuler les tableaux un peu bêttement, en utilisant les crochet et tout.

                                        Mais enfait, ça peut aider de savoir que un tableau c'est: une suite de case memoire (assées grandes pour contenir le type qu'on a choisit: des entiers, ou autre), et un pointeur qui pointe vers la premiere case du tableau. C'est comme ça que c'est fait enfait un tableau.

                                        Alors un tableau qui contiens des tableau, enfait c'est quoi? Enfait c'est juste un tableau qui contiens des pointeurs. Voilà, et ensuite ces pointeurs vont pointer vers d'autres tableaux.

                                        Par exemple, pour declarer un tableau d'entier, tu ferais: int tab[];
                                        Mais pour declarer un tableau de pointeurs qui vont pointer vers des int, tu fais: int* tab[]

                                        Voilà, à ce stade, tu as un pointeur dans chaque case du tableau. Maintenant ce qu'il faut, c'est faire une allocation dynamique pour faire pointer ces pointeurs vers la premiere case d'un nouveau tableau (et le faire pour chaqu'un des pointeurs, donc dans une boucle)

                                        Savoir que ça marche comme ça, ça peut aider à comprendre. Par contre il faut savoir ce qu'est un pointeur, et ça, comme le dit matéo, c'est le + dur lol
                                        • Partager sur Facebook
                                        • Partager sur Twitter
                                          19 avril 2006 à 23:06:50

                                          Citation : NarTy

                                          Merci à vous je bosserai dessus ce week-end @+
                                          EDIT :

                                          Citation : -ed-

                                          Il faudrait peut être arréter de programmer au hasard et relire les cours...


                                          Heu, comment te dire ?? Ya ca dans les cours ? Ils expliquent les talbeaux multidimensionnels ? :colere:



                                          Ben oui, le dernier TP (mario sokoban) utilise des tableaux multidimensionnels. C'est expliqué dans ce chapitre.
                                          • Partager sur Facebook
                                          • Partager sur Twitter

                                          If you'd like to join us, read "How do we work at OpenClassrooms"! :)

                                            20 avril 2006 à 0:01:19

                                            Citation : nonpoluant

                                            Enfait, quand on est débutant, on a tendance à manipuler les tableaux un peu bêttement, en utilisant les crochet et tout.


                                            Il n'y rien de bête là dedans. C'est fait pour, et je ne vois pas pourquoi on utiliserait pas les index pour adresser les éléments du tableau...

                                            Citation : nonpoluant


                                            Mais enfait, ça peut aider de savoir que un tableau c'est: une suite de case memoire (assées grandes pour contenir le type qu'on a choisit: des entiers, ou autre), et un pointeur qui pointe vers la premiere case du tableau. C'est comme ça que c'est fait enfait un tableau.


                                            Tu parles du nom du tableau ? Pour être précis, c'est une non modifiable L-value, c'est à dire que c'est un objet pointeur mais que l'on ne peut pas modifer. Cet objet a pour valeur l'adresse du premier élément du tableau et pour type pointeur sur le type des éléments. Mais ce n'est pas un pointeur ordinaire. Il ne peut pas être modifié (pas de tab++, ni de tab=), mais il peut être initialisé. Par contre, on peut prendre son adresse &tab, qui a pour valeur l'adresse du premier élément du tableau et pour type 'pointeur sur tableau de n types de l'élement'

                                            T a[10];
                                            T *pa = a;
                                            T(*p)[10] = &a;


                                            Citation : nonpoluant


                                            Alors un tableau qui contiens des tableau, enfait c'est quoi? Enfait c'est juste un tableau qui contiens des pointeurs. Voilà, et ensuite ces pointeurs vont pointer vers d'autres tableaux.


                                            Tu l'embrouilles. Un tableau à 2 dimensions est aussi linéaire qu'un tableau à une dimension. Physiquement, il n'y a aucune difference, c'est une séquence d'objets identiques. Point.

                                            Ce dont tu parles, c'est d'une des manières d'implémenter un tableau dynamique à deux dimensions. Je pense que tu ne maitrise pas encore assez le sujet pour l'enseigner...
                                            • Partager sur Facebook
                                            • Partager sur Twitter
                                            Music only !
                                              20 avril 2006 à 4:08:11

                                              désolé il est 4H10 du mat chez moi, alors j'suis peut être un peu trop iritable
                                              mais moi je trouve que tu te la raconte un peu trop
                                              enfin c'est juste mon avis

                                              J'suis un zero, mais j'trouve que là tu vas vraiment chercher des puces là où y en a pas, j'ai rien dit d'extravagant, alors qu'est c'que tu me soul à me reprendre sur tout ce que je dis comme ça? (désolé, j'aime pas trop qu'on me dise de la fermer)

                                              J'suis pas assé calé pour enseigner? Peut-être, mais toi tu te la pete un peu trop ne serais-ce que pour désérer les dents
                                              • Partager sur Facebook
                                              • Partager sur Twitter

                                              Comprends rien aux tableaux multidimensionnels

                                              × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                                              × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                                              • Editeur
                                              • Markdown