Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Coloboración Paypal con ClubDelphi

 
 
Herramientas Buscar en Tema Desplegado
  #19  
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
 



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 00:36:31.


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