Déclarer une variable tableau selon l'informations des dimensions contenue dans [Résolu]

Signaler
Messages postés
35
Date d'inscription
mercredi 24 novembre 2004
Statut
Membre
Dernière intervention
6 juillet 2009
-
Messages postés
35
Date d'inscription
mercredi 24 novembre 2004
Statut
Membre
Dernière intervention
6 juillet 2009
-
Bonjour à tous !
Je veux faire ces deux chose :
1. Dimensionner une variable tableau dynamique avec des dimensions dont les informations (des dimensions, min et max) sont dans 2 arrays...
Le nombre de dimensions est déterminé par le nombre de valeurs dans l'array.
avec 5 dimensions dans cette exemple :

Dim Tab() as double
ArrayMin = {0,0,1,1,0}
ArrayMax = {25,50,20,20,10}
Redim Tab(0 to 25, 0 to 50, 1 to 20, 1 to 20, 0 to 10)    'C'est cette ligne que je ne veux pas écrire à tout les fois que les arrays change !!!!!

J'écrirais plutot quelque chose du genre :
Redim Tab(ArrayMin to ArrayMax)

Mais comment faire ???

2. Deuxièmement .. je voudrais accéder à une valeurs dans ce tableau à X dimensions (5 pour l'exemple) .. à l'aide d'un array encore une fois
Exemple :
Array1 = {10,37,12,18,5}
Valeur = Tab(10,37,12,18,5)   'C'est cette ligne que je ne veux pas écrire

Je voudrais écrire dequoi d'équivalent à :
Valeur = Tab(Array1)

Comment je peux faire ca ???

Pour les solution .. oublié pas que le nombre de dimensions peut changer ..c'est 5 juste pour les exemples

Merci pour celui qui pourra m'aider ... c'est le genre de programmation qu'on n'a pas besoin de faire souvent .. mais la .. c'est la seul solution pour mon projet mais je ne peux pas vous expliquer le projet .. trop compliqué et ca sort de l'ordinaire meton ...
J'espère vraiment que c'est possible !!! .. sinon je sait pas comment je vai m'arranger !!!

8 réponses

Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
70
Hélas non, tu ne peux pas rendre paramétrable la profondeur du tableau.
Ce qui m'épate, c'est ce que tu vas mettre dans ce tableau ?
7 dimensions, c'est déjà énorme et je ne vois pas quelle application peut avoir besoin de 7 dimensions.
Il faut quand même garder à l'esprit que ces données sont stockées en mémoire.
D'après le tableau à 5 dimensions que tu donnes en exemple "25,50,20,20,10", ça te fera quand même 5.000.000 de valeurs Double, c'est à dire 5 * 8 = 40.000.000 d'octets en mémoire, soit plus de 38 Mo !! (même s'il n'y a pas de valeur dans toutes les cases)
C'est énorme.

En dernier recours, tu peux imaginer une base de données.
Tu crées une table comportant deux champs :
   -1- la multi-dimension sous forme d'un texte où chaque dimension est séparée par un espace par exemple "18 32 68 17".
   -2- la valeur, exemple 2.566489
Dans ton programme, au moment où tu découvres le nombre de dimensions, tu sauras combien de chiffres tu dois fournir pour enregistrer une valeur.
Il faudra ensuite enregistrer autant de valeurs qu'il y a de combinaisons; ça risque de prendre du temps de stocker 5 millions d'enregistrements !
Nota : La limite de taille sous Access est de 2Go par table, 4 Go sous SQL Server.
Ensuite, tu interroges ta DB en recherchant l'enregistrement qui correspond; Là, tu peux préparer une chaine sTemp dans laquelle tu mets "18 32 68 17" que tu recherches et tu interroges avec une syntaxe SQL classique   sSQL "Select laValeur Where MultiDim '" & sTemp & "'"

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

<hr />Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
Messages postés
13280
Date d'inscription
lundi 13 décembre 2004
Statut
Modérateur
Dernière intervention
3 février 2018
35
salut,

avec "5" variable, ce n'est pas possible

bizarre de demander de l'aide à des personnes pour qui ton problème sera trop dur à comprendre, non?

solution éventuelle => utilise un tableau de collections de tableaux de type
(ou une collection de tableaux de tableaux? je sais plus ^^)

non il nous faut plus d'explications, c'est certain
mais le TYPE perso doit avoir une part dans la solution

++

<hr size="2" width="100%" />
Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
70
Salut
Sujet intéressant.

Première remarque : Tu ne peux pas utiliser un mot clé du langage (ou d'objet) comme nom de variable : Tab
   Il faut en changer : par exemple aTab (a pour Array)

Deuxième remarque :
   Cette syntaxe n'existe pas en VB6
   ArrayMax = {25,50,20,20,10}
   A remplacer par
   Dim ArrayMax As Variant
   ArrayMax = Array(25, 50, 20, 20, 10)

Est-ce que les limites basses de tes tableaux changent ?
Si oui : Impossible de faire du Redim en changeant la valeur basse (voir l'aide)
Si non : Laisse la limite basse en fixe et jongle avec les limites hautes
Exemple :
   <strike>ArrayMin = {0,0,1,1,0}</strike>
    Dim aTab() As Double
    Dim ArrayMax As Variant
    ArrayMax = Array(25, 50, 20, 20, 10)
    ReDim aTab(0 To ArrayMax(0), 0 To ArrayMax(1), 1 To ArrayMax(2), 1 To ArrayMax(3), 0 To ArrayMax(4))

Presque même remarque pour ta deuxième question :
   Array1 = {10,37,12,18,5}   <-- Syntaxe inexistante en VB6
+ Si tu veux récupérer ta valeur en envoyant un tableau, il te suffit de créer une fonction qui te renverra le résultat :
   Dim Array1 As Variant
   Array1 = Array(10, 37, 12, 18, 5)
   Valeur = ValTab(Array1)
avec la fonction :
   Private Function ValTab(maDemande As Variant) As Double
      ValTab = aTab(maDemande(0), maDemande(1), maDemande(2), maDemande(3), maDemande(4))
   End Function

La fonction Array(...) n'accepte que les variables dimensionnées en Variant.
Dans ce cas d'utilisation, le tableau ainsi fabriqué tardivement, à un index qui commence à 0.

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

<hr />Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
Messages postés
35
Date d'inscription
mercredi 24 novembre 2004
Statut
Membre
Dernière intervention
6 juillet 2009

Je te remerci beaucoup pour ta réponse aussi bien détaillé !

J'ai pas besoin de changé mes valeurs basses...
Pour la remarque à propos de comment entrée un array .. je cherchais justement comment faire .. J'avais pas posé la question mais merci

Par contre, la partie principale de ma question n'a pas été répondue désolé (j'ai peut-être pas été assez clair) , je vai essayer de clarifier ma question....

Mon problème viens du fais que l'array, je ne sais pas combien il va y avoir d'argument dedans. Si il y en a 5, la fonction marchera mais si il y en a 7, elle ne marchera pas ...
Ce que je veux est que la fonction redim le tableau à 7 dimensions quand il y a 7 argument et qu'elle le redimensionne à 5 si il y en a cinq ...
Je pourrais préparer une déclaration pour 5 et 7 que quand l'array à 5 argument j'utilise la déclaration à 5 et quand il y en a 7 j'utilise la déclaration à 7 ....
Mais j'aimerais ne pas avoir de limite du fais que je doit prévoir toute les possibilité de nombre d'argument dans l'array ... je veux que cela soit dynamique ...

Bref, ce n'est pas seulement la longueur de chaque dimensions qui doit être dynamique, mais aussi le nombre de dimensions lui même doit être dynamique ...

j'espère que quelqu'un comprendra mon problème ... lol

Encore merci
Messages postés
35
Date d'inscription
mercredi 24 novembre 2004
Statut
Membre
Dernière intervention
6 juillet 2009

Je vais ajouter quelque chose ... le mieux que j'ai trouvé à date est ca (ca me donne une limite mais c pas si mauvais que ca ...)

Je créé toujours un tableau dynamique avec une bonne dizaine de dimensions mais quand il n'y a que (par exemple) 5 valeurs dans l'array, je cache les 5 autres dimensions en les dimensionnant de 1 à 1 ...

Je fais des belles fonction pour pas que ca paraisse qu'il y a des dimenions caché (1 to 1)

Ca marche mais j'aimerais avoir quelque chose de VRAIMENT completement dynamique
Messages postés
13280
Date d'inscription
lundi 13 décembre 2004
Statut
Modérateur
Dernière intervention
3 février 2018
35
salut,

totalement d'accord avec les explications de Jack
il n'en reste pas moins que ta demande semble relativement improbable

es-tu certain de l'étude du besoin
as-tu cherché le fonctionnement des TYPES ?
pourrais-tu donner un bribe significative de ton projet pour expliquer ce besoin?....

d'après tes derniers posts : une class, contenant une collection (0) de tableaux (mono), ajout (add, création) des tableaux selon le besoin, compteur à la création, le tour est joué en moins de 20 lignes....

nous ne sommes pas devant ton écran
Messages postés
35
Date d'inscription
mercredi 24 novembre 2004
Statut
Membre
Dernière intervention
6 juillet 2009

Je vois que vous êtes curieux !! lol .. c vrai que spas tout les jours qu'on veut travailler avec plus que 5 dimensions ...
Premièrement, je veux dire que je préfère pas tout révéler sur le projet, je veux pas me faire copier ...
Mais je peut surment vous donner un ti peu d'info
Je vais faire un système qui va réagir selon les valeurs entrantes sans avoir à calculer quoi que ce soit, le programme devra apprendre par lui-même.. Ca pourrais être comparable à ce que moi j'appel l'intuition. En réalité j'aimerais qu'il puisse y avoir du genre 20 dimensions ..mais c'est irréaliste... présentement j'ai simplifié le plus possible et j'arrive à environ 5 dimensions... mais j'aimerais bien avoir plus de réalisme plus tard en ajoutant quelque dimensions...de la le besoins que le nombre de dimensions puisse varier ... je vai faire plein de tests ..avec des nombres de dimensions différent ! Et appliquer le principe à plusieurs situation .. faut que ca soit dynamique.

Présentement je vai appliqué ca à une situation relativement simple ... mais peut-être que plus le principe pourrais servir dans des situation vraiment intéressante... je ne veux pas dire sur quoi je vai appliquer mon système d'intuition ... désolé

Bon ben maintenant .. je reviens à la programmation !

-Je ne suis pas assez familier avec les base de données pour faire le système que propose Jack avec deux champs de valeurs et je pense que ca serais pas assez rapide

Je crois que je vais faire des Tebleau de Tableau pour repousser les limites de dimensions et prévoire une bonne dizaine de dimensions en fermant les dimensions de trops .. (fermer en les dimensionnant de 1 à 1)

Je crois qu'on peut fermer le sujet, je vous remerci encore de votre aide .. c'est vraiment intéressant d'avoir de l'aide en aussi peu de temps !!

Au plaisir
Messages postés
35
Date d'inscription
mercredi 24 novembre 2004
Statut
Membre
Dernière intervention
6 juillet 2009

J'accepte la réponse de Jack car je voulais savoir si le nombre de dimensions d'un tableau était paramétrable, la réponse est non
merci