Ver Mensaje Individual
  #57  
Antiguo 16-05-2018
Avatar de danielmj
danielmj danielmj is offline
Miembro
 
Registrado: jun 2011
Posts: 383
Reputación: 13
danielmj Va por buen camino
Hola bucanero, gracias por tu tiempo. Mirando tu codigo y poniendolo en practica veo un resultado inesperado. Lo que hago es lo siguiente, en un edit he volcado el valor de 6 labels.caption con valores entereos y aleatorios del 1 al 49 con lo que se forma un longint en el edit.text Esta será la combinacion maestra a comparar, pero lo que veo que hace es que en todas y cada una de las 5000 combinaciones se repite el mismo numero y simpre siempre, se da un unico acierto.
Y el codigo modificado sería este:

Código Delphi [-]
procedure TForm1.Button1Click(Sender: TObject);
var
  i:longint;
  combinacion1, comunes:Tcombinacion;
  cs1: string;
  lista:  array of TCombinacion;
begin
  try
    setLength(lista, 50000);
    //rellenar una lista de 5000 elementos con una combinación aleatoria
    for i:=0 to high(lista) do
      lista[i].aleatorio;

    //cargar la combinación maestra
    if not Combinacion1.load([StrToInt(edit1.Text)]) then begin
      MessageDlg('La combinacion no es valida!!!', mtError, [mbOK], 0);
      exit;
    end;

    // guarda la combinacion1 en un string,
    // esto es solamente por acelerar el proceso a la hora de mostrar la combinacion
    // como string y no repetirlo en cada ciclo del bucle
    cs1 := Combinacion1.AsString;
    //recorre el bucle para analizar todas las combinaciones con la combinacion principal
    for i := 0 to high(lista) do begin
      /// compara una combinacion con otra y obtine los comunes a ambas combinaciones
      comunes := lista[i].comparar(Combinacion1);
      /// si el valor es 0 entonces no hay numeros comunes
      if comunes <> 0 then
        memo1.Lines.Add(cs1 + #9 + lista[i].AsString + #9 + '(' + IntToStr(comunes.count) + ') ' + comunes.AsString);
    end;
  finally
    setLength(lista, 0);
  end;
end;

https://drive.google.com/open?id=1NG...XSeWz8qTKfoZL4
__________________
La juventud pasa, la inmadurez se supera, la ignorancia se cura con la educación, y la embriaguez con la sobriedad, pero la estupidez dura para siempre. Aristofanes.
Responder Con Cita