Jump to content

Quantidade total de chaves, Euromilhões...


Markkos
 Share

Recommended Posts

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

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

Link to comment
Share on other 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.

Link to comment
Share on other 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  😛

Um Abraço

ML 

Link to comment
Share on other 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!!! 👍

EDIT: Adicionado GeShi

Link to comment
Share on other 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 😛

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..  ?

Link to comment
Share on other 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.

Link to comment
Share on other 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  😄 . 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

Link to comment
Share on other 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!

Link to comment
Share on other 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

Link to comment
Share on other 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.

O caminho mais curto para conseguir fazer muitas coisas é fazer uma de cada vez. Samuel Smiles

Link to comment
Share on other 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

Link to comment
Share on other 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!

"Para desenhar um website, não tenho que saber distinguir server-side de client-side" - um membro do fórum que se auto-intitula webdesigner. Temo pelo futuro da web.

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.