Salut, je post ici au lieu de faire un sujet.
J'aimerai créer une fonction qui créer un tableau avec x dimensions.
Merci
Est-ce vraiment utile ?
Ne pourrais-tu pas créer trois fonctions, (une pour 1d, 2d et 3d) et appeler en fonction de ?
Le 01 mai 2015 à 04:17:24 VampireGirl a écrit :
Est-ce vraiment utile ?Ne pourrais-tu pas créer trois fonctions, (une pour 1d, 2d et 3d) et appeler en fonction de ?
Non je laisse cette possibilité à l'utilisateur, c'est lui qui décide du nombre de dimensions.
Tu programmes avec quel langage ?
Oups, j'ai oublié de le dire, je code en C.
Je précise juste que la fonction ne doit pas retourner le tableau, donc pas de soucis de types.
J'ai l'impression que tu vas devoir utiliser des tableaux de pointeurs. Le nombre de pointeurs déterminerait le nombre de dimensions.
La difficulté sera d'initialiser les pointeurs avec malloc. Ca m'a l'air assez casse tête
Je ne vois pas comment faire, aurais-tu plus d'indications ?
Voici un exemple qui montre comment créer des tableaux avec des pointeurs :
http://fr.wikibooks.org/wiki/Programmation_C/Pointeurs#Tableaux_dynamiques_.C3.A0_deux_dimensions
Mais sans connaître directement le nombre de dimensions qu'il y aura ça m'a l'air compliqué
Le 01 mai 2015 à 04:40:09 VampireGirl a écrit :
Voici un exemple qui montre comment créer des tableaux avec des pointeurs :http://fr.wikibooks.org/wiki/Programmation_C/Pointeurs#Tableaux_dynamiques_.C3.A0_deux_dimensions
Mais sans connaître directement le nombre de dimensions qu'il y aura ça m'a l'air compliqué
Moi aussi ![]()
C'est pour ça que je pose la question ici...
Tu vas faire quoi d'un programme qui travaille avec + de 3 dimensions ? ![]()
Je développe un langage ![]()
J'ai une idée qui me vient :
Tu crées une boucle qui fini si le nombre de pointeurs demandés par l'utilisateur est atteint.
En fonction du nombre de pointeur, tu initialises les pointeurs, et à chaque fois que c'est fait tu passes au pointeur suivant tant que le nombre max n'est pas atteint. C'est une idée de base, mais bon c'est l'idée
Un pointeur pointant sur ?
c'est classique de travailler dans des espaces a plus de 3 dimension. C'est meme super classique en data mining. (Essentiellement chaque attribut est une dimension de plus.) C'est aussi courant dans les algo de programmation dynamique quand ils ont plus de 3 parametres (chaque parametre est une dimension).
Parcontre que quelqu'un cherches a developper un langage de programmation sans savoir faire un truc comme ca c'est un peu inquietant... Basiquement il faut allouer une zone de memoire uni dimensionnel et calculer tes index manuellement.. Reflechit a comment lineaire ton espace memoire pour un tableau 2D et en x dimension c'est essentiellement pareil.
En gros le pointeur doit pointer sur un autre pointeur. Dans le cas d'un tableau 2d par exemple, tu ferais :
int **p;
Le but en fait est d'initialiser chaque pointeur, pour avoir accès à la dimension suivante.
Le type après dépends de ce que tu veux, tu peux au pire faire void **p pour pointer sur tout type.
Je crois que tu devrais créer une struct, pour mémoriser le nombre de dimensions, et les pointeurs. Parce qu'il faut aussi libérer la mémoire...
Le 01 mai 2015 à 05:00:06 godrik a écrit :
c'est classique de travailler dans des espaces a plus de 3 dimension. C'est meme super classique en data mining. (Essentiellement chaque attribut est une dimension de plus.) C'est aussi courant dans les algo de programmation dynamique quand ils ont plus de 3 parametres (chaque parametre est une dimension).Parcontre que quelqu'un cherches a developper un langage de programmation sans savoir faire un truc comme ca c'est un peu inquietant... Basiquement il faut allouer une zone de memoire uni dimensionnel et calculer tes index manuellement.. Reflechit a comment lineaire ton espace memoire pour un tableau 2D et en x dimension c'est essentiellement pareil.
J'ai du mal à me représenter ça ![]()
Godrik
Merci, J'ai beaucoup de mal à réfléchir.
Cette solution m'était passée par la tête mais j'ai dû l'oublier
Le 01 mai 2015 à 05:03:26 VampireGirl a écrit :
En gros le pointeur doit pointer sur un autre pointeur. Dans le cas d'un tableau 2d par exemple, tu ferais :int **p;
- p représenterai chaque ligne, et **p les collones. Et ainsi de suite si tu as plusieurs dimensions.
Le but en fait est d'initialiser chaque pointeur, pour avoir accès à la dimension suivante.
Le type après dépends de ce que tu veux, tu peux au pire faire void **p pour pointer sur tout type.
Je crois que tu devrais créer une struct, pour mémoriser le nombre de dimensions, et les pointeurs. Parce qu'il faut aussi libérer la mémoire...
Ta solution me semble bien chiante à réaliser ![]()
Merci quand même, godrik a répondu à ma question.
¨Merci aussi au passage parce que je découvre un truc nouveau. Je vais me renseigner là-dessus.
Baudelairien, effectivement, et elle n'aurait mené à rien je pense. J'essayais de réfléchir en même temps que toi sur ce problème.
Par contre ça m'a l'air moins complexe à réaliser avec les templates en C++
Euh en fait non la solution de godrik ne me convient pas car elle nécessite de redéfinir tout le tableau à chaque nouvelle dimension.
Exemple :
1) Tableau de base : [ element1, element2 ]
2) On rajoute une dimension: [ element1, (case vide), element2, (case vide), element2, (case vide) ]