Combinação

Fórum sobre a linguagem CA-Clipper.

Moderador: Moderadores

Avatar do usuário
WCARDOSO
Usuário Nível 2
Usuário Nível 2
Mensagens: 59
Registrado em: 08 Jul 2004 10:49

Combinação

Mensagem por WCARDOSO »

Boa tarde, gostaria de uma ajuda, quero fazer uma combinação de milhar, alguém tem alguma função?
[]´s
Wagner
prmuller
Usuário Nível 3
Usuário Nível 3
Mensagens: 122
Registrado em: 11 Nov 2008 12:25
Localização: Vila Velha - ES

Combinação

Mensagem por prmuller »

Bom dia Wagner!
Qual o objetivo final?
Em análise combinatória existe o arranjo e a combinação, daí, depende do que vc quer fazer. Seria algum sorteio, gerar milhares aleatórias?

Sds,
Paulo Müller
Avatar do usuário
WCARDOSO
Usuário Nível 2
Usuário Nível 2
Mensagens: 59
Registrado em: 08 Jul 2004 10:49

Combinação

Mensagem por WCARDOSO »

Bom dia prmuller, a combinação seria de uma milhar por exemplo: 9756, nesta milhar a função iria fazer todas as possíveis combinações.
Ex.: 9567 - 9567 - 9756 - 9765- 7965 - 7956 - 5976 - 5967 - etc.. sempre nas milhares que forem inseridas.
[]´s
Wagner
prmuller
Usuário Nível 3
Usuário Nível 3
Mensagens: 122
Registrado em: 11 Nov 2008 12:25
Localização: Vila Velha - ES

Combinação

Mensagem por prmuller »

Bom dia!
Isso, na realidade, é um problema de arranjo. Seria a resposta para duas questões: quantas combinações são possíveis usando a milhar x? Como fazer isso?
Já fiz assim mas, usando o Pascal. Existe inclusive uma função já pronta. Em clipper eu gerava bds para bingos, raspadinhas, etc.
De qualquer forma, vou procurar nos meus arquivos antigos para ver se acho alguma coisa.
Não é o caso, mas de uma olhada na função Random do clipper que gera números alea
tórios.

Sds,
Paulo Müller
prmuller
Usuário Nível 3
Usuário Nível 3
Mensagens: 122
Registrado em: 11 Nov 2008 12:25
Localização: Vila Velha - ES

Combinação

Mensagem por prmuller »

Correção. É combinação mesmo e não arranjo.
Nesse link um ponto de partida para vc, com o código fonte: viewtopic.php?f=43&t=15007
Analise e veja se dá para adaptar.
Amanhã vou fazer uma cirurgia de fratura do cotovelo e, na volta, tentarei te ajudar, oK?

Sds,
Paulo Müller
alxsts
Colaborador
Colaborador
Mensagens: 3092
Registrado em: 12 Ago 2008 15:50
Localização: São Paulo-SP-Brasil

Combinação

Mensagem por alxsts »

Olá!

[]´s
Alexandre Santos (AlxSts)
prmuller
Usuário Nível 3
Usuário Nível 3
Mensagens: 122
Registrado em: 11 Nov 2008 12:25
Localização: Vila Velha - ES

Combinação

Mensagem por prmuller »

Boa Alxsts! Ainda tem a permuta, rsss
Avatar do usuário
WCARDOSO
Usuário Nível 2
Usuário Nível 2
Mensagens: 59
Registrado em: 08 Jul 2004 10:49

Combinação

Mensagem por WCARDOSO »

Boa tarde prmuller,
Obrigado, vou dar uma olhada, boa cirurgia.
[]´s
Wagner
Avatar do usuário
Toledo
Administrador
Administrador
Mensagens: 3133
Registrado em: 22 Jul 2003 18:39
Localização: Araçatuba - SP
Contato:

Combinação

Mensagem por Toledo »

Se os números que serão combinados não repetir nenhum número, então pode usar este código:

Código: Selecionar todos

Function Main()
aCmb:=CombMil("9756")   //chame a funcao passando o numero que sera combinado
*Vai retornar uma matriz com as combinacoes
For i_=1 to len(aCmb)
   ? aCmb[i_]
Next
Return Nil


Function CombMil(cMil)
Local cCmbPos:="1234|1243|1324|1342|1423|1432|2134|2143|2314|2341|2413|2431|3124|3142|3214|3241|3412|3421|4123|4132|4213|4231|4312|4321|"
Local aRet_:={}
For e_=1 to 4
   cNum_:=SUBS(cMil,e_,1)
   cCmbPos:=StrTran( cCmbPos, Str(e_,1), cNum_)
Next
For e_=1 to 24
   cCob_:=Left(cCmbPos,4)
   AADD(aRet_,cCob_)
   If e_<24
      cCmbPos:=SUBS(cCmbPos,6)
   endif
Next
Return aRet_
Obs.: esta função vai funcionar apenas para combinações de 4 números.
Toledo - Clipper On Line
toledo@pctoledo.com.br
Harbour 3.2/MiniGui/HwGui
Faça uma doação para o fórum, clique neste link: http://www.pctoledo.com.br/doacao
Avatar do usuário
Jairo Maia
Moderador
Moderador
Mensagens: 2785
Registrado em: 16 Ago 2010 13:46
Localização: Campinas-SP

Combinação

Mensagem por Jairo Maia »

Olá Pessoal,

Vou dar uma contribuição aqui que acho que funcionou (pode ser com mais de 4 dígitos também). Acho que funcionou:

Código: Selecionar todos

//Function Main()  // para Clipper deixe comentado...

 Local GetList:={}
 Local x, xy, cChar
 Local cNumero, cNumeroFix
 Local aMatriz:={}, nPosi:=0
 
 Clear Screen
 
 cNumero := Space( 4 )
 @ 3,5 SAY "Digite um Numero:" GET cNumero PICTURE "9999"
 Read
 
 cNumero := AllTrim( cNumero )
 
 If Empty( cNumero )
  Return Nil
 Else
  cNumeroFix := cNumero
 EndIf
 
 While nPosi < Len( AllTrim( cNumero ) )  // trata a milhar principal...
 
  nPosi++

  For x = 1 To Len( AllTrim( cNumero ) )
  
   cChar := SubSt( cNumero, x, 1 )
  
   cChar := cChar + Stuff( cNumero, x, 1, "" )
  
   If AScan( aMatriz, cChar ) = 0
    AaDd( aMatriz, cChar )
   EndIf
  
   If x = Len( AllTrim( cNumero ) )// - 1
    cNumero := cChar
   EndIf
  
  Next

 EndDo

 nPosi := 0
 For xy:=1 To Len( aMatriz )  // trata as combinações...
 
  cNumero := aMatriz[xy]

  For x = 1 To Len( AllTrim( cNumero ) )
  
   cChar := SubSt( cNumero, x, 1 )
  
   cChar := cChar + Stuff( cNumero, x, 1, "" )
  
   If AScan( aMatriz, cChar ) = 0
    AaDd( aMatriz, cChar )
   EndIf
  
  Next

 Next

 Clear Screen
 aMatriz := Asort( aMatriz )

 ? "Combinacoes de:", cNumeroFix
 ?
 For x:=1 To Len( aMatriz )
  ? aMatriz[x]
 Next
 ?
 ?
 //Return Nil
Abraços, Jairo
Harbour / Clipper 5.2e - Blinker 7
(Não respondo dúvidas por MP ou E-mail. Por favor, não encaminhe via mensagem privada ou e-mail, dúvidas que podem ser compartilhadas com todos no fórum)
carlos_dornelas
Usuário Nível 3
Usuário Nível 3
Mensagens: 400
Registrado em: 25 Ago 2004 21:54

Combinação

Mensagem por carlos_dornelas »

Não testei aqui, mas acho que assim também daria certo:

Código: Selecionar todos

aDigitos:={9,7,5,6}
for a=1 to 4
  for b=1 to 4
    for c=1 to 4
      for d=1 to 4
        if a<>b .and. a<>c .and. a<>d .and. b<>c .and. b<>d .and. c<>d
            ? str(aDigitos[a],1)+str(aDigitos[b],1)+str(aDigitos[c],1)+str(aDigitos[d],1)
        endif
      next
    next
  next
next
[]s

Antonio Carlos
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Combinação

Mensagem por JoséQuintas »

Gostei da brincadeira, uma espécie de desafio.
Parece que deu certo, já que as opções seriam 4 x 3 x 2 x 1, o que dá 24.
Comecei pensando em agilizar a rotina anterior.
depois pensei reduzir variáveis alterando pra array.
como ficaria repetitivo nos loops, pensei em recursividade.
uma coisa foi levando pra outra.
Depois retirei o FOR/EACH, porque aqui é Clipper.
Até que ficou interessante.
Combinacao.png

Código: Selecionar todos

#include "inkey.ch"

PROCEDURE Main

   LOCAL cNumero := "9756", aList := {}, nCont

   SetMode( 30, 80 )
   CLS
   ? Time()
   Combina( cNumero, "", @aList )
   ASort( aList )
   FOR nCont = 1 TO Len( aList )
      ? nCont, aList[ nCont ]
   NEXT
   ? Time() + " ESC"
   DO WHILE Inkey(0) != K_ESC
   ENDDO

   RETURN

FUNCTION Combina( cNumeros, cAcumulado, aList )

   LOCAL cNumero, nCont

   IF Len( cAcumulado ) == Len( cNumeros )
      AAdd( aList, cAcumulado )
      RETURN NIL
   ENDIF
   FOR nCont = 1 TO Len( cNumeros )
      cNumero := Substr( cNumeros, nCont, 1 )
      IF ! cNumero $ cAcumulado
         Combina( cNumeros, cAcumulado + cNumero, @aList )
      ENDIF
   NEXT

   RETURN NIL
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Combinação

Mensagem por JoséQuintas »

Não ficou limitado a 4 números.
combinacao2.png
6 x 5 x 4 x 3 x 2 x 1 = 720 combinações para 6 números
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Responder