Notifications
Clear all

todos os divisores possiveis de um numero

8 Posts
2 Usuários
0 Reactions
1,496 Visualizações
(@edcronos)
Posts: 1006
Noble Member
Topic starter
 

é para uso em uma macro, mas como ainda preciso do básico. "sou péssimo em matemática"
pode ter tbm alguma função no excel que faça isso

eu preciso fazer uma listagem em um Combobox de todos os (divisores possíveis) de um numero qualquer

li algumas coisas mais não consegui aplicar
Pensei em aplicar um contador com a função mod, se o resultado for zero o numero entra na lista
30/2 = 15
30/3 = 10
30/4 = 7,5 ( 4 não entra na lista)
30/5 = 6
30/6 = 5
...
alguem tem uma ideia mais pratica e mais lógica que isso??
Att.

 
Postado : 02/06/2014 4:13 pm
(@gtsalikis)
Posts: 2373
Noble Member
 

Mais fácil que lopar com mod e não conheço, mas... segue uma matricial que lista os divisores, considerando qe o número esteja em A1, coloque a fórmula em B1 e arraste:

=SEERRO(SE(MENOR((SE(MOD($A$1;LIN(INDIRETO("1:"&$A$1)))=0;1;$A$1+1))*(LIN(INDIRETO("1:"&$A$1)));LIN())>$A$1;"";MENOR((SE(MOD($A$1;LIN(INDIRETO("1:"&$A$1)))=0;1;$A$1+1))*(LIN(INDIRETO("1:"&$A$1)));LIN()));"")

 
Postado : 02/06/2014 7:13 pm
(@edcronos)
Posts: 1006
Noble Member
Topic starter
 

vamos dizer assim,
tenho que entender como funciona a formula, para aplicar no vba

não entendi como ela lista os os divisores em sequencia
tipo : no caso do 30 ela não passa pelo /4
30/4 = 7,5 ( 4 não entra na lista)
vou tentar quebrar a formula para entender a matemática envolvida
valeu

 
Postado : 02/06/2014 7:49 pm
(@gtsalikis)
Posts: 2373
Noble Member
 

ta, mas, pq vc simplesmente nao faz o loop?

Function Divisores_GT(num As Long) As String

Dim i As Long
Dim retorno As String

retorno = 1
For i = 2 To num
If num Mod i = o Then retorno = retorno & "; " & i
Next i

Divisores_GT = retorno

End Function

Sub testar()
MsgBox Divisores_GT(30)
End Sub

 
Postado : 02/06/2014 8:06 pm
(@edcronos)
Posts: 1006
Noble Member
Topic starter
 

:oops:
creio que é mania de querer complicar

é para uma macro que divide um setor em quadrante, os valores são colocados manualmente,
então pensei em listar as possíveis divisões para que não gerasse espaço em branco no setor de destino

mas tbm queria entender a matemática , para tentar fazer um outro trabalho de reposicionamento das células.

mas como falei creio que gosto de complicar já que a macro estar funcionando a contento eu sismo de adicionar funções nela.

 
Postado : 02/06/2014 8:35 pm
(@edcronos)
Posts: 1006
Noble Member
Topic starter
 

creio ter entendido a formula,
ela por ser matricial faz um falso loop da linha 1 até a linha de valor da celula

MENOR((SE(MOD($A$1;LIN(INDIRETO("1:"&$A$1)))=0;
Se mod exclui os valores diferentes de zero e menor organiza por linha do menor para o maior

=SE(MOD(A$1;LIN())=0;A$1/LIN();"") no caso dessa não reorganiza e teria que preencher metade para ter todos os valores.

mas pelos resultados acho que posso ter todos os resultados sem ter que fazer o loop completo apenas por amostragem

essa pagina até parece ter a resposta , mas eu olho aquele monte de numero e embaralha tudo
http://www.matematicadidatica.com.br/Ca ... tural.aspx

 
Postado : 03/06/2014 12:11 am
(@gtsalikis)
Posts: 2373
Noble Member
 

essa pagina até parece ter a resposta , mas eu olho aquele monte de numero e embaralha tudo
http://www.matematicadidatica.com.br/Ca ... tural.aspx

Sim, a fórmula faz o falso loop, como vc descreveu.
Sobre o site, segue a mesma lógica, querendo ou não, tem que lopar. Eu não achei uma função nativa do excel para decompor o número em primos, mas, uma vez encontrados todos os primos, trata-se de fazer todas as combinações possíveis entre eles, o que resultaria (em VBA), em 2 loops, o primeiro loop para identificar os primos divisores do números, e o segundo loop para combinar (multiplicar) todos os primos, motivo pelo qual eu já tinha abandonado esta ideia.

Abs

 
Postado : 03/06/2014 7:29 am
(@edcronos)
Posts: 1006
Noble Member
Topic starter
 

entendi, valeu mesmo.
ganhei até uma aula de matemática de gratis :P

talvez haja uma constante lógica que pudesse ser aplicada,
mas creio que isso não venha ao caso num fórum de informatica.

Até achei umas macros que retornam a lista de primos, mas como vc mesmo disse em um caso que apenas se quer os divisores não vale a pena tanta complicação.

o pior que eu acho que minha planilha só depende da parte de teor matemático par ser concluída,
até reescrevi as macros mais lentas parar usar Arrays, oq fez ficar muito mais rapido

mas fazer o cruzamento de dados de maneira lógica , sendo que os valores só me retornam alguns itens combinantes está me fazendo ir a lua e voltar varias vezes em meus pensamentos.

valeu pela ajuda.

 
Postado : 03/06/2014 8:29 am