Algo: créer toutes les combinaisons possibles
Résolu/Fermé
Kobaya
Messages postés
282
Date d'inscription
vendredi 28 mai 2004
Statut
Membre
Dernière intervention
10 janvier 2008
-
30 juin 2005 à 16:03
librequetucrois - 20 févr. 2012 à 11:36
librequetucrois - 20 févr. 2012 à 11:36
A voir également:
- Générateur de combinaison excel
- Algo 32 - Forum Algorithmes / Méthodes
- Algo pgcd - Forum Programmation
- Telecharger algo pour pc - Télécharger - Édition & Programmation
- Algo naif - Forum Programmation
- Algo poker - Forum Algorithmes / Méthodes
11 réponses
p.legal
Messages postés
88
Date d'inscription
mardi 14 juin 2005
Statut
Membre
Dernière intervention
21 mars 2008
24
4 juil. 2005 à 17:43
4 juil. 2005 à 17:43
La modif est simple, j'ai ajouté la "sub" nomée doublon.
et maintenant, cela te convient t'il ?
voici le resultat pour la chaine "ABCD":
text$="ABCDEA" debut$="" global result$, debut$, glon, nb, blok debut$=text$ glon=len(text$) call doublon text$ if blok=1 then end r$=combine$(text$) print "il y a ";nb;" réponses." input r$ end function combine$(text$) lon=len(text$) for i=1 to lon trace 2 text2$=mid$(text$,i+1)+left$(text$,i-1) ch$=mid$(text$,i,1) result$=result$+ch$ if text2$<>"" then r$=combine$(text2$) else rlon=len(result$) dlon=glon-rlon result$=left$(debut$,dlon)+result$ debut$=result$ print result$ result$="" nb=nb+1 end if next i combine$="" end function sub doublon txt$ lon=len(txt$) for i=1 to lon ch$=mid$(txt$, i, 1) for j=1 to lon if j=i then exit for if ch$=mid$(txt$, j, 1) then blok=1: exit for next j if blok=1 then exit for next i if blok=1 then notice "Doublon detecté !"+chr$(13)+"Le caractère '"+ch$+"' à été detecté en double." end if end sub
et maintenant, cela te convient t'il ?
voici le resultat pour la chaine "ABCD":
ABCD ABDC ACDB ACBD ADBC ADCB BCDA BCAD BDAC BDCA BACD BADC CDAB CDBA CABD CADB CBDA CBAD DABC DACB DBCA DBAC DCAB DCBA il y a 24 réponses. ?
4 juil. 2005 à 23:00
En fait, je n'ai pas utilisé la procédure doublon(), et ça semble fonctionner (j'ai testé jusqu'à 7 éléments).
Donc, un grand merci à toi p.legal :-)
20 mars 2008 à 07:51
21 mars 2008 à 01:34
AACD contient 2 fois A
13 févr. 2012 à 10:46
Je dois être un peu neuneu, mais cette macro semble parfaitement répondre à mon besoin, mais je ne parviens pas à la faire fonctionner.
Quelle nom faut il lui donner ? Un Sub Macro2() la fait planter. Pour info, je suis Excel 2007
Une bonne âme peut elle peut me débloquer ?
Merci.
15 févr. 2012 à 14:28
Sub genererCombinaison()
'On déclare des variables de types Integer qui stockent le code ASCII de la lettre
Dim char_number_1, char_number_2, char_number_3, char_number_4 As Integer
'Variable qui va stocker le résultat de notre combinaison
Dim macombinaison As String
'Integer qui compte le nombre de combinaisons
Dim cmb_id As Integer
'Initialisation du compteur
cmb_id = 1
'la lettre A a pour code ASCII 65
'la lettre B a pour code ASCII 66
'la lettre C a pour code ASCII 67
'la lettre D a pour code ASCII 68
'On parcourt les lettres de A à D
For char_number_1 = 65 To 68
'On parcourt les lettres de A à D
For char_number_2 = 65 To 68
'On élimine le cas où les 2 premières lettres sont identiques
If char_number_2 <> char_number_1 Then
'On parcourt les lettres de A à D
For char_number_3 = 65 To 68
'On élimine les cas suivants :
' 3ème lettre = 2ème lettre
' 3ème lettre = 1ère lettre
If char_number_3 <> char_number_2 And char_number_3 <> char_number_1 Then
'On parcourt les lettres de A à D
For char_number_4 = 65 To 68
'On élimine les cas suivants :
' 4ème lettre = 3ème lettre
' 4ème lettre = 2ème lettre
' 4ème lettre = 1ère lettre
If char_number_4 <> char_number_3 And _
char_number_4 <> char_number_2 And _
char_number_4 <> char_number_1 Then
'On concatène les caractères formés à partir des codes ASCII
macombinaison = Chr(char_number_1) & Chr(char_number_2) & Chr(char_number_3) & Chr(char_number_4)
'On affiche le numéro de la combinaison et la chaîne de caractères
Debug.Print ("Combinaison n°" & Trim(Str(cmb_id)) & " : " & macombinaison)
'On incrémente le compteur
cmb_id = cmb_id + 1
End If
Next
End If
Next
End If
Next
Next char_number_1
End Sub
Cette Sub affiche le résultat dans la console de Debug