Forum Programmation.c++ Tableau a n dimensions

Posté par  .
Étiquettes : aucune
0
9
nov.
2006
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...
  • # pas clair.

    Posté par  . É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.
  • # syntaxe C(++)

    Posté par  (site web personnel) . É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.
    

    pertinent adj. Approprié : qui se rapporte exactement à ce dont il est question.

    • [^] # Re: syntaxe C(++)

      Posté par  . É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  (site web personnel) . É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.

    Adhérer à l'April, ça vous tente ?

  • # Matrices creuses

    Posté par  . É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 !

    BeOS le faisait il y a 20 ans !

  • # ...

    Posté par  (site web personnel) . É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  . É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

Suivre le flux des commentaires

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