Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Coloboración Paypal con ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 22-06-2007
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Si tenemos tres letras (a,b,c), las combinaciones con dos elementos serían:

Código:
aa
ab
ac
ba
bb
bc
ca
cb
cc
Si ahora queremos las combinaciones con tres elementos, basta tomar las anteriores y anexarles la a,

Código:
aaa
aab
aac
aba
abb
abc
aca
acb
acc
luego la b

Código:
baa
bab
bac
bba
bbb
bbc
bca
bcb
bcc
y finalmente la c

Código:
caa
cab
cac
cba
cbb
cbc
cca
ccb
ccc
Esto es, una vez que tenemos las combinaciones con N elementos, podemos, a partir de ellas, formar las de N+1 elementos, anexándoles cada uno de los distintos símbolos.

Todo esto lo digo, porque se puede hacer un procedimiento recursivo para evitar el número variable de índices.

Un ejemplo:

Código Delphi [-]
procedure Combinaciones(Simbolos: array of Char; Espacios: Integer; Lista: TStrings);
var
  ListaTemp: TStringList;
  I, J: Integer;

begin
  Assert(Espacios > 0);

  {
    Si sólo se requiere un espacio, la lista de combinaciones coincide con la
    lista de símbolos.
  }
  if Espacios = 1 then
    for I := Low(Simbolos) to High(Simbolos) do
      Lista.Add(Simbolos[i])
  else
  {
    En caso contrario, colocamos en una lista temporal las combinaciones con
    un elemento menos, e iteramos sobre los símbolos anexando cada uno a la
    lista temporal.
  }
  begin
    ListaTemp := TStringList.Create;

    try
      Combinaciones(Simbolos, Espacios - 1, ListaTemp);

      for I := Low(Simbolos) to High(Simbolos) do
        for J := 0 to ListaTemp.Count -1 do
          Lista.Add(Simbolos[i] + ListaTemp[J]);
    finally
      ListaTemp.Free;
    end;
  end;
end;

Al procedimiento Combinaciones le pasas la lista de símbolos o letras que desees, así como el número de elementos que quieras poner. El procedimeitno colocará en el tercer parámetro todas las combinaciones. Un ejemplo de uso:

Código Delphi [-]
procedure TForm1.Button1Click(Sender: TObject);
var
  Lista: TStringList;

begin
  Lista := TStringList.Create;

  try
    {
      El número de espacios (4 en el ejemplo) puede leerse del usuario.
    }
    Combinaciones(['a','b','c','d','1','2','3', '#'], 4, Lista);
    Memo1.Lines.AddStrings(Lista);
  finally
    Lista.Free;
  end;
end;

// Saludos
Responder Con Cita
  #2  
Antiguo 22-06-2007
Delar Delar is offline
Miembro
 
Registrado: oct 2006
Posts: 90
Poder: 20
Delar Va por buen camino
u.U Tiene buena pinta, lo probaré en cuanto pueda.

Saludos!
Responder Con Cita
  #3  
Antiguo 23-06-2007
Delar Delar is offline
Miembro
 
Registrado: oct 2006
Posts: 90
Poder: 20
Delar Va por buen camino
Lo probé, ya la verdad que funciona tal y como pedia, PERO, hay un problemilla que no se solucionar, pues no trabajo demasiado con StringList...
Podría saber en un determinado momento, por que combinación va?
Y... hay alguna manera de que el programa no se congele mientras busca combinaciones?

Saludos!
Responder Con Cita
  #4  
Antiguo 17-02-2014
Ramiro_Hf Ramiro_Hf is offline
Registrado
 
Registrado: jun 2007
Posts: 4
Poder: 0
Ramiro_Hf Va por buen camino
Combinaciones si pero sin repeticiones

Hola Buenos días, perdonar que re-abra este hijo, en el cual en principio con la última parte de código expuesto, genera perfectamente las combinaciones. Pero llevo dándole vueltas al tema varios días y lo que está ejecutando son permutaciones y no logro corregir el maldito código para que no se repitan las combinaciones, convirtiéndolo en combinaciones sin repetición, es decir me da igual que aparezca abcd que dcba en resumen para mi son lo mismo.
Pido disculpas por re-abrir el hijo (no se si es lo correcto), esperando me podáis dar una pequeña ayuda.
Gracias.
Ramiro Hernández
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Bloquear Combinaciones de Teclas. D-MO Varios 6 24-11-2006 03:25:10
Combinaciones de teclado jplj Varios 2 11-09-2006 14:04:56
Enviar combinaciones de teclas LordVermiis API de Windows 4 08-06-2006 17:57:43
Calcular combinaciones kes Varios 4 01-07-2005 14:36:39
Quitar Combinaciones De Teclas gulder API de Windows 4 21-04-2005 15:02:34


La franja horaria es GMT +2. Ahora son las 02:09:55.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi