• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

Markkos

Quantidade total de chaves, Euromilhões...

15 mensagens neste tópico

Pedia a vossa ajuda.

É possivel alguem disponibilizar, em VBA, a forma de calcular a quantidade total de combinações C(50;5), para eu poder aplicar numa macro, e aplicar o resultado numa celula. No total são 2.118.760, mas precisava em codigo.

Muito Obrigado

Um Abraço

ML

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Vê-se que és novo por aqui Markkos, coloca "algo" para alguém te poder ajudar, assim a disponibilizar(pedir) código feito penso que ninguém irá ajudar-te, a meu ver.

:)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Sim, é o meu 1º post, e já tou a pedir coisas  :D

Não sei programar, tenho umas tentativas frustadas  :), mas falta-me muitas bases e raciocinio. Mas ideias tenho muitas.

Forneço aqui um algoritmo (pseudocodigo) que pode ajudar a quem me queira ajudar, pois não consigo passar para VBA. Mas o algoritmo é para o total de combinações de 5 numeros e 2 estrelas, mas so me interessa o total de combinações de 5 numeros no total de 50.

Aqui vai

função númeroDeCombinações(n, k)
    seja dif = n - k;

    se (k < dif) então:
        seja dif = k;
        seja k = n - dif;

    seja combinações = k + 1;

    se (dif = 0) então:
        seja combinações = 1;
    senão: se (dif >= 2) então:
        para (i = 2; i <= dif; i = i + 1)
            seja combinações = (combinações * (k + i)) / i;
        fim de para;

    devolve combinações;
fim de função númeroDeCombinações

um Abraço

ML

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Tá certo.... 

pelo que está mostrando em português estruturado, vc apenas carrega o resultado em variáveis que serão automaticamente substituídas...

como gostaria que mostrassem os valores???

onde gostaria que isso aparecesse??

Essa estrutura, tá mais próxima de C++, do que qualquer outra linguagem, principalemtne voltada a objeto.

Para falar bem a verdae, estava analisando o que escreveu e o seu algorítmo, e não entendi o que realmente quer.  pode exoplanar sobre isso??  Qual é o comportamento esterado, onde isso será mostrado , esse ti´po de coisa.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

O que eu pretendo é, criar uma macro que me indique a quantidade de combinações de 5 numeros num total de 50 numeros. Ou seja, é introduzido a quantidade de numeros numa celula, e aparece uma mensagem com o resultado.

Por exemplo,

Se eu digitar na celula A1 o numero 50, e carregando num botão para calcular, o que a caixa de dialogo vai dizer é, "O total de combinações é  2.118.760"

Se eu colocar o numero 30 o resultado é  142.506 combinações.................

Basicamente é a aplicação desta formula, no Excel 2007

=combin(50;5) o resultado é 2.118.760

=combin(35;5) o resultado é 324.632   

=combin(25;5) o resultado é 53.130

=combin(17;5) o resultado é 6.188

A ideia é esta  :P

Um Abraço

ML 

 

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Meu amigo, aqui está sua codificação. É meio simples, porém funcional.

Public Sub Combinacao()
Dim A As Integer
Dim B As Integer
Dim G As Variant

'Busca os valores digitados na planilha
A = Worksheets(1).Cells(2, 1)
B = Worksheets(1).Cells(2, 2)
G = Application.Combin(A, B)

'Informa a mensagem com o valor
MsgBox "O valor da combinação do número " & A & vbCr & vbCr & _
"Com a quantidade de posição " & B & vbCr & vbCr & _
"Resulta em " & G & " combinações", vbOKOnly, "Resultado"

'Grava o valor na linha 2 coluna C
Worksheets(1).Cells(2, 3) = G

End Sub

Agora o que tem que faze é o seguinte.... Abra uma planilha de Excel, entre no modo editor de código (ALT+F11), crie um módulo, copie e cole o conteúdo.

Caso queira criar um botão e chamar o procedimento tb pode. Só para não esquecer. Estou utilizando a Primeira linha da planilha como um cabeçalho (colunas A,B,C), sendo que a primeira A1 = quantidade de números, A2 = quantidade de posições, C = resultado

Na linha 2 (A2, B2, C2) vc coloca os valores que deseja buscar, sendo que a ordem de escrita é a mesma acima (por ex.: A2=50, B2 = 5, C2 ira apresentar um resultado)

Espero que isso tenha ajudado, caso não consiga fazer o que falei acima, dá um toque.

Flw!!! :thumbsup:

EDIT: Adicionado GeShi

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Fiquei com a ideia de que o que se pretende aqui é implementar o algoritmo das combinações em si, e não utilizar uma função já existente que devolva o valor de imediato..

Não percebi bem o algoritmo que apresentaste, vá o meu forte também não são as probabilidades :P

Se calhar uma descrição do algoritmo talvez ajude mais do que o pseudo-código, ou sirva também para complementar o pseudo-código. Não capisquei nada daquilo..  :eek:

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

O que está querendo então???

A aplicação da função é usada para facilitar o resultado.

O que tá querendo é que a função seja completamente descrita em VBA???  com todas as suas passagens matemáticas??

Agora acho que eu estou meio perdido, no que cabe ao seu interesse!

Explique melhor, talvez possa dizer se isso está ao meu alcance.  Farei o seguinte...  pelo jeito nao conseguiu rodar o código em questão, então postarei o arquivo aki para que possa ver como funciona.  Porém esse processo somente posso fazer em casa, uma vez que estou no trabalho e não permite down e up na rede.

Mas tente deixar o mais claro possível.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Olá, rogi_cps

Desde já, quero agradecer-te pela ajuda que me estás a dar.

Já passei o codigo que colocaste, realmente, é muito simples, e funcional, é tão simples que nem sei como não consegui fazer  :D. Foi o que te tinha pedido, muito obrigado.

Mas a opinião do heldercorreia é interessante

O algoritmo que está no post acima, não foi feito por mim, tirei de um outro forum, e estava lá escrito que era um algoritmo das combinações, mas não sei se funciona.

Achei a tua pergunta, interessante, ou seja, em vez de estar a fazer a macro com uma função, tentar sim, fazer a mesma macro aplicando um algoritmo das combinações.

rogi_cps Consegues fazer a mesma macro mas sem ser com a função?

Um Abraço

ML

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Meu amigo,

Me desculpe, tive que dar uma viajada...  e estou voltando agora...  vi suas resposta.

Creio que um algorítimo em que fosse usado totalmente VBA, fique estenso, pois vejo que nessa macro ele não considera números repetidos, o que seria em termos de VBA, seria uma codificação para gerar, e outra para verificar a existência da numeração.

Vou estar verificando isso aqui, e qualquer coisa eu posto novamente a resposta.

Valeu!

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Meu amigo,

Me desculpe, tive que dar uma viajada...  e estou voltando agora...  vi suas resposta.

Creio que um algorítimo em que fosse usado totalmente VBA, fique estenso, pois vejo que nessa macro ele não considera números repetidos, o que seria em termos de VBA, seria uma codificação para gerar, e outra para verificar a existência da numeração.

Vou estar verificando isso aqui, e qualquer coisa eu posto novamente a resposta.

Valeu!

Obrigado pela ajuda

Um abraço

ML

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Meus amigos

Para o calculo de probalidades o VBA é excelente!

Basta você fazer uma função que calcule :

      Probabilidades(Conjunto,Num_Elementos)=Factorial(Conjunto)/Factorial(Num_Elementos)/Factorial(Conjunto-Num_Elementos)

Já agora, para o calculo do Factorial faça uma função recursiva, fica muito simples.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Oi, tive que viajar novamente, mas creio que depois de pensar muito e crebar a cabeça  :wallbash: , criei algo que talvez fosse o que você está procurando.

Utilizando a fórmula matemática de combinação simples, criei uma codificação para isso.

Está abaixo a codificação, espero que seja isso que esteja procurando  :(

Public Sub Combinacao()
Dim ValorTotal As Double
Dim Total As Double
Dim Total2 As Double
Dim ValorNum As Double
Dim Num As Double
Dim ValorResult As Double
Dim Subt As Double
Dim Subt2 As Double
Dim Divisor As Double


Total = Worksheets("Plan1").Range("a1").Value
Num = Worksheets("Plan1").Range("b1").Value
Subt2 = Total - Num

ValorTotal = Total
ValorNum = Num
Subt = Subt2

Do While Total <> 1
    Total = Total - 1
    ValorTotal = Total * ValorTotal
Loop

Do While Num <> 1
    Num = Num - 1
    ValorNum = Num * ValorNum
Loop

Do While Subt2 <> 1
    Subt2 = Subt2 - 1
    Subt = Subt2 * Subt
Loop

Divisor = ValorNum * Subt

ValorResult = ValorTotal / Divisor

Worksheets(1).Range("c1").Value = ValorResult

End Sub

A1 você deve colocar a quantidade de números do conjunto (combinação)

B1 você deve colocar a quantidade de números que terá cada combinação

Ex: 60,6 (mega Sena Brasileira)

Caso queira crie um botão na planilha para chamar o procedimento, ou execute no modo de VBA.

Espero que tenha ajudado.

Qualquer coisa... pode postar, e me desculpe a demora.

rogi_cps

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

É incrível, registei-me há 10 minutos e já encontrei pseudo-código meu... É preciso ser-se muita bom...  :)

Pois é, Markkos, como ninguém te ajudava com VBA lá do outro lado, vieste pedir para outra freguesia; acho que fizeste bem. Podias era ter dito de onde (e de quem, já agora) isso tinha vindo...

O algoritmo apresentado acima não é da minha autoria, eu só o converti para pseudo-código e fiz implementações dele em C#, AS3 e PHP. Foi publicado em 1963 por M. L. Wolfson e H. V. Wright.

O Markkos retirou deste post meu no euromilhoes.com, revisto recentemente no meu site pessoal. Noutro post do euromilhoes.com já demonstrei como se geram todas as combinações no Excel, sem recurso a programação.

Abraços!

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora