Markkos Posted September 12, 2009 at 11:59 PM Report Share #286691 Posted September 12, 2009 at 11:59 PM 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 Link to comment Share on other sites More sharing options...
pedrix21 Posted September 13, 2009 at 12:36 AM Report Share #286702 Posted September 13, 2009 at 12:36 AM 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. 🙂 @Pedro Lopes Link to comment Share on other sites More sharing options...
Markkos Posted September 13, 2009 at 10:17 AM Author Report Share #286727 Posted September 13, 2009 at 10:17 AM 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 More sharing options...
rogi_cps Posted September 18, 2009 at 03:04 PM Report Share #287622 Posted September 18, 2009 at 03:04 PM 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 More sharing options...
Markkos Posted September 18, 2009 at 05:22 PM Author Report Share #287653 Posted September 18, 2009 at 05:22 PM 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 More sharing options...
rogi_cps Posted September 18, 2009 at 06:51 PM Report Share #287677 Posted September 18, 2009 at 06:51 PM Blz.... vou ver um código pra vc!@! Link to comment Share on other sites More sharing options...
rogi_cps Posted September 18, 2009 at 07:36 PM Report Share #287688 Posted September 18, 2009 at 07:36 PM 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 More sharing options...
heldercorreia Posted September 18, 2009 at 07:49 PM Report Share #287691 Posted September 18, 2009 at 07:49 PM 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 More sharing options...
rogi_cps Posted September 18, 2009 at 08:05 PM Report Share #287694 Posted September 18, 2009 at 08:05 PM 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 More sharing options...
Markkos Posted September 19, 2009 at 12:37 AM Author Report Share #287746 Posted September 19, 2009 at 12:37 AM 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 More sharing options...
rogi_cps Posted January 14, 2010 at 04:40 PM Report Share #306089 Posted January 14, 2010 at 04:40 PM 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 More sharing options...
Markkos Posted January 14, 2010 at 09:26 PM Author Report Share #306162 Posted January 14, 2010 at 09:26 PM 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 More sharing options...
FreiNando Posted January 14, 2010 at 09:36 PM Report Share #306163 Posted January 14, 2010 at 09:36 PM 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 More sharing options...
rogi_cps Posted January 25, 2010 at 06:29 PM Report Share #307987 Posted January 25, 2010 at 06:29 PM Oi, tive que viajar novamente, mas creio que depois de pensar muito e crebar a cabeça , 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 More sharing options...
mjamado Posted January 26, 2010 at 10:01 PM Report Share #308160 Posted January 26, 2010 at 10:01 PM É 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 More sharing options...
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now