Retourner aux forums || Retourner au forum Programmation.c++

Programmation.c++ : Tableau a n dimensions

Posté par ThesmallgamerS () le 09 novembre 2006
0
Bonjour,

Je cherche une fonction, ensemble de fonctions ou expressions régulières qui puissent écrire dans un fichier Ascii les valeurs d'un tableau a n dimensions et surtout qui puissent recevoir en entrée un Ascii pour reconstituer le tableau a n dimensions (ce pour un programme expérimental où les données seront écrite sous forme de tableau a 4/5/6 dimensions, voir plus, mais j'ai du mal a conceptualiser au delà). Je séche actuellement sur le n, ou comment avoir un nombre de dimensions non fixé a la base.

Merci d'avance pour toute réponses, même si j'ai pas trop l'impression que les forums de DLFP soient fréquenté par d'autre chose que des trolls...

> Lire le message (7 commentaires, moyenne: 1,7).  

Cette discussion est archivée, il n'est plus possible de laisser des commentaires.

Note : les commentaires appartiennent à ceux qui les ont postés. Nous n'en sommes pas responsables.

pas clair.

Posté par Plop () le 09/11/2006 à 09:01. (lien). Évalué à 3.

C'est pas très clair tout ça. tu as un exemple de fichier ???



>les forums de DLFP soient fréquenté par d'autre chose que des trolls...

Quand tu demandes de l'aide à quelqu'un, ca serait bien de ne pas commencer à les insulter.

--
http://linuxfr.org/board <-- des moules, du sang, de la violence

syntaxe C(++)

Posté par Krunch (Jabber id, page perso, ) le 09/11/2006 à 09:23. (lien). Évalué à 2.

Tu peux représenter un tableau à n (ici 4) dimensions comme en C(++) :

int tab[][2][2][2] = {
        {
                {
                        { 42, 69 },
                        { 13, 37 }
                },
                {
                        { 666, 8012 },
                        { 1000, -1 }
                }
        },
        {
                {
                        { 38 }
                }
        }
};
Mais ça t'oblige à connaître les limites de toutes les dimensions sauf la première. Pour parser, soit tu le fais faire directement par le compilateur, soit avec bison. Si tu choisis bison ou ton propre parser, tu n'es plus obligé de connaître les limites à l'avance.
Pour ce qui est de dumper le tableau dans un fichier, c'est trivial.
Par ailleurs traiter de troll les personnes qui sont susceptibles de t'aider n'est sans doute pas le meilleur moyen d'obtenir une réponse pertinente.
	

--
Free Softwares Users Group Arlon (Sud Luxembourg, Belgique)
pertinent, e adj. Approprié ; qui se rapporte exactement à ce dont il est question.
  • [^]Re: syntaxe C(++)

    Posté par ThesmallgamerS () le 09/11/2006 à 11:00. (lien). Évalué à 2.

    Merci pour ta réponse et je m'escuse si ma dernièr remarque a pu paraitre désobligeante. A l'écrit les mots sont bien plus choquant qu'a l'oral, d'où l'importance de ne pas oublier les clins d'oeil ;-)

    Quand a ta representation de tableau a n dimension, je la trouve très interressante a mettre en oeuvre bien que cela ne réponde pas vraiment a mon problème.

    En fait, j'ai réussi a contourner le problèmes (pas de possibilité de specifier un tableau de N dimensions a la volée) en utilisants les pointeurs.

    Merci pour vos réponses.

Re : Tableau a n dimensions

Posté par Pol' uX () le 09/11/2006 à 09:34. (lien). Évalué à 1.

Je ne connais pas de librairie qui permette ça (d'ailleurs je ne programme pas en C++), mais amha un tableau à n dimensions peut être vus comme un arbre (c'est une idée, je ne sais pas ce que ça vaut) :

Un tableau à 1 dimension (i1) peut être vu comme un noeud avec i branches qui lient la donnée (ou une référence, mais c'est du détail).

Un tableau à 2 dimensions (i1,i2) peut être vu comme un noeud avec i1 branches, qui chacune relient un noeud avec i2 branches qui lient la donnée.

...

Par récurrence, un tableau à n dimensions (i1, i2, ..., in) peut être vu comme un noeud avec i1 branches, qui chacune relient un tableau à n-1 dimension (i2, ..., in).

Il te reste encore à stocker ton joli arbre, dont les données sont ascii, mais je pense qu'un parser/writer xml devrait parfaitement faire l'affaire. Attention à préserver l'ordre des données si c'est important.

--
Soutenez le logiciel libre, en adhérant dès maintenant à l'April

Matrices creuses

Posté par Aurélien Girard () le 09/11/2006 à 11:35. (lien). Évalué à 2.

Ca me rappelle mes cours de C à la fac ;)

Une solution me rappelle particulièrement un projet sur les "matrices creuses", c'est à dire des matrices qui sont presque toutes vides.

Il s'agit alors de représenter non pas toute la matrice mais seulement les éléments non nuls, avec leur "coordonnées", pour gagner de la place.

Il faut donc des n-uplets {indice 1}{indice 2}...{indice n}=valeur

Par exemple pour une matrice à 4 dimensions :

{1}{7}{0}{3}=42
{3}{7}{6}{2}=42
{1}{2}{0}{1}=42
{1}{7}{8}{4}=42
{7}{8}{0}{2}=42

et ainsi de suite pour chacune des "cases" de ta matrice à n dimensions.


Une recherche sur ton moteur de recherche favori te donnera des milliards d'exemples de TD/TP d'informatique sur le sujet.
Par exemple :
http://www.cppfrance.com/gma/matrice%20creuse
http://www.dil.univ-mrs.fr/~garreta/M1Math/exams/Test_603.pd(...)
...


Bon amusement !

...

Posté par Luc Hermitte (page perso, ) le 09/11/2006 à 13:07. (lien). Évalué à 1.

M'est avis que tu vas avoir un problème de typage.
Bien avant de décoder ton tableau, tu vas devoir savoir ce que tu vas décoder -- quel intérêt à stocker des données que l'on ne saurait pas manipuler ?

Perso, j'aurai tendance à jouer avec boost.multi_array (tableaux à N dimensions, le nombre de dimensions étant statique (devant être connu à la compilation), boost.any (pour contourner le systême de typage et donc mélanger carottes et choux -- les nombres dimensions quoi), boost.serialize (pour gérer sérialisation et désérialisation de tes tableaux si rien n'est déjà défini par défaut).

une petite réponse

Posté par wxuserbrest () le 20/11/2006 à 15:50. (lien). Évalué à 1.

je vois à priori ton problème mais comme tu es en C++ et non en C tu devrais utiliser la programmation objet pour encapsuler tes données dans un objet. Avec un tableau de taille n, tu ne peux faire autrement que dire (au moins pour la sauvegarde) à la fonction qui réalise cette sauvegarde la taille du tableau. Pour la lecture c'est un peu plus difficile, il faut passer par un pointeur. Mais la meilleure des solutions et de créer un objet qui se charge de la lecture et de la sauvegarde. Une espèce de sérialisation / désérialisation en sorte.
Cordialement

Revenir en haut de page || Retourner aux forums || Retourner au forum Programmation.c++