Accueil > Forum > > > > Macro pour quadrillage
Macro pour quadrillage
vendredi 9 mai 2008 à 22:31:02 |
Macro pour quadrillage

Estelle_BNP
|
Bonjour, je souhaiterai créer une matrice qui contient toutes les combinaisons vérifiant les contraintes suivantes : - x est le nombre de colonne (x est choisit par l'utilisateur) - 1 point de la matrice est compris entre 0 et 1 avec un pas donné (imposé par l'utilisateur) - la somme de tous les points d'une même ligne doit être égale exactement à 1 Par exemple, j'aimerai que quadri(4, 0.5) où x = 4 et pas = 0.5 devra donner le résultat : 1 0 0 0 0.5 0.5 0 0 0 1 0 0 0.5 0 0.5 0 0 0.5 0.5 0 0 0 1 0 0.5 0 0 0.5 0 0.5 0 0.5 0 0 0.5 0.5 0 0 0 1 ou quadri (3,0.25) devra donner le résultat : 1 0 0 0.75 0.25 0 0.5 0.5 0 0.25 0.75 0 0 1 0 0.75 0 0.25 0.5 0.25 0.25 0.25 0.5 0.25 0 0.75 0.25 0.25 0.25 0.5 0.5 0 0.5 0 0.5 0.5 0.25 0 0.75 0 0.25 0.75 0 0 1 Je pense qu'il faut utiliser une macro récursive mais je n'arrive pas à la construire. Pouvez-vous m'aider ?
|
|
samedi 10 mai 2008 à 05:12:00 |
Re : Macro pour quadrillage

jack
|
Salut Problème amusant ... et casse tête. Je me suis essayé. Voilà le code que j'ai pondu pour trouver les combinaisons de base. Il ne te reste qu'à créer les combinaisons suivantes qui ne sont que des mélanges de celles de base. Colle ce code dans un nouveau projet pour l'essayer.
Nota : Tu as posté ta question dans la catégorie VB6, je te fournis donc un programme en VB6 Comme tu parles de "macro", il y a fort à parier que tu travailles sous Excel, Word ou Access. La syntaxe est la même - Adapte-le
Option Explicit Private Type monType Col() As Single End Type Private maMatrice() As monType Private IndexMatrice As Long Private mesCol() As Single Private Sub Form_Load()
Dim NbColonnes As Integer Dim Pas As Single Dim r As Integer Dim t As Single NbColonnes = 4 ' \ Les deux paramètres Pas = 0.25 ' / ' Initialise la matrice IndexMatrice = 1 ReDim maMatrice(1 To IndexMatrice) ' Recherche les combinaisons de base t = 1 Do While t >= 0.5 ' Initialise la ligne en cours ReDim mesCol(1 To NbColonnes) ' Donnée de départ mesCol(1) = t Call CalculeSuivants(1, Pas, 2, NbColonnes) ' Décrémente la 1ere colonne t = t - Pas DoEvents Loop ' Supprime la dernière ligne qui est vide IndexMatrice = IndexMatrice - 1 ReDim Preserve maMatrice(1 To IndexMatrice) ' Affiche les résultats Debug.Print "----------------------------" Debug.Print IndexMatrice; " lignes de base :" For r = 1 To IndexMatrice For t = 1 To NbColonnes Debug.Print maMatrice(r).Col(t), Next t Debug.Print Next r Unload Me End Sub
Private Sub CalculeSuivants(ByVal ValeurDépart As Single, _ ByRef Pas As Single, _ ByVal IndexDépart As Integer, _ ByRef IndexMax As Integer)
' Sub qui s'appelle elle-même - attention aux modifs Dim r As Integer Dim s As Single ' Recalcule la somme actuelle For r = 1 To (IndexDépart - 1) s = s + mesCol(r) Next r DoEvents Select Case (s + ValeurDépart) Case 1 ' On est arrivé au bout ' Mémorise cette dernière valeur mesCol(IndexDépart) = ValeurDépart ' Mémorise cette ligne maMatrice(IndexMatrice).Col = mesCol ' Prépare la ligne de matrice suivante IndexMatrice = IndexMatrice + 1 ReDim Preserve maMatrice(1 To IndexMatrice) ' Si la valeur actuelle n'est pas le mini If (ValeurDépart - Pas) >= 0 Then ' On recommence avec valeur inférieure sans changer d'index Call CalculeSuivants(ValeurDépart - Pas, Pas, IndexDépart, IndexMax) End If Case Is < 1 ' On insère et on continue ' Mémorise cette dernière valeur mesCol(IndexDépart) = ValeurDépart ' Recherche valeur suivante (index suivant) If IndexDépart < IndexMax Then Call CalculeSuivants(ValeurDépart, Pas, IndexDépart + 1, IndexMax) End If Case Is > 1 ' Perdu ' Teste valeur plus petite (sans changer d'index) If (ValeurDépart - Pas) >= 0 Then Call CalculeSuivants(ValeurDépart - Pas, Pas, IndexDépart, IndexMax) End If End Select End Sub Vala Jack, MVP VB NB : Je ne répondrai pas aux messages privés
Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
|
|
samedi 10 mai 2008 à 09:35:33 |
Re : Macro pour quadrillage

Estelle_BNP
|
Bonjour, en effet c'est un vrai casse-tête et je n'arrive pas à m'en sortir. Tout d'abord je tiens à vous remercier pour votre aide. Vous avez du passer pas mal de temps sur cet algorithme et je vous en remercie vivement. Lorsque je fais tourner votre programme j'ai un message d'erreur sur la ligne Upload Me donc je l'ai mise en commentaire. Lorsque je le teste ensuite avec les paramètres 4 et 0.5, j'ai la matrice et lorsque je le teste ensuite avec les paramètres 3 et 0.25, j'ai la matrice | 1 | 0 | 0 | | 0.75 | 0.25 | 0 | | 0.5 | 0.5 | 0 | | 0.5 | 0.25 | 0.25 |
Il manque des cas. J'ai essayé de comprendre comment fonctionner votre programme pour l'adapter mais je n'y arrive pas. J'ai beaucoup de mal avec les fonctions récursives qui s'appelle elle-même. Pouvez-vous m'aider ?
|
|
samedi 10 mai 2008 à 12:50:43 |
Re : Macro pour quadrillage

jack
|
Réponse acceptée !
Re Mais de rien, il y avait longtemps que je n'avais programmé et ça m'a semblé un cas intéressant pour occuper ma nuit. Le Unload Me ne sert qu'à refermer la forme en VB6 : j'aurai dû le supprimer moi même, j'ai oublié. Quant aux résultats, comme je te l'ai dit, les autres solutions ne sont que des combinaisons des solutions de base, c'est à dire qu'il n'y a plus qu'à mélanger l'ordre des chiffres. Je te laisse cette partie, creuse toi un peu la tête, un empilement de 3 ou 4 " For-Next" devrait suffire à créer les lignes de matrice manquantes. Pour ajouter des lignes au tableau maMatrice, il te suffit de t'inspirer du " Redim Preserve" utilisé dans mes lignes. Vala Jack, MVP VBNB : Je ne répondrai pas aux messages privés Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
|
|
Cette discussion est classée dans : macro, utilisateur, matrice, quadrillage, quadri
Répondre à ce message
Livres en rapport
|
Derniers Blogs
GESTION D'EXCEPTION AVEC LES TASKSGESTION D'EXCEPTION AVEC LES TASKS par richardc
Nous avons vu dans un précédent article comment utiliser Task pour effectuer des opérations dans un autre thread.
Malheureusement, comme tout le monde n'est pas parfait, il se peut que cette exécution se passe mal et qu'une exception se produise.
La...
Cliquez pour lire la suite de l'article par richardc DéMARRONS AVEC LES TASKSDéMARRONS AVEC LES TASKS par richardc
Que vous le vouliez ou non, le développement multi-tâche est maintenant une obligation pour toute nouvelle application. Il est donc vital d'en comprendre les mécanismes et de s'y mettre le plus tôt possible.
En attendant le .NET Framework 4.5 avec le...
Cliquez pour lire la suite de l'article par richardc SLIDE & DéMO TECHDAYS 2012 - FAST & FURIOUS XAML APPSSLIDE & DéMO TECHDAYS 2012 - FAST & FURIOUS XAML APPS par Vko
Retrouvez les slides et les démo de ma session Fast & Furious XAML Apps. A ceux qui se posent la question : "est-ce que le code de la DataGrid est disponible?", je vous répondrais "pas encore". Je vais mettre en place un projet codeplex pour part...
Cliquez pour lire la suite de l'article par Vko XNA IS DEAD!XNA IS DEAD! par richardc
Depuis la semaine dernière (et grâce aux TechDays 2012), je me penche activement sur la nouvelle version de Windows, aka Windows 8. Vous me direz, il était temps puisque la première preview date de Septembre dernier.
OK. Remarquez, on n'en est qu'aux...
Cliquez pour lire la suite de l'article par richardc TECHDAYS PARIS 2012 : WINDOWS SERVER "8" QUOI DE 9 !TECHDAYS PARIS 2012 : WINDOWS SERVER "8" QUOI DE 9 ! par ROMELARD Fabrice
Speakers: Fabrice Meillon et Stanislas Quastana Cette session est basée entièrement sur celle donnée lors de la BUILD cet hiver. Il n'y a pas d'ajout d'information en rapport avec cet évènement passé. Windows 8 Server sera intégralem...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice
Logiciels
DocTranslate (V3.1.0.0)DOCTRANSLATE (V3.1.0.0)DocTranslate est un traducteur de document Microsoft Word, PowerPoint et Excel. Il permet d'autom... Cliquez pour télécharger DocTranslate Tribler (2012)TRIBLER (2012)Tribler est un client pair à pair (P2P/Peer-to-Peer) open source avec la capacité de regarder des... Cliquez pour télécharger Tribler OneSwarm (2012)ONESWARM (2012)Le peer-to-peer qui protège votre vie privée, c'est OneSwarm.
Ce logiciel de peer-to-peer crypté... Cliquez pour télécharger OneSwarm PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V8.4)PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V8.4)PONAMEDIA TV DEVIENS HELLLOOO FLASH
LA TV SUR VOTRE ORDINATEUR.
Toute une plateforme Multi... Cliquez pour télécharger PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO Academy System (17.2.1.0)ACADEMY SYSTEM (17.2.1.0)Logiciel de gestion des établissements.
- élèves/étudiants (inscription, dossier, absence...)
-... Cliquez pour télécharger Academy System
|