Problème de remplissage dune matrice - VB/VBA/VBS - Programmation
Marsh Posté le 28-06-2006 à 11:14:49
un coup tu fais for i=0 to 3 pour ta matrice M1, l'auter coup du fais for i=1 to...
soit tu fais toujours de 0 à X
soit 1 à X
sinon tu perds des données =)
Marsh Posté le 28-06-2006 à 14:27:20
Y a-t-il d'autres condition comme par exemple :
Les conditions (début) vont de 10 en 10 et la longueur de chaque condition est 10 pus 20 pour un même début...enfin des trucs du genre pour pouvoir sortir quelque règles. (c'est quoi tes X1 et X2 ?)
Marsh Posté le 28-06-2006 à 14:30:00
et aussi tes exemples sont faux...
T2=C1+C2-C3 ??
tu peux nous débrouissailler tout ca stp
Marsh Posté le 28-06-2006 à 14:33:07
Si j'ai compris ... le but du jeux c'est de trouver le chainage
T2=10-30
=10-20 + 20-40 + (40-30)
avec 10-20 = C1
20-40 = C2
40-30=-C3 (C3=30-40)
Faut-il qu'il y est toujours une solution ou pas ?
Marsh Posté le 28-06-2006 à 14:34:19
Oups effectivement un des exemples est faux :
T3=C1+C2
c'est ok dans ton tableau mais pas dans la formule.
Marsh Posté le 28-06-2006 à 14:35:58
c'est un jeu de dominos alors
tu fais appel à la théorie des graphes peut etre ?
Marsh Posté le 28-06-2006 à 17:41:42
Excusé moi, je me suis effectivement planté dans mon exemple.
Je vais essayer dêtre plus clair. Je réalise une macro sous Catia V5r14 (logiciel de CAO). Jutilise le module VB pour développer ma macro. Mon objectif est de réaliser les chaînes de côtes de fabrication des pignons équipant les moteurs : type TP400 (Airbus A400), CFM (famille Airbus).
En fait, on prend une vue en coupe dun pignon, on identifie chaque face verticale de celui-ci.
Les faces ont été nommées par ordre croissant de la gauche vers la droite et de 10 en 10.
Face 1 = 10
Face 2 = 20
Face 3 = 30
Bien évidemment, le pignon a été dimensionné par le bureau détude et donc à partir de ces dimensions et du nom des faces, jobtiens une relation entre eux (exemple simple):
Ce que jai appelé Cote Condition
Origine de la cote Extrémité de la cote
Cote Condition 1 C1 10 20
Cote Condition 2 C2 20 40
Cote Condition 3 C3 30 40
(Par la suite, je travaille plutôt avec 40 à 50 côtes conditions)
En fait la cote C1 (10/20) peut très bien faire 20mm et la cote C2 (20/40)= 10 mm. Les origines et les extrémités sont indépendantes de la valeur de la cote.
A partie de cela, jai besoin dune matrice de passage et cest là quinterviennent les éléments de transitions.
Origine Extrémité
Transition 1 T1 10 20
Transition 2 T2 10 30
Transition 3 T3 10 40
A Présent, je veux relier les Ci aux Ti.
Il faudrait que jarrive à retrouver la matrice suivante à partir de mes 2 tableaux précédents:
C1 C2 C3
T1 1 0 0
T2 1 1 -1
T3 1 1 0
Si vous ne voyer pas trop comment jobtiens la matrice, dessiné 4 droites verticales, parallèles et nommer les de 10 en 10 de gauche à vers la droite, puis tracer les cotes condition et à coté les transitions. Sur le papier, cest enfantin
..Mais
Je pense que la solution est toutes bête mais impossible de la trouver, je commence à tous mélanger et le programme est vraiment bloqué sans sa.
Marsh Posté le 28-06-2006 à 18:00:51
Paul Hood a écrit : Si j'ai compris ... le but du jeux c'est de trouver le chainage |
Oui, il doit toujours y avoir une solution
Marsh Posté le 28-06-2006 à 18:19:58
xtremiste a écrit : Oui, il doit toujours y avoir une solution |
si ton nombre de pignons différents est limité (ici 3, tu peux et contenter de faire des switch début et fin, et tu alimentes par la suiet tes matrices selon un processus itératif en disant A->B existe A->C existe, pour faire B->C j'utilise -(A->B) + (A->C)...
donc en résumant,
si nombre limité, ecris tous les cas à la main
sinon processus empirique par appel récursif.
Marsh Posté le 28-06-2006 à 18:28:52
jpcheck a écrit : si ton nombre de pignons différents est limité (ici 3, tu peux et contenter de faire des switch début et fin, et tu alimentes par la suiet tes matrices selon un processus itératif en disant A->B existe A->C existe, pour faire B->C j'utilise -(A->B) + (A->C)... |
Merci de répondre si vite.
Je ne peux pas écrite toutes les solutions. (dans certain cas ma matrice sera de dimension 50x50) Il faut que j'utilise un
Citation : processus empirique par appel récursif |
. Mais c'est la que je suis nul. Je maitrise la CAO mais pas la programmation et j'arrive pas à pondre cette boucle. Si vous pouviez me donner la trame du prog, cela m'aiderait vraiment.
Marsh Posté le 29-06-2006 à 10:03:12
Le problème c'est que des chemins peuvent ne mener à rien ... il faut donc dépiler jusqu'à ce qu'on puisse repartir sur un autre chemin.
Ca va pas être coton !!
Je pense qu'il s'agit plus d'algo que de code...tu devrais essayer de poser la question dans le groupe "Algorithme".
En attendant j'y réfléchi...mais pas à temps plein.
Marsh Posté le 29-06-2006 à 10:03:18
le processus empirique risque d'etre lourd sur la durée, je retire mon idée. par contre, tu peux gérer tes chainages de pignons selon une méthode pas trop compliquée.
comme tu gères début et fin dans ton chainage, tu peux faire un premier test
-est ce que (débutconnu,finconnue) existe ? (1 pignon seulement)
.oui, je le prends
.non, boucle de test existe-t-il (debutconnu,x) et (x,finconnue) (2 pignons seulement)
.oui, je prends
.non, boucle de test (debutconnu,x)(x,y)(y,finconnue) (3 pignons)
etc.
pour t'assurer de ne pas tourner dans le vide, assure toi via une liste des pignons possibles, que tu as le bon embout final ^^
et comme toutes les chaines sont possibles, tu finiras par trouver
le processus récursif vient par le fait que si tu ne trouves pas (debut,fin,1) tu lanceras (debut,fin,2) etc. le nombrefinal étant le nombre de pignon que tu cherches à obtenir...
ca te convient ?
Marsh Posté le 28-06-2006 à 10:49:58
Problème de remplissage dune matrice.
Bonjour, je développe une macro qui réalise une chaîne de cote de pignon et je rencontre un problème tout bête à faire à la main, mais pour le programmer, je memmêle les pinceaux.
Voici mon cas détude :
Jai un premier tableau dit « Condition » (3 lignes et 3 colonnes pour lexemple):
(1ère colonne = N° de la condition, 2ème = Origine de la cote, 3ème = extrémité de la cote)
Les origines et les extrémités vont de 10 en 10.
C1 10 20
C2 20 40
C3 30 40
Jai un second tableau dit « Transition » (idem 3 lignes et 3 colonnes)
T1 10 20
T2 10 30
T3 10 40
A partir de ces 2 tableaux, je voudrais créer une matrice ayant les conditions en lignes et les transitions en colonne.
On doit trouver pour cet exemple que
T1 = C1
T2 = C1+C2-C3
T3 = C1+C3
Soit la matrice que je dois obtenir.
C1 C2 C3
T1 1 0 0
T2 1 1 -1
T3 1 1 0
En fait je narrive pas à trouver comment la remplir sauf pour en (T1,C1)
Voici le programme : VBA sous CatiaV5R14
Sub CATmain()
'Création des cotes conditions
Dim C(3, 3)
'1er colonne
C(1, 1) = 1: C(2, 1) = 2: C(3, 1) = 3
'2ème
C(1, 2) = 10: C(2, 2) = 20: C(3, 2) = 30
'3ème
C(1, 3) = 20: C(2, 3) = 40: C(3, 3) = 40
'Tableau T
Dim T(4, 3)
'1er colonne
T(1, 1) = 1: T(2, 1) = 2: T(3, 1) = 3
'2ème
T(1, 2) = 10: T(2, 2) = 10: T(3, 2) = 10
'3ème
T(1, 3) = 20: T(2, 3) = 30: T(3, 3) = 40
Dim M1(3, 3)
For i = 0 To 3
For j = 0 To 3
M1(i, j) = 0
Next j
Next i
'Matrice M1 de la forme M1(T(i),C(j))
Dim NbreFace: NbreFace = 4
For i = 1 To NbreFace - 1
For j = 1 To NbreFace - 1
If T(i, 2) = C(j, 2) And T(i, 3) = C(j, 3) Then
M1(i, j) = 1
End If
X1 = 10
X2 = 20
Do While X2 < NbreFace * 10
If X1 = C(j, 2) And X2 < C(j, 3) Then
M1(i, j) = 1
End If
X2 = X2 + 10
Loop
Next j
Next i
'pour Vérifier ma matrice
Dim A1, A2, A3, B1, B2, B3, C1, C2, C3
A1 = M1(1, 1): A2 = M1(1, 2): A3 = M1(1, 3)
B1 = M1(2, 1): B2 = M1(2, 2): B3 = M1(2, 3)
C1 = M1(3, 1): C2 = M1(3, 2): C3 = M1(3, 3)
End Sub
SI vous avez une idée???
merci
Steph