Algo: créer toutes les combinaisons possibles
Résolu/Fermé
Kobaya
Messages postés
282
Date d'inscription
Statut
Membre
Dernière intervention
-
librequetucrois -
librequetucrois -
A voir également:
- Générateur de combinaison excel
- Algo 32 - Forum Algorithmes / Méthodes
- Algo poker - Forum Algorithmes / Méthodes
- Algo prono - Télécharger - Sport
- Exo algo - Forum Programmation
- ALGO ET PASCAL - Forum Pascal
11 réponses
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. ?
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 :-)
AACD contient 2 fois A
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.
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