OVH Cloud OVH Cloud

addition case d'un tableau

9 réponses
Avatar
Titeuf [VB.Net 2005]
Bonjour,
Je me prend la tête depuis plusieurs heures sur un problème vraiment "con"

J'ai un tableau de 8 cases : Tab(8). Il est rempli de la manière suivante
Tab(0)=A
Tab(1)=B
....
Tab(7)=H

Je voudrais afficher toute les solutions possible de concaténation de chaque
case comme ci-dessous
Le nombre de solution je pense doit faire la taille de mon tableau au carré
Voila si quelqu'un êut m'aider c'est pas trop un problème de code mais c'est
plutot un problème de raisonnement les algos que j'ai fait ne donnent pas ce
que j'attend
Merci d'avance

ABCDEFGH
ABCDEFG
ABCDEF
ABCDE
ABCD
ABC
AB
BCDEFGHA
BCDEFGH
BCDEFG
BCDEF
BCDE
BCD
BC
B
CDEFGHAB
CDEFGHA
CDEFGH
CDEFG
CDEF
CDE
CD
C
DEFGHABC
DEFGHAB
DEFGHA
DEFGH
.........

9 réponses

Avatar
Titeuf [VB.Net 2005]
Je précise que malgré mon speudo je travaille sous vb6 et pas en .net !
Avatar
Jean-Marc
"Titeuf [VB.Net 2005]" a écrit dans le message de
news:
Bonjour,
Je me prend la tête depuis plusieurs heures sur un problème vraiment "con"

J'ai un tableau de 8 cases : Tab(8). Il est rempli de la manière suivante
Tab(0)=A
Tab(1)=B
....
Tab(7)=H

Je voudrais afficher toute les solutions possible de concaténation de


chaque
case comme ci-dessous
Le nombre de solution je pense doit faire la taille de mon tableau au


carré
Voila si quelqu'un êut m'aider c'est pas trop un problème de code mais


c'est
plutot un problème de raisonnement les algos que j'ai fait ne donnent pas


ce
que j'attend



Hello,

voici:

Private Sub Command1_Click()
Dim t(7) As String
Dim i As Integer
Dim j As Integer
Dim k As Integer
Dim l As Integer
Dim tmp As String
' init
For i = 1 To 7
t(i) = Chr$(64 + i) ' A, B, C, ...
Next i

For i = 1 To 7
For j = 7 To 1 Step -1
For k = 1 To j
Debug.Print t(k);
Next k
Debug.Print
Next j
' rotation
tmp = t(1)
For l = 1 To 6
t(l) = t(l + 1)
Next l
t(7) = tmp
Next i
End Sub

et le résultat, comme demandé:
ABCDEFG
ABCDEF
ABCDE
ABCD
ABC
AB
A
BCDEFGA
BCDEFG
BCDEF
BCDE
BCD
BC
B
CDEFGAB
CDEFGA
CDEFG
CDEF
CDE
CD
C
DEFGABC
DEFGAB
DEFGA
DEFG
DEF
DE
D
EFGABCD
EFGABC
EFGAB
EFGA
EFG
EF
E
FGABCDE
FGABCD
FGABC
FGAB
FGA
FG
F
GABCDEF
GABCDE
GABCD
GABC
GAB
GA
G

--
Jean-marc
"There are only 10 kind of people
those who understand binary and those who don't."
mailto: remove '_no_spam_' ;
Avatar
Titeuf [VB.Net 2005]
J'ai pas trop le raisonnement mathématique c'est peut etre pour ca que j'ai
du mal avec les algos
Je vais regardé d'un peu plus près....
Merci beaucoup
Avatar
Titeuf [VB.Net 2005]
Aie quand j'essais de récupérer chaque solution dans un tableau cela ne
marche pas j'ai des trucs bizarre

Sinon je ne comprend pas très bien pourquoi tu fais 3 boucles avant la
rotation
J'en faisait que 2 est cela me donnais comme toi mais après c'est pour
mettre cela dans un tableau sa coince
Si tu as une idée pour récupérer toute les solutions dans un tableau de
string merci d'avance
Avatar
Jean-Marc
"Titeuf [VB.Net 2005]" a écrit dans le message de
news:%

Re,

Aie quand j'essais de récupérer chaque solution dans un tableau cela ne
marche pas j'ai des trucs bizarre



Rien de bien compliqué.

Sinon je ne comprend pas très bien pourquoi tu fais 3 boucles avant la
rotation



Parce que ca rend le programme plus lisible et facil à modifier
de se servir d'une troisième boucle pour jouer
avec les indices.

J'en faisait que 2 est cela me donnais comme toi mais après c'est pour
mettre cela dans un tableau sa coince
Si tu as une idée pour récupérer toute les solutions dans un tableau de
string merci d'avance



Oui, plus qu'une idée même :-))

' 8<---------------------------------

Private Sub Command1_Click()
Dim t(7) As String
Dim i As Integer
Dim j As Integer
Dim k As Integer
Dim l As Integer
Dim tmp As String

Dim solu() As String
Dim nbsol As Integer

' init
For i = 1 To 7
t(i) = Chr$(64 + i) ' A, B, C, ...
Next i

For i = 1 To 7
For j = 7 To 1 Step -1
tmp = ""
For k = 1 To j
tmp = tmp & t(k)
Next k
nbsol = nbsol + 1
ReDim Preserve solu(nbsol)
solu(nbsol) = tmp
Next j
' rotation
tmp = t(1)
For l = 1 To 6
t(l) = t(l + 1)
Next l
t(7) = tmp
Next i

' verification
Debug.Print "il y a " & nbsol & " combinaisons:"
For i = 1 To nbsol
Debug.Print solu(i)
Next i
End Sub


' 8<---------------------------------

Et voila :-)

--
Jean-marc
"There are only 10 kind of people
those who understand binary and those who don't."
mailto: remove '_no_spam_' ;
Avatar
Patrice Henrio
"Titeuf [VB.Net 2005]" a écrit dans le message de news:

J'ai pas trop le raisonnement mathématique c'est peut etre pour ca que
j'ai du mal avec les algos
Je vais regardé d'un peu plus près....
Merci beaucoup



Il me semble que cela ne donne pas toutes les concaténations possibles.
D'après ce que je comprends il s'agit d'écrire tous les mots possibles avec
au plus une fois chaque lettre.
Ainsi avec 3 lettres
A, B, C, AB, AC, BA, BC,CA,CB, ABC,ACB,BAC,BCA,CAB,CBA : 15 solutions
au lieu de
ABC,AB,A,BCA,BC,B,CAB,CA,C : 9 solutions

Dés que j'ai un peu de temps je me penche sur un algo qui fait cela.

Ceci étant peut-être la question est-elle en effet de trouver tous les mots
possibles en faisant une rotation des lettres.
Avatar
Titeuf [VB.Net 2005]
Merci à jean-marc pour son algo pour le temps qu'il a passé pour moi il m'a
bien été utile même si c'est c'est vrai j'ai remarqué qu'il ne donné pas
toute les solutions
en fait j'en ai besoin pour un petit prog qui evite lorsque l'on a une tonne
de dossier à graver sur cd de passer un temps fou à choisir les bon dossiers
pour "gaspiller lol" le moins de place possible sur le cd ou dvd
alors voila cette algo me permet de rechercher toute les solutions entre
chaque dossier (taille) pour éviter de "gaspiller" de la place sur le cd
pour etre plus clair voir ma source http://vbperfect.free.fr/cdprg.zip
attention c'est baclé comme code c'est du provisoire mais bon c'est vrai que
si vous avez un peu de temps je vous en remercie d'avance...


"Patrice Henrio" a écrit dans le message de
news:

"Titeuf [VB.Net 2005]" a écrit dans le message de news:

J'ai pas trop le raisonnement mathématique c'est peut etre pour ca que
j'ai du mal avec les algos
Je vais regardé d'un peu plus près....
Merci beaucoup



Il me semble que cela ne donne pas toutes les concaténations possibles.
D'après ce que je comprends il s'agit d'écrire tous les mots possibles
avec
au plus une fois chaque lettre.
Ainsi avec 3 lettres
A, B, C, AB, AC, BA, BC,CA,CB, ABC,ACB,BAC,BCA,CAB,CBA : 15 solutions
au lieu de
ABC,AB,A,BCA,BC,B,CAB,CA,C : 9 solutions

Dés que j'ai un peu de temps je me penche sur un algo qui fait cela.

Ceci étant peut-être la question est-elle en effet de trouver tous les
mots possibles en faisant une rotation des lettres.



Avatar
Jean-Marc
"Patrice Henrio" a écrit dans le message de
news:

"Titeuf [VB.Net 2005]" a écrit dans le message de news:

> J'ai pas trop le raisonnement mathématique c'est peut etre pour ca que
> j'ai du mal avec les algos
> Je vais regardé d'un peu plus près....
> Merci beaucoup
>
Il me semble que cela ne donne pas toutes les concaténations possibles.
D'après ce que je comprends il s'agit d'écrire tous les mots possibles


avec
au plus une fois chaque lettre.
Ainsi avec 3 lettres
A, B, C, AB, AC, BA, BC,CA,CB, ABC,ACB,BAC,BCA,CAB,CBA : 15 solutions
au lieu de
ABC,AB,A,BCA,BC,B,CAB,CA,C : 9 solutions

Dés que j'ai un peu de temps je me penche sur un algo qui fait cela.

Ceci étant peut-être la question est-elle en effet de trouver tous les


mots
possibles en faisant une rotation des lettres.



Hello,

c'est en effet ce que disaient les "spécifications" de titeuf.
Bien entendu, cela ne donne pas toutes les compbinaisons comme
tu le dis très justement.
Il y a différents algorithmes pour calculer les combinaisons de
lettres. Ce type d'algo génère énormément de solutions,
de façon très exponentielle:
Pour n lettres, c'est en effet la somme des arrangements
de n parmi n + arrangements de n-1 parmi n, etc.

Pour 3 lettres, c'est donc

A(3,1) + A(3,2) + A(3,3)
3!/(3-1)! + 3!/(3-2)! + 3!/(3-3)! = 3 + 6 + 6 = 15 (CQFD)

Le calcul pour 5 lettres nous donne déjà 325 solutions,
et au dela, ça explose!

--
Jean-marc
"There are only 10 kind of people
those who understand binary and those who don't."
mailto: remove '_no_spam_' ;
Avatar
Titeuf [VB.Net 2005]
Quand je pense que j'ai fait 2 ans d'algo en particulier sur des
manipulations de ce genre la est qu'il ne me reste plus rien.... :(