PC SOFT

FORUMS PROFESSIONNELS
WINDEVWEBDEV et WINDEV Mobile

Accueil → WINDEV 2024 → Tableau de tableau (utilisation de structure?)
Tableau de tableau (utilisation de structure?)
Débuté par Drecq, 17 juin 2014 23:24 - 7 réponses
Posté le 17 juin 2014 - 23:24
Bonsoir,

Pour mon programme (scientifique) j'ai besoin dans une procédure de construire un tableau de tableau :

Plus concretement, ce programme fonctionne avec MAPLE (soft de calcul formel) et dans cette version je construisais une liste de n valeur (pouvant varier selon le cas) , équivalente à une matrice une ligne ou tableau une ligne, et chaque valeur de cette liste etait une matrice 2xMi (matrice à 2 lignes et Mi colonne dépendant du cas, variable selon la matrice) .





L'image ci-dessus montre la structure sous Maple.

Avec Windev je peux definir une structure (sujet exploré dans un post sur le forum) mais si je prends cette option alors je dois définir le nombre de variables contenues et les décrire, or je ne sais pas à l'avance combien de "matrice" j'aurais dans ma "liste"

J'espère que j'expose mon problème assez clairement...

En gros est-ce possible de faire un tableau à 1 ligne et n colonne contenant des tableaux à 2 lignes et Mi colonne ?

Je vous remercie pour votre aide!
Nico
Membre enregistré
256 messages
Popularité : +29 (29 votes)
Posté le 18 juin 2014 - 10:55
Bonjour,

Il faut bien utiliser des structures

// description d'une valeur qui contient la matrice
Valeur est une structure
Matrice est un tableau [*,*] d'entiers
FIN
// tableau des valeurs
TabValeur est un tableau de Valeur

// un tableau de 3 valeurs
Dimension(TabValeur,3)

// première valeur : 2*4
Dimension(TabValeur[1].Matrice,2,4)
TabValeur[1].Matrice[1,1] = 1
TabValeur[1].Matrice[1,2] = 2
TabValeur[1].Matrice[1,3] = 3
TabValeur[1].Matrice[1,4] = 4
TabValeur[1].Matrice[2,1] = 10
TabValeur[1].Matrice[2,2] = 20
TabValeur[1].Matrice[2,3] = 30
TabValeur[1].Matrice[2,4] = 40

// deuxième valeur : 2*6
Dimension(TabValeur[2].Matrice,2,6)
...

// troisième valeur : 2*3
Dimension(TabValeur[3].Matrice,2,3)
...
Posté le 18 juin 2014 - 11:29
Top merci! Je vais regarder ça cet aprem!

Nico
Posté le 19 juin 2014 - 15:48
Bonjour,

J'ai tester avec les structures et le schéma de ton code et cela marche très bien je t'en remercie!

Du coup j'arrive à construire dans ma procédure une structure que je manipule de cette maniere par exemple :

TableauMat[2].Tabsiege[1,3]


Dans ce schéma, TableauMat est ma "liste" (de type structure contenant des tableaux * par * de numeriques) contenant mes "matrices" . J'arrive à RENVOYER sans problème des valeurs particulères en utilisant par exemple le code

RENVOYER TableauMat[2].Tabsiege[1,3]


Cependant, mon but serait de récupérer (RENVOYER) simplement la "liste" cad TableauMat et de pouvoir l'utiliser ensuite pour remplir un champ table d'une fenêtre par le tableau TableauMat[2] par exemple.

Quand j'essaie de manipuler ma procédure ConstruitTravees(X,Y,P) avec par exemple ConstruitTravees(X,Y,P)[1] j'ai tout de suite un Bug qui dit que je n'ai pas le droit d'utiliser [].

Comment utilise-t-on une procédure qui renvoie un tableau ou dans mon cas une structure contenant des tableaux sachant que les tailles des structures et de ses tableaux sont propre aux arguments qu'on passe dans la procédure?

Pour l'afficher dans un champ table sans créer un fichier de donnée je n'y arrive pas mais c'est un deuxieme probleme....lol


Merci pour votre aide!
Nico
Posté le 19 juin 2014 - 18:27
Bonjour,
Il faut affecter le retour de la fonction à un tableau, puis manipuler le
tableau.
La syntaxe que tu essaies d'utiliser ne fonctionne qu'avec un tableau, ou
une propriété de classe qui renvoie un tableau, mais pas avec une fonction.

Frédéric.

"Drecq" a écrit dans le message de groupe de discussion :
2014b666d16f1a0768ead44a4c6300ad5c34@news.pcsoft.fr...

Bonjour,

J'ai tester avec les structures et le schéma de ton code et cela marche très
bien je t'en remercie!

Du coup j'arrive à construire dans ma procédure une structure que je
manipule de cette maniere par exemple :

TableauMat[2].Tabsiege[1,3]


Dans ce schéma, TableauMat est ma "liste" (de type structure contenant des
tableaux * par * de numeriques) contenant mes "matrices" . J'arrive à
RENVOYER sans problème des valeurs particulères en utilisant par exemple le
code

RENVOYER TableauMat[2].Tabsiege[1,3]


Cependant, mon but serait de récupérer (RENVOYER) simplement la "liste" cad
TableauMat et de pouvoir l'utiliser ensuite pour remplir un champ table
d'une fenêtre par le tableau TableauMat[2] par exemple.

Quand j'essaie de manipuler ma procédure ConstruitTravees(X,Y,P) avec par
exemple ConstruitTravees(X,Y,P)[1] j'ai tout de suite un Bug qui dit que je
n'ai pas le droit d'utiliser [].

Comment utilise-t-on une procédure qui renvoie un tableau ou dans mon cas
une structure contenant des tableaux sachant que les tailles des structures
et de ses tableaux sont propre aux arguments qu'on passe dans la procédure?

Pour l'afficher dans un champ table sans créer un fichier de donnée je n'y
arrive pas mais c'est un deuxieme probleme....lol


Merci pour votre aide!
Nico
Membre enregistré
505 messages
Popularité : +18 (18 votes)
Posté le 19 juin 2014 - 23:39
Bonjour à tous,

Drecq a écrit :

Cependant, mon but serait de récupérer (RENVOYER) simplement la "liste" cad TableauMat et de pouvoir l'utiliser ensuite pour remplir un champ table d'une fenêtre par le tableau TableauMat[2] par exemple.

Quand j'essaie de manipuler ma procédure ConstruitTravees(X,Y,P) avec par exemple ConstruitTravees(X,Y,P)[1] j'ai tout de suite un Bug qui dit que je n'ai pas le droit d'utiliser [].

Comment utilise-t-on une procédure qui renvoie un tableau ou dans mon cas une structure contenant des tableaux sachant que les tailles des structures et de ses tableaux sont propre aux arguments qu'on passe dans la procédure?


Drecq,

Pour récupérer un tableau dont les dimensions et type de base ne sont pas connus à l'avance, je te suggère d'utiliser une variable de type tableau dynamique à laquelle tu affectes le résultat de la procédure ConstruitTravees(X,Y,P) ou bien un tableau avec même type de base et même nombre de dimensions.

Mais attention: la variable à laquelle le résultat est affecté reçoit une copie du tableau (en WinDev 16, je n'ai pas réussi à faire une affectation par référence entre 2 tableaux... une copie du tableau source est créée et cette copie est affectée au tableau destination).


Par ailleurs, j'ai déjà utilisé en WLangage des tableaux de tableaux.
Concrêtement, il s'agit d'utiliser un tableau de variants:
• le type de base du tableau "englobant" est un variant, et
• un variant peut "recevoir" un tableau.

De mémoire...
Il est possible d'affecter directement un tableau à un élément de type variant.
Mais avec le WLangage, il y a un problème pour accéder directement à un élément du tableau à travers ce variant (opérateur interdit pour []).
La solution consistait à l'affecter d'abord à une variable de type tableau dynamique avant de manipuler le tableau.
(ou à un tableau qui a le même type de base que celui du tableau "contenu" dans l'élément variant).

Dans ce cas, l'affectation vers un tableau (dynamique ou non) crée une copie du tableau "contenu" dans le variant.

Par exemple:
vItem est un variant
tDyn est un tableau dynamique
tVariant est un tableau <agrandissement=N> de variant
tData est un tableau d'entier = [10,20,30]

tVariant[1] = tData

//vItem = tVariant[1]
//info(vItem[2])// erreur, opérateur [] interdit

tDyn = tVariant[1]// tDyn est une copie de tVariant[1]
Info(tDyn[2])// affiche 20


La fonction TableauInfo() permet d'obtenir des informations sur le tableau destination.

:)

--
Pour me contacter par courrier électronique, cliquez sur le lien ci-dessous (protection antispam): http://cerbermail.com/…
Posté le 20 juin 2014 - 09:53
Merci pour vos réponses (ça m'aide beaucoup la)! Je regarde cela ce soir et je vous tiens au courant des résultats.

Bonne journée.

Nico
Posté le 17 juillet 2014 - 11:20
Bonjour,

Je reviens vers vous un peu tard.

Je vous remercie pour vos posts, j'arrive à faire des tableaux de tableaux et les utiliser correctement. Le type Variant aide bien.

A bientot,

Nicolas