COMBINA?ÕES EM FORMUL?RIO-VBA_EXCEL

MAUROMEIRA 27/07/2016 14:58:52
#465183
Boa Noite a Todos
Gostaria da ajuda de Vc's neste arquivo, pequei um formulário na net que faz combinações de números, mas eu gostaria que estas combinações fosse através dos números discriminados na TextBox4, segue figuras e código e arquivo.

Grato a Todos


Mauro
   Public Function Combinacoes(Grupo As Integer, Elementos As Integer) As Long
If Elementos < 1 Or Grupo < 1 Or Elementos > Grupo Then Exit Function
[ô] M!/(M-N)!/N! convertida
[ô]Combinações = Factorial(Grupo) / Factorial(Grupo - Elementos) / Factorial(Elementos)
Dim T As Double, a As Integer
T = 1
For a = 1 To Grupo - Elementos
T = T * (a + Elementos) / a
Next a
Combinacoes = T
End Function
Public Function GetSeqCombinacoes(Grupo As Integer, Elementos As Integer, NrComb As Long) As Integer()
Dim a As Integer, b As Integer, c As Integer
Dim N As Double, m As Double, SS() As Integer
If NrComb < 1 Then NrComb = 1
If NrComb > Combinacoes(Grupo, Elementos) Then Exit Function
N = NrComb - 1: c = Grupo
ReDim Preserve SS(Elementos)
For a = Elementos To 1 Step -1
For b = c To a Step -1
m = Combinacoes(b - 1, a)
If N >= m Then
N = N - m
SS(a) = b
c = b - 1
Exit For
End If
Next b
Next a
GetSeqCombinacoes = SS
End Function
Public Function NumsSeqCombinacoes(Grupo As Integer, Elementos As Integer, NrComb As Long, Optional Separador As String = [Ô] [Ô]) As String
Dim I As Integer, S As String
Dim NRS() As Integer
NRS = GetSeqCombinacoes(Grupo, Elementos, NrComb)
If UBound(NRS) <> Elementos Then Exit Function
If Elementos > 0 Then S = NRS(1)
For I = 2 To Elementos
S = S & Separador & NRS(I)
Next I
NumsSeqCombinacoes = S
End Function

[ô]Formulário
Private Sub CommandButton1_Click()
ListBox1.Clear
Dim I As Long, T As Double
Dim N As Integer, E As Integer
N = Val(TextBox1.Text)
E = Val(TextBox2.Text)
T = Combinacoes(N, E)
Label6.Caption = T
If T > 1000 Then T = 1000 [ô]Limite optional para não sobrecarregar a listbox
For I = 1 To T
ListBox1.AddItem NumsSeqCombinacoes(N, E, I)
Next I
End Sub

KERPLUNK 27/07/2016 19:53:07
#465188
O que você quer se chama permutações e não combinações. Você precisa usar os números fornecidos como elementos. Nos métodos que você mostrou, os elementos são sempre sequenciais o que não é o que você quer, então seus métodos vão mudar bastante. E sua próxima pergunta vai ser [Ô]Pode me dar um exemplo?[Ô]
MAUROMEIRA 27/07/2016 20:21:06
#465189
Citação:

:
O que você quer se chama permutações e não combinações. Você precisa usar os números fornecidos como elementos. Nos métodos que você mostrou, os elementos são sempre sequenciais o que não é o que você quer, então seus métodos vão mudar bastante. E sua próxima pergunta vai ser [Ô]Pode me dar um exemplo?[Ô]



Pode me dar um exemplo?, Por favor.
KERPLUNK 27/07/2016 21:28:43
#465190
Bem, você quer aprender a fazer, entender o que está acontecendo, ou quer só o resultado?
MAUROMEIRA 28/07/2016 17:23:51
#465222
Bom, vamos por partes, este arquivo anexo são formulas para combinação, combinações dos valores 9 e 6 = 84 e permutas com estes valores, será de 60480, corrige se eu estiver errado, eu gostaria da ajuda para em vez dos sistema mostrar de 1 à ......, mostrasse os valores escritos na TextBox4, gostaria muito de aprender a fazer e entender.

Obrigado pela ajuda.
KERPLUNK 28/07/2016 22:02:51
#465236
Ok, para fazer o que você quer, você precisa entender como é feito no papel. Você tem os números:
1 - 3 - 6 -7 - 9 -14
Então você quer todas as permutações possíveis de 3 dígitos. Teria algo como:
1-3-6
1-3-7
1-3-9
1-3-14
3-6-7
3-6-9
E assim por diante, certo? é isso que você quer fazer?
MAUROMEIRA 29/07/2016 12:03:54
#465269
Bom Dia Kerplunk

Sim, Isso o arquivo já faz, agora o que eu quero é um complemento [Ô]macro[Ô] que lê estes números pelo TextBox4 e apresente na ListBox como proposto.

Grato
Mauro
Faça seu login para responder