CRIAR FUN?ÃO PARA CONTAR MAIOR SEQUÊNCIA NÊMERICA
Olá Pessoal!
Preciso de uma ajuda para escrever uma função pra contar a maior sequência de números dentro de um
Array do Tipo Variant...
Exemplo:
Tenho uma Sequencia do tipo
MyArray(1) = 3
MyArray(2) = 4
MyArray(3) = 5
MyArray(4) = 9
MyArray(5) = 11
MyArray(6) = 15 [ô]//maior sequência inicia aqui
MyArray(7) = 16
MyArray(8) = 17
MyArray(9) = 18
MyArray(10) = 19
MyArray(11) = 20
MyArray(12) = 21 [ô]//termina aqui
MyArray(13) = 23
MyArray(14) = 24
MyArray(15) = 25
MyArray(16) = 26
MyArray(17) = 28
MyArray(18) = 35
Retorno da Função = 7
Obs: O Array será Unidimensional, e o Tamanho será variável, + ou - até uns 23 elementos
Exemplo de Uso:
Private Sub ContarSequencial()
Dim sCountSequencial As Long
MyArray(1) = 3
MyArray(2) = 4
MyArray(3) = 5
MyArray(4) = 9
MyArray(5) = 11
MyArray(6) = 15 [ô]//maior sequência inicia aqui
MyArray(7) = 16
MyArray(8) = 17
MyArray(9) = 18
MyArray(10) = 19
MyArray(11) = 20
MyArray(12) = 21 [ô]//termina aqui
MyArray(13) = 23
MyArray(14) = 24
MyArray(15) = 25
MyArray(16) = 26
MyArray(17) = 28
MyArray(18) = 35
sCountSequencial = CountSequenciais(MyArray)
[ô]Retorno da Função = 7
if sCountSequencial <> 0 then
[ô]//Aqui vai o Código
end if
End Sub
[ô]///Exemplo do Ãnicio da Função, NÃO Finalizada...
Public Function CountSequenciais(ByVal strNumber As Variant) As Long
Dim LenNumber As Long
Dim lenLoop As Long, lenSeq As Long
Dim strSeq As Long
dim strMaximo as Long
strMaximo = Ubound(strNumber)
For lenLoop = 1 To strMaximo
strSeq = strNumber(lenLoop)
If strSeq = lenLoop Then
lenSeq = lenSeq + 1
End If
Next lenLoop
CountSequenciais = lenSeq
End Function
Preciso de uma ajuda para escrever uma função pra contar a maior sequência de números dentro de um
Array do Tipo Variant...
Exemplo:
Tenho uma Sequencia do tipo
MyArray(1) = 3
MyArray(2) = 4
MyArray(3) = 5
MyArray(4) = 9
MyArray(5) = 11
MyArray(6) = 15 [ô]//maior sequência inicia aqui
MyArray(7) = 16
MyArray(8) = 17
MyArray(9) = 18
MyArray(10) = 19
MyArray(11) = 20
MyArray(12) = 21 [ô]//termina aqui
MyArray(13) = 23
MyArray(14) = 24
MyArray(15) = 25
MyArray(16) = 26
MyArray(17) = 28
MyArray(18) = 35
Retorno da Função = 7
Obs: O Array será Unidimensional, e o Tamanho será variável, + ou - até uns 23 elementos
Exemplo de Uso:
Private Sub ContarSequencial()
Dim sCountSequencial As Long
MyArray(1) = 3
MyArray(2) = 4
MyArray(3) = 5
MyArray(4) = 9
MyArray(5) = 11
MyArray(6) = 15 [ô]//maior sequência inicia aqui
MyArray(7) = 16
MyArray(8) = 17
MyArray(9) = 18
MyArray(10) = 19
MyArray(11) = 20
MyArray(12) = 21 [ô]//termina aqui
MyArray(13) = 23
MyArray(14) = 24
MyArray(15) = 25
MyArray(16) = 26
MyArray(17) = 28
MyArray(18) = 35
sCountSequencial = CountSequenciais(MyArray)
[ô]Retorno da Função = 7
if sCountSequencial <> 0 then
[ô]//Aqui vai o Código
end if
End Sub
[ô]///Exemplo do Ãnicio da Função, NÃO Finalizada...
Public Function CountSequenciais(ByVal strNumber As Variant) As Long
Dim LenNumber As Long
Dim lenLoop As Long, lenSeq As Long
Dim strSeq As Long
dim strMaximo as Long
strMaximo = Ubound(strNumber)
For lenLoop = 1 To strMaximo
strSeq = strNumber(lenLoop)
If strSeq = lenLoop Then
lenSeq = lenSeq + 1
End If
Next lenLoop
CountSequenciais = lenSeq
End Function
JAKSONLZ,
Sinceramente não entendi muito bem o que você quer fazer, mas usando a explicação da página abaixo:
===================================================
Define VB6 procedure arguments with the ParamArray keyword
http://www.techrepublic.com/article/define-vb6-procedure-arguments-with-the-paramarray-keyword/
====================================================
Modifiquei um pouco seu código.
[][ô]s,
Tunusat.
Sinceramente não entendi muito bem o que você quer fazer, mas usando a explicação da página abaixo:
===================================================
Define VB6 procedure arguments with the ParamArray keyword
http://www.techrepublic.com/article/define-vb6-procedure-arguments-with-the-paramarray-keyword/
====================================================
[ô]///Exemplo do Ãnicio da Função, NÃO Finalizada...
Private Function CountSequenciais(ParamArray strNumber() As Variant) As Long
Dim LenNumber As Long
Dim lenLoop As Long
Dim lenSeq As Long
Dim strSeq As Long
Dim strMaximo As Long
strMaximo = UBound(strNumber)
For lenLoop = 1 To strMaximo
strSeq = strNumber(lenLoop)
If strSeq = lenLoop Then
lenSeq = lenSeq + 1
End If
Next lenLoop
CountSequenciais = lenSeq
End Function
Modifiquei um pouco seu código.
[][ô]s,
Tunusat.
Obrigado por Responder....mais na verdade não intendi direito sua função, parece que simplesmente você alterou a forma de preencher o Array, mais daà pra mim não está funcionando....eu preciso saber qual a maior sequência de Números que existe no Array, por exemplo: ele começa com 3,4,5... está parte tem 3 números sequenciais, se fosse terminar aqui o tamanho do Array, o retorno da função seria =3, pois temos 3 números sequenciais...mais como o Array segue 3,4,5,[txt-color=#e80000]9[/txt-color] isso quer dizer que não está mais em sequência, por que pulou o ...6,7,8 e foi direto pro [txt-color=#e80000]9[/txt-color], mais como o Array é maior, lá na metade temos uma sequência maior de 7 números que é 15,16,17,18,19,20,21 ou seja está sequência é maior que a primeira encontrada, e é também a maior sequência de números dentro do Array, então o resultado esperado é = 7, que é o retorno final da Função...
JAKSONLZ,
Acho que entendi agora.
Eu montei o código abaixo à s pressas, por isso acho que dá para enxugar bastante as variáveis abaixo. Mas retornou [Ô]7[Ô]...
... veja se é isso que você quer.
[][ô]s,
Tunusat.
Acho que entendi agora.
Eu montei o código abaixo à s pressas, por isso acho que dá para enxugar bastante as variáveis abaixo. Mas retornou [Ô]7[Ô]...
... veja se é isso que você quer.
Option Explicit
Option Base 1
Private Sub ContarSequencial()
Dim sCountSequencial As Long
Dim answer As Long
Dim MyArray(20) As Integer
MyArray(1) = 3
MyArray(2) = 4
MyArray(3) = 5
MyArray(4) = 9
MyArray(5) = 11
MyArray(6) = 15 [ô]//maior sequência inicia aqui
MyArray(7) = 16
MyArray(8) = 17
MyArray(9) = 18
MyArray(10) = 19
MyArray(11) = 20
MyArray(12) = 21 [ô]//termina aqui
MyArray(13) = 23
MyArray(14) = 24
MyArray(15) = 25
MyArray(16) = 26
MyArray(17) = 28
MyArray(18) = 35
answer = CountSequenciais(MyArray)
[ô]Retorno da Função = 7
If sCountSequencial <> 0 Then
[ô]//Aqui vai o Código
End If
End Sub
[ô]///Exemplo do Ãnicio da Função, NÃO Finalizada...
Private Function CountSequenciais(ParamArray strNumber() As Variant) As Long
Dim LenNumber As Long
Dim lenLoop As Long
Dim lenSeq As Long
Dim strSeq As Long
Dim lngSeq As Long
Dim strMaximo As Long
Dim lngPosMenor As Long
Dim lngPosMaior As Long
Dim lngDiferenca As Long
lngPosMenor = 0
lngPosMaior = 1
lngDiferenca = 0
strMaximo = UBound(strNumber(0))
lngSeq = strNumber(0)(1)
For lenLoop = 2 To strMaximo
strSeq = strNumber(0)(lenLoop)
If strSeq <> lngSeq + 1 Then
If lngPosMenor < lngPosMaior Then
lngPosMenor = lenLoop
ElseIf lngPosMenor > lngPosMaior Then
lngPosMaior = lenLoop
If lngDiferenca < lngPosMaior - lngPosMenor Then
lngDiferenca = lngPosMaior - lngPosMenor
End If
End If
End If
lngSeq = strNumber(0)(lenLoop)
Next lenLoop
CountSequenciais = lngDiferenca
End Function
[][ô]s,
Tunusat.
Viu parece que para o exemplo funcionou...mais se eu alterar os dados para :
Mais está Retornando = 1....ta faltando alguma coisa...vou dar uma olhada com calma como você fez, pra mim tentar descobrir onde pode estar o erro, aà conversamos...obrigado por enquanto amigo...
MyArray(1) = 1
MyArray(2) = 2
MyArray(3) = 4
MyArray(4) = 6 [ô]//maior sequência inicia aqui
MyArray(5) = 7
MyArray(6) = 8
MyArray(7) = 9 [ô]//termina aqui
MyArray(8) = 11
MyArray(9) = 14
MyArray(10) = 17
MyArray(11) = 20
MyArray(12) = 21
MyArray(13) = 23
MyArray(14) = 25
MyArray(15) = 27
MyArray(16) = 31
MyArray(17) = 33
MyArray(18) = 35
[ô]Retorno esperado = 4
Mais está Retornando = 1....ta faltando alguma coisa...vou dar uma olhada com calma como você fez, pra mim tentar descobrir onde pode estar o erro, aà conversamos...obrigado por enquanto amigo...
Amigo ainda não está servindo pra todos os casos.....por exemplo
E está retornando = 2....vou fazer mais alguns testes pra verificar....
MyArray(1) = 1 [ô]//maior sequência inicia aqui
MyArray(2) = 2
MyArray(3) = 3
MyArray(4) = 4
MyArray(5) = 5 [ô]//termina aqui
MyArray(6) = 8
MyArray(7) = 9
MyArray(8) = 11
MyArray(9) = 14
MyArray(10) = 17
MyArray(11) = 20
MyArray(12) = 21
MyArray(13) = 23
MyArray(14) = 25
MyArray(15) = 27
MyArray(16) = 31
MyArray(17) = 33
MyArray(18) = 35
[ô]Retorno esperado = 5
E está retornando = 2....vou fazer mais alguns testes pra verificar....
JAKSONLZ,
Acertei com uma solução muito feia!
[][ô]s,
Tunusat.
Acertei com uma solução muito feia!
Private Function CountSequenciais(ParamArray strNumber() As Variant) As Long
Dim lngLoop As Long
Dim lngCompara As Long
Dim lngSeq As Long
Dim lngPosMenor As Long
Dim lngPosMaior As Long
Dim lngDiferenca As Long
Dim lngDiferencaAux As Long
lngPosMenor = 0
lngPosMaior = 1
lngDiferenca = 0
lngDiferencaAux = 1
lngSeq = strNumber(0)(1)
For lngLoop = 2 To UBound(strNumber(0))
lngCompara = strNumber(0)(lngLoop)
If lngCompara <> lngSeq + 1 Then
If lngPosMenor < lngPosMaior Then
lngPosMenor = lngLoop
ElseIf lngPosMenor >= lngPosMaior Then
lngPosMaior = lngLoop
If lngDiferenca < lngPosMaior - lngPosMenor Then
lngDiferenca = lngPosMaior - lngPosMenor
End If
lngLoop = lngLoop - 1
End If
ElseIf lngPosMenor = 0 Then
lngDiferencaAux = lngDiferencaAux + 1
End If
lngSeq = strNumber(0)(lngLoop)
Next
If lngDiferencaAux > lngDiferenca Then
lngDiferenca = lngDiferencaAux
End If
CountSequenciais = lngDiferenca
End Function
[][ô]s,
Tunusat.
Citação::
Acertei com uma solução muito feia!
kkkkkk
Esta parece que deu certo....fiz uns 5 testes e parece que funciona direitinho....muito Obrigado!!!!!
JAKSONLZ,
Acho que ficou bem melhor!!!
[][ô]s,
Tunusat.
Acho que ficou bem melhor!!!
Private Function CountSequenciais(ParamArray strNumber() As Variant) As Long
Dim lngLoop As Long
Dim lngCompara As Long
Dim lngSeq As Long
Dim lngDiferenca As Long
Dim lngDiferencaAux As Long
lngDiferenca = 0
lngDiferencaAux = 1
lngSeq = strNumber(0)(1)
For lngLoop = 2 To UBound(strNumber(0))
lngCompara = strNumber(0)(lngLoop)
If lngCompara = lngSeq + 1 Then
lngDiferencaAux = lngDiferencaAux + 1
If lngDiferencaAux > lngDiferenca Then
lngDiferenca = lngDiferencaAux
End If
Else
lngDiferencaAux = 1
End If
lngSeq = strNumber(0)(lngLoop)
Next
CountSequenciais = lngDiferenca
End Function
[][ô]s,
Tunusat.
Citação::
Acho que ficou bem melhor!!!
HÃ HÃÃ...Ficou blza, Muito Obrigado meu amigo.....vou finalizar o Tópico...
JAKSONLZ,
OKay, mas testa mais.
[][ô]s,
Tunusat.
OKay, mas testa mais.
[][ô]s,
Tunusat.
Tópico encerrado , respostas não são mais permitidas