Avis aux matheux !! (combinaisons de lettres dans chaine)

Résolu
cs_philcam Messages postés 132 Date d'inscription dimanche 12 août 2001 Statut Membre Dernière intervention 17 octobre 2008 - 8 oct. 2004 à 15:00
 loriental - 19 oct. 2004 à 21:28
Salut à toute la communauté,

Depuis quelques jours je suis sur un problème qui va me mener au suicide, j'ai bricolé un bout de programme que je ne comprends même plus moi même mais qui me fait une partie du boulot, mais je pense qu'on peut faire mieux avec des formules.
Surtout que quelqu'un a dû le faire avant moi.

Voilà de quoi il s'agit :

Je veux par exemple savoir et afficher les combinaisons de 3 lettres dans une chaine.

Exemple :

combien de combinaison de 3 lettres dans la chaine ABCDE ?

réponses = 10 combinaisons

ABC
ABD
ABE
ACD
ACE
ADE
BCD
BCE
BDE
CDE

Exemple(2) :

combien de combinaison de 3 lettres dans la chaine ABCDEFGHIJKLMNOPQRST ? (20 lettres)

réponses = 1140 combinaisons

Non, non, je ne vais pas les coller ici, mais mon prog bricolo arrive à les calculer.

jusqu'à maintenant mon prog me suffisait mais aujourd'hui je voudrais qu'il calcule et affiche des combinaisons plus grandes, combien de fois 4 lettres, 5 lettres etc.. jusqu'à 7 on va dire, pour qu'à la fin je puisse calculer (et afficher) les combinaisons de 7 lettres dans 26 lettres.

voilà, avis aux courageux.

Merci d'avance.

26 réponses

cs_rene38 Messages postés 1858 Date d'inscription samedi 29 juin 2002 Statut Membre Dernière intervention 17 octobre 2013 11
8 oct. 2004 à 18:14
Heure et quart ! (Archimède dixit)

Vas voir ICI
3
cs_CanisLupus Messages postés 3757 Date d'inscription mardi 23 septembre 2003 Statut Membre Dernière intervention 13 mars 2006 20
9 oct. 2004 à 17:09
Si tu veux bien philcam on va arrêter là nos petites querelles de gamins. Moi j'ai dit tout ce que j'avais à dire et tu le prends comme tu veux, je m'en fous. Au passage, je suis pas webmaster de CodesSources.

Bon, revenons à ton problème.
G ressorti ma vieille source dont je parlais plus haut (si tu as bien lu) et j'en ai fait un truc qui pourra peut-être te servir ou au moins à ceux qui liront ce topic.

Explications : G testé ce code sur une machine équipée d'un celeron 700MHZ et de 256M0 de ram avec W98SE. G pas eu d' d'erreur d'exécution de quelque sorte que ce soit. (Peut-être que c'est parce que je passe par un fichier texte ?).
Effectivement, un tableau en mémoire (ou une listbox) est limité en taille et quand on pense qu'avec ce code si on attribue la valeur 13 à nb_car, ça fait 10 400 600 combinaisons à enregistrer...

Pour le tester, tu crées un nouveau projet sous vb6 et tu colles le code suivant dans la form (si tu n'as pas de dossier c:\temp, tu le crées ou tu changes la ligne Open "c:\temp\list.txt" For Output As #1) :

Dim nb_car As Integer ' Le nombre de caractères des combinaisons
Dim c As String ' La chaine de nb_car caractères
Dim cpt As Long ' Le compteur de combinaisons
Dim tableau() As Integer ' Pour les positions des caractères dans la chaîne de départ
Dim s As String ' Pour la chaîne à étudier

Private Sub Form_Load()
Dim i As Integer

s = "ABCDEFGHIJKLMNOPQRSTUVWXYZ" ' La chaîne de caractères à étudier

nb_car = 7 ' Nombre de caractères des combinaisons

ReDim tableau(nb_car)

Open "c:\temp\list.txt" For Output As #1
For i = 1 To Len(s) - nb_car + 1
  DoEvents
  RechercheCombinaison 1, i
Next
Close #1

MsgBox "Nombre de combinaisons : " & cpt
Unload Me

End Sub
 
Sub RechercheCombinaison(limite As Integer, valeur As Integer)
Dim i As Integer
Dim j As Integer

  tableau(limite - 1) = valeur
  If limite = nb_car Then
    c = ""    For i 0 To nb_car - 1: c c & Mid$(s, tableau(i), 1): Next
    cpt = cpt + 1
    Print #1, c
  Else
    For j = valeur + 1 To Len(s) - nb_car + limite + 1
      DoEvents
      RechercheCombinaison limite + 1, j
    Next
  End If

End Sub


Bonne prog

Cordialement, CanisLupus

Tous les glands ne deviennent pas des chênes mais tous les chênes ont été des glands
3
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
8 oct. 2004 à 15:55
Salut philcam
Tu vas peut-être trouver ton bonheur ici : clique ici
Vala
Jack
0
cboulas Messages postés 2641 Date d'inscription mercredi 2 juin 2004 Statut Membre Dernière intervention 8 janvier 2014 16
8 oct. 2004 à 16:02
Salut,

Attent je ressort mais court d'électronique...
Bref juste une question, les lettres peuvent-elles être mise dans le désordre exemple :

Avec : ABC

Les combi de 2 lettres sont : AB, AC, BC, CB, CA, BA

Veux tu ceci ou juste ; AB, BC, AC

Merci

Chris...
Web : Firstruner - eMail : [mailto:support@firstruner.com Support]
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cboulas Messages postés 2641 Date d'inscription mercredi 2 juin 2004 Statut Membre Dernière intervention 8 janvier 2014 16
8 oct. 2004 à 16:15
Désole Jack mais d'après mes calculs, la première solution du canapé est fausse, mais ce n'est pas de ta faute.

Car le site annoce 24 possibilité alors qu'il n'y en a que 16.

Exemple avec du binaire :

ABCD
0000
0001
0010
0011
0100
0101
0110
0111
1000
1001
1010
1011
1100
1101
1110
1111

Soit 16 actions possibles et non 24, mais comme je le disais, Jack, tu n'y ai pour rien.

Chris...
Web : Firstruner - eMail : [mailto:support@firstruner.com Support]
0
cs_philcam Messages postés 132 Date d'inscription dimanche 12 août 2001 Statut Membre Dernière intervention 17 octobre 2008
8 oct. 2004 à 16:15
Merci pour le lien je vais voir ce qu'on y trouve
, et pour répondre à cboulas, pas la peine de les mettre dans le désordre il suffit d'avoir le nombre de combinaisons (et pouvoir les afficher) en sachant que ABC équivaudra à CBA ou BAC, le mieux est de les avoir dans l'ordre alphabétique comme je les ai mis dans le premier message.
Ah c'est chaud, c'est chaud !
0
cs_philcam Messages postés 132 Date d'inscription dimanche 12 août 2001 Statut Membre Dernière intervention 17 octobre 2008
8 oct. 2004 à 16:25
Je suis allé voir le lien, j'ai pas compris grd chose, à la limite ça pourrait m'aider à compter le nombre de combinaisons mais pas à calculer chacune d'elles.
merci qd même
0
cboulas Messages postés 2641 Date d'inscription mercredi 2 juin 2004 Statut Membre Dernière intervention 8 janvier 2014 16
8 oct. 2004 à 16:40
ayé j'ai retrouver :

XLettre est le nombre de caractère de ta string ABCD, et XGroup est le nombre de lettre dans un groupe exemple un groupe de 2 lettre.

Ta formule est la suivante : XLettre * (XLettre / XGroup)

J'ai testé, c'est nikel

Chris...
Web : Firstruner - eMail : [mailto:support@firstruner.com Support]
0
cs_philcam Messages postés 132 Date d'inscription dimanche 12 août 2001 Statut Membre Dernière intervention 17 octobre 2008
8 oct. 2004 à 16:44
En ce qui concerne l'histoire du binaire :
pour ce que je veux calculer dans le cas : combien de combinaison de 4 lettres dans 4 lettres il n'y en aurait qu'une

ABCD

je redonne un exemple, combien de 4 lettres dans 5

ABCDE =

ABCD
ABCE
ABDE
ACDE
BCDE

11110
11101
11011
10111
01111

pour 3 dans 5

11100
11010
11001
10110
10101
10011
01110
01101
01011
00111

mais je me demande si on s'égare pas là ?
0
cboulas Messages postés 2641 Date d'inscription mercredi 2 juin 2004 Statut Membre Dernière intervention 8 janvier 2014 16
8 oct. 2004 à 16:48
Philcam, le principe reste le même, après 5 ans d'électronique les principe se répète

Chris...
Web : Firstruner - eMail : [mailto:support@firstruner.com Support]
0
cs_philcam Messages postés 132 Date d'inscription dimanche 12 août 2001 Statut Membre Dernière intervention 17 octobre 2008
8 oct. 2004 à 16:54
merci de chercher , on se sent moins seul :)

mais je suis pas sûr que la formule est bonne, car par exemple si je cherche 3 lettres sur 9
avec ta formule ça fait 9 x (9/3)=27

alors que c'est 84

1 ABC
2 ABD
3 ABE
4 ABF
5 ABG
6 ABH
7 ABI
8 ACD
9 ACE
10 ACF
11 ACG
12 ACH
13 ACI
14 ADE
15 ADF
16 ADG
17 ADH
18 ADI
19 AEF
20 AEG
21 AEH
22 AEI
23 AFG
24 AFH
25 AFI
26 AGH
27 AGI
28 AHI
29 BCD
30 BCE
31 BCF
32 BCG
33 BCH
34 BCI
35 BDE
36 BDF
37 BDG
38 BDH
39 BDI
40 BEF
41 BEG
42 BEH
43 BEI
44 BFG
45 BFH
46 BFI
47 BGH
48 BGI
49 BHI
50 CDE
51 CDF
52 CDG
53 CDH
54 CDI
55 CEF
56 CEG
57 CEH
58 CEI
59 CFG
60 CFH
61 CFI
62 CGH
63 CGI
64 CHI
65 DEF
66 DEG
67 DEH
68 DEI
69 DFG
70 DFH
71 DFI
72 DGH
73 DGI
74 DHI
75 EFG
76 EFH
77 EFI
78 EGH
79 EGI
80 EHI
81 FGH
82 FGI
83 FHI
84 GHI

pour 15 c'est 455

1 ABC
2 ABD
3 ABE
4 ABF
5 ABG
6 ABH
7 ABI
8 ABJ
9 ABK
10 ABL
11 ABM
12 ABN
13 ABO
14 ACD
15 ACE
16 ACF
17 ACG
18 ACH
19 ACI
20 ACJ
21 ACK
22 ACL
23 ACM
24 ACN
25 ACO
26 ADE
27 ADF
28 ADG
29 ADH
30 ADI
31 ADJ
32 ADK
33 ADL
34 ADM
35 ADN
36 ADO
37 AEF
38 AEG
39 AEH
40 AEI
41 AEJ
42 AEK
43 AEL
44 AEM
45 AEN
46 AEO
47 AFG
48 AFH
49 AFI
50 AFJ
51 AFK
52 AFL
53 AFM
54 AFN
55 AFO
56 AGH
57 AGI
58 AGJ
59 AGK
60 AGL
61 AGM
62 AGN
63 AGO
64 AHI
65 AHJ
66 AHK
67 AHL
68 AHM
69 AHN
70 AHO
71 AIJ
72 AIK
73 AIL
74 AIM
75 AIN
76 AIO
77 AJK
78 AJL
79 AJM
80 AJN
81 AJO
82 AKL
83 AKM
84 AKN
85 AKO
86 ALM
87 ALN
88 ALO
89 AMN
90 AMO
91 ANO
92 BCD
93 BCE
94 BCF
95 BCG
96 BCH
97 BCI
98 BCJ
99 BCK
100 BCL
101 BCM
102 BCN
103 BCO
104 BDE
105 BDF
106 BDG
107 BDH
108 BDI
109 BDJ
110 BDK
111 BDL
112 BDM
113 BDN
114 BDO
115 BEF
116 BEG
117 BEH
118 BEI
119 BEJ
120 BEK
121 BEL
122 BEM
123 BEN
124 BEO
125 BFG
126 BFH
127 BFI
128 BFJ
129 BFK
130 BFL
131 BFM
132 BFN
133 BFO
134 BGH
135 BGI
136 BGJ
137 BGK
138 BGL
139 BGM
140 BGN
141 BGO
142 BHI
143 BHJ
144 BHK
145 BHL
146 BHM
147 BHN
148 BHO
149 BIJ
150 BIK
151 BIL
152 BIM
153 BIN
154 BIO
155 BJK
156 BJL
157 BJM
158 BJN
159 BJO
160 BKL
161 BKM
162 BKN
163 BKO
164 BLM
165 BLN
166 BLO
167 BMN
168 BMO
169 BNO
170 CDE
171 CDF
172 CDG
173 CDH
174 CDI
175 CDJ
176 CDK
177 CDL
178 CDM
179 CDN
180 CDO
181 CEF
182 CEG
183 CEH
184 CEI
185 CEJ
186 CEK
187 CEL
188 CEM
189 CEN
190 CEO
191 CFG
192 CFH
193 CFI
194 CFJ
195 CFK
196 CFL
197 CFM
198 CFN
199 CFO
200 CGH
201 CGI
202 CGJ
203 CGK
204 CGL
205 CGM
206 CGN
207 CGO
208 CHI
209 CHJ
210 CHK
211 CHL
212 CHM
213 CHN
214 CHO
215 CIJ
216 CIK
217 CIL
218 CIM
219 CIN
220 CIO
221 CJK
222 CJL
223 CJM
224 CJN
225 CJO
226 CKL
227 CKM
228 CKN
229 CKO
230 CLM
231 CLN
232 CLO
233 CMN
234 CMO
235 CNO
236 DEF
237 DEG
238 DEH
239 DEI
240 DEJ
241 DEK
242 DEL
243 DEM
244 DEN
245 DEO
246 DFG
247 DFH
248 DFI
249 DFJ
250 DFK
251 DFL
252 DFM
253 DFN
254 DFO
255 DGH
256 DGI
257 DGJ
258 DGK
259 DGL
260 DGM
261 DGN
262 DGO
263 DHI
264 DHJ
265 DHK
266 DHL
267 DHM
268 DHN
269 DHO
270 DIJ
271 DIK
272 DIL
273 DIM
274 DIN
275 DIO
276 DJK
277 DJL
278 DJM
279 DJN
280 DJO
281 DKL
282 DKM
283 DKN
284 DKO
285 DLM
286 DLN
287 DLO
288 DMN
289 DMO
290 DNO
291 EFG
292 EFH
293 EFI
294 EFJ
295 EFK
296 EFL
297 EFM
298 EFN
299 EFO
300 EGH
301 EGI
302 EGJ
303 EGK
304 EGL
305 EGM
306 EGN
307 EGO
308 EHI
309 EHJ
310 EHK
311 EHL
312 EHM
313 EHN
314 EHO
315 EIJ
316 EIK
317 EIL
318 EIM
319 EIN
320 EIO
321 EJK
322 EJL
323 EJM
324 EJN
325 EJO
326 EKL
327 EKM
328 EKN
329 EKO
330 ELM
331 ELN
332 ELO
333 EMN
334 EMO
335 ENO
336 FGH
337 FGI
338 FGJ
339 FGK
340 FGL
341 FGM
342 FGN
343 FGO
344 FHI
345 FHJ
346 FHK
347 FHL
348 FHM
349 FHN
350 FHO
351 FIJ
352 FIK
353 FIL
354 FIM
355 FIN
356 FIO
357 FJK
358 FJL
359 FJM
360 FJN
361 FJO
362 FKL
363 FKM
364 FKN
365 FKO
366 FLM
367 FLN
368 FLO
369 FMN
370 FMO
371 FNO
372 GHI
373 GHJ
374 GHK
375 GHL
376 GHM
377 GHN
378 GHO
379 GIJ
380 GIK
381 GIL
382 GIM
383 GIN
384 GIO
385 GJK
386 GJL
387 GJM
388 GJN
389 GJO
390 GKL
391 GKM
392 GKN
393 GKO
394 GLM
395 GLN
396 GLO
397 GMN
398 GMO
399 GNO
400 HIJ
401 HIK
402 HIL
403 HIM
404 HIN
405 HIO
406 HJK
407 HJL
408 HJM
409 HJN
410 HJO
411 HKL
412 HKM
413 HKN
414 HKO
415 HLM
416 HLN
417 HLO
418 HMN
419 HMO
420 HNO
421 IJK
422 IJL
423 IJM
424 IJN
425 IJO
426 IKL
427 IKM
428 IKN
429 IKO
430 ILM
431 ILN
432 ILO
433 IMN
434 IMO
435 INO
436 JKL
437 JKM
438 JKN
439 JKO
440 JLM
441 JLN
442 JLO
443 JMN
444 JMO
445 JNO
446 KLM
447 KLN
448 KLO
449 KMN
450 KMO
451 KNO
452 LMN
453 LMO
454 LNO
455 MNO
0
cs_philcam Messages postés 132 Date d'inscription dimanche 12 août 2001 Statut Membre Dernière intervention 17 octobre 2008
8 oct. 2004 à 17:00
Et je précise que c'est pas le nombre de combinaisons qui m'interesse le plus mais c'est de les générer :)
0
cboulas Messages postés 2641 Date d'inscription mercredi 2 juin 2004 Statut Membre Dernière intervention 8 janvier 2014 16
8 oct. 2004 à 17:11
Sorry, jme suis égarer, attent je recherche.

Chris...
Web : Firstruner - eMail : [mailto:support@firstruner.com Support]
0
cs_CanisLupus Messages postés 3757 Date d'inscription mardi 23 septembre 2003 Statut Membre Dernière intervention 13 mars 2006 20
8 oct. 2004 à 17:28
Est-ce bien raisonnable ?
Tu sais que le nombre de combi avec 7 cars avoisinne les 3 milliards ? (20*21*22*23*24*25*26)
Encore heureux que tu ne veuilles pas TOUTES les combinaisons car là c du 26^7.
Et puis avec tes exemples tu vas nous bourrer le forum.

Cordialement, CanisLupus

Tous les glands ne deviennent pas des chênes mais tous les chênes ont été des glands
0
cs_philcam Messages postés 132 Date d'inscription dimanche 12 août 2001 Statut Membre Dernière intervention 17 octobre 2008
8 oct. 2004 à 17:39
Oui bon j'avoue que mes exemples prennent un peu de place.

mais si t'avais lu au lieu de survoler les messages tu saurais qu'avec les combinaisons que je recherche y'a pas des "milliards de solutions" puisque le maxi 3 lettres sur 25 donne 2300 solutions, donc avec 7 ça devrait être moins !!

C'est pas la première fois que tes réponses commencent par "est-ce bien raisonnable", si tu fais que des choses raisonnables dans ta vie tu dois pas t'éclater tout les jours
j'sais pas si t'es un chêne ou un gland mais ton commentaire a fait vachement progressé la question.

@+

Si y'en a que ça interesse vraiment ont peu continuer.
0
cs_rene38 Messages postés 1858 Date d'inscription samedi 29 juin 2002 Statut Membre Dernière intervention 17 octobre 2013 11
8 oct. 2004 à 17:54
Bonjour
Pour le nombre de combinaisons, il y a une formule :
Le nombre de combinaisons de p éléments choisis parmi n s'écrit :
n! /(p! * (n-p)!)où n! factorielle n n x (n-1) x (n-2) x ... x 3 x 2 x 1
Exemple : pour 3 éléments choisis parmi 9
9! /(3! * (9-3)! )
(9x8x7x6x5x4x3x2x1) / (3x2x1 x 6x5x4x3x2x1)
qui, après simplifications par 6x5x4x3x2x1 donne
(9x8x7) / (3x2x1) = 84
Il est facile d'écrire en VB une
Function Factorielle(Nombre As Long) As Long
ou même une
Function Combinaisons(n As Long, p As Long) As Long

Pour trouver toutes les combinaisons, c'est moins simple mais il me semble avoir vu une source ici

PS : pour 7 lettres parmi 26,
ça fait quand même 657 800 combinaisons
0
cboulas Messages postés 2641 Date d'inscription mercredi 2 juin 2004 Statut Membre Dernière intervention 8 janvier 2014 16
8 oct. 2004 à 17:56
Je cherche tjs....

Please wait because as Windows say : "This process can't be accessed because this process is used by an other process", hihi, c'est un truc qui me fait déliré chez Microsoft, en traduction : "Le processus ne peut pas accéder au processus car ce processus est utilisé par un autre processus", c'est bien du MS tout craché.

Bon je retourne au taf de ton truc.

Chris...
Web : Firstruner - eMail : [mailto:support@firstruner.com Support]
0
cboulas Messages postés 2641 Date d'inscription mercredi 2 juin 2004 Statut Membre Dernière intervention 8 janvier 2014 16
8 oct. 2004 à 19:18
Merci Rene38, c'est trop ça que l'on cherchait.

Chris...
Web : Firstruner - eMail : [mailto:support@firstruner.com Support]
0
cs_philcam Messages postés 132 Date d'inscription dimanche 12 août 2001 Statut Membre Dernière intervention 17 octobre 2008
8 oct. 2004 à 19:50
Alors là les mots me manquent !!

Je savais bien que ça servait à rien de réinventer la roue

je viens de tester la source et c'est exactement ce que je cherchais à faire.

Alors un grand merci à Rene38 (je valide ta réponse)

et merci à cboulas, comme quoi y'avait rien d'irrésonnable dans ce problème, hein canispulul.

Merci à tous
0
cs_CanisLupus Messages postés 3757 Date d'inscription mardi 23 septembre 2003 Statut Membre Dernière intervention 13 mars 2006 20
8 oct. 2004 à 22:52
Bon, faut que je réponde quand même à philcam :
1 - non g pas fait que survoler les messages mais je me posais des questions vu ta question de départ (genre, je te cite "Depuis quelques jours je suis sur un problème qui va me mener au suicide" alors qu'on peut régler ça facilement si c vraiment utile.
2 - avant de dire ; "C'est pas la première fois que tes réponses commencent par "est-ce bien raisonnable" " tu ferais mieux de te renseigner car je crois bien que tu confonds avec qqun d'autre. Relis mes 900 et quelques messages si tu as du temps à perdre.
3 - oui, je me suis gourré dans le calcul mais toi aussi quand tu dis : "le maxi 3 lettres sur 25 donne 2300 solutions, donc avec 7 ça devrait être moins !!". Je me suis amusé à les calculer et ça fait sur les 26 lettres de l'alphabet :
1 : 26
2 : 325
3 : 2600
4 : 14950
5 : 65780
6 : 230230
7 : 657800
8 : 1562275
9 : 3124550
10 : 5311735
...
C vrai que c loin de 3 milliards et vérifies si tu veux.
4 - Pour ce qui est des trucs "raisonnables", ça se voit que tu ne me connais pas ou que tu n'as pas compris mon essai de blague. J'aurais du ponctuer par un ;) peut être ? Ton truc, à côté de ce que j'ai pensé à faire une fois....... Je ne l'ai pas publié ici mais ça consistait à trouver tous les mots possibles (longueur de 1 à 15) avec l'alphabet de 26 lettres en tenant compte de certains critères orthographiques.... Une idée de fou non ?

Bon, allez, sans rancune, bonne prog

Cordialement, CanisLupus

Tous les glands ne deviennent pas des chênes mais tous les chênes ont été des glands
0
Rejoignez-nous