Ver Mensaje Individual
  #11  
Antiguo 09-07-2004
Avatar de jachguate
jachguate jachguate is offline
Miembro
 
Registrado: may 2003
Ubicación: Guatemala
Posts: 6.254
Reputación: 28
jachguate Va por buen camino
Hola ruina.

Me parece que el algoritmo propuesto no da realmente todas las combinaciones... he hecho de manera rápida una función que, valiendose de la recursividad, promete dar todas las combinaciones posibles de un array de caracteres, en un string de una longitud determinada.

Código Delphi [-]
Procedure CombinaArray(cars : Array of char; longitud : Integer; resultado : TStrings);

  Procedure Combinacion(const prefijo : String; NivelesPendientes : Integer);

  Var
    i : Integer;
    res : String;

  Begin
    for i := low(cars) to high(cars) do
    begin
      res := prefijo + Cars[i];
      if NivelesPendientes > 0 Then
        Combinacion(res, NivelesPendientes - 1)
      else
        resultado.Add(res);
    end;
  end;

begin
  combinacion('', longitud - 1);
end;

La forma de uso sería algo como:

Código Delphi [-]
  Memo1.Lines.Clear;
  memo1.Lines.BeginUpdate;
  CombinaArray(['a', 'b', 'c', 'd', 'e', 'f'], 5, memo1.Lines);
  Memo1.Lines.EndUpdate;

Hasta luego.

Responder Con Cita