Forum |  HardWare.fr | News | Articles | PC | Prix | S'identifier | S'inscrire | Aide Recherche
2590 connectés 

  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

  Problème de remplissage d’une matrice

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Problème de remplissage d’une matrice

n°1396353
xtremiste
Posté le 28-06-2006 à 10:49:58  profilanswer
 

Problème de remplissage d’une 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 m’emmêle les pinceaux.
 
Voici mon cas d’étude :
 
J’ai un premier tableau dit « Condition » (3 lignes et 3 colonnes pour l’exemple):
(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
 
J’ai 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 n’arrive 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
 
 
 :bounce: SI vous avez une idée???
merci
Steph

mood
Publicité
Posté le 28-06-2006 à 10:49:58  profilanswer
 

n°1396383
jpcheck
Pioupiou
Posté le 28-06-2006 à 11:14:49  profilanswer
 

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 =)

n°1396577
Paul Hood
Posté le 28-06-2006 à 14:27:20  profilanswer
 

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 ?)

n°1396581
jpcheck
Pioupiou
Posté le 28-06-2006 à 14:30:00  profilanswer
 

et aussi tes exemples sont faux...
T2=C1+C2-C3 ??
tu peux nous débrouissailler tout ca stp  :bounce:

n°1396585
Paul Hood
Posté le 28-06-2006 à 14:33:07  profilanswer
 

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 ?

n°1396589
Paul Hood
Posté le 28-06-2006 à 14:34:19  profilanswer
 

Oups effectivement un des exemples est faux :
T3=C1+C2
 
c'est ok dans ton tableau mais pas dans la formule.

n°1396592
jpcheck
Pioupiou
Posté le 28-06-2006 à 14:35:58  profilanswer
 


c'est un jeu de dominos alors  :jap:  
tu fais appel à la théorie des graphes peut etre ?

n°1396595
Paul Hood
Posté le 28-06-2006 à 14:37:17  profilanswer
 

Je crois qu'aujourd'hui il fait surtout appel à nous !!

n°1396750
xtremiste
Posté le 28-06-2006 à 17:41:42  profilanswer
 

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). J’utilise 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 d’un 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, j’obtiens une relation entre eux (exemple simple):
 
Ce que j’ai 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, j’ai besoin d’une matrice de passage et c’est là qu’interviennent 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 j’arrive à 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 j’obtiens 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, c’est 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.
 

n°1396767
xtremiste
Posté le 28-06-2006 à 18:00:51  profilanswer
 

Paul Hood a écrit :

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 ?


   
 
Oui, il doit toujours y avoir une solution

mood
Publicité
Posté le 28-06-2006 à 18:00:51  profilanswer
 

n°1396784
jpcheck
Pioupiou
Posté le 28-06-2006 à 18:19:58  profilanswer
 

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.

n°1396794
xtremiste
Posté le 28-06-2006 à 18:28:52  profilanswer
 

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)...
donc en résumant,
si nombre limité, ecris tous les cas à la main
sinon processus empirique par appel récursif.


 
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. :hello:

n°1397015
Paul Hood
Posté le 29-06-2006 à 10:03:12  profilanswer
 

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.

n°1397016
jpcheck
Pioupiou
Posté le 29-06-2006 à 10:03:18  profilanswer
 

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 ?
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

  Problème de remplissage d’une matrice

 

Sujets relatifs
Probleme de requete MySQL avec des controles CASEProblème SecureRandom et environnement
PHP-MySQL : probleme de connexion MySQLProblème envoie image + redimenssionnement : marche pas
Problème ouverture page popupProblème ouverture d'une popup
Problème affichage données par extraction MySQL après vérification mdpProbleme de calque
probléme pour éxécuter un fichier javaproblème de variable éclairer moi !!!!! a l'haide !!!!
Plus de sujets relatifs à : Problème de remplissage d’une matrice



Copyright © 1997-2014 Hardware.fr SARL (Signaler un contenu illicite) / Groupe LDLC