Cita:
Empezado por danielmj
Parece que recorre la lista3 y lo compara con per pero incluso habiendo una combinación real de 5 aciertos sigue sin encontrarla...
|
El problema yo lo veo en el proceso que te rellena el listbox llamado PER con la función
combinatoria2 que lo único que hace es cambiar el orden de una combinación de numeros entre ellos, pero que al aplicar la función ValorCombinacion te va a devolver siempre el mismo valor de combinación, independientemente del orden de los elementos.
De hecho haz la siguiente prueba, ejecuta este procedimiento y veras como a cada permutación de tu lista PER obtienes el mismo valor en la función
ValorCombinacion, y eso solo te hace repetir cálculos innecesarios una y otra vez
Código Delphi
[-]procedure TEST;
var
i: longint;
begin
Memo1.Clear;
with Per do begin
for i := 0 to Count - 1 do begin
list.Clear;
list.delimitedText := items[i];
Memo1.Lines.Add(items[i] + #9 + IntTostr(ValorCombinacion(list)));
end;
end;
end;
Creo que no necesitas ni el listbox PER ni la función que te lo rellena. Para generar una combinación aleatoria yo usaría algo así:
Código Delphi
[-]
const
maxNum:integer=49;
var
combinacion:Int64;
...
for N1 := 1 to maxNum - 5 do
for N2 := N1 + 1 to maxNum - 4 do
for N3 := N2 + 1 to maxNum - 3 do
for N4 := N3 + 1 to maxNum - 2 do
for N5 := N4 + 1 to maxNum - 1 do
for N6 := N5 + 1 to maxNum do begin
combinacion := ValorCombinacion(n1, n2, n3, n4, n5, n6);
analizarCombinacion(combinacion);
end;
...
Y todo fuera de los componentes visuales.
Yo te recomiendo que para separar toda la parte visual de los cálculos, utilices un datamodule o una simple unidad independiente para meter todos los procesos referentes a calculo y en el formulario solo dejes la parte visual.
Y por tema de velocidad en el tipo de rutinas que hacen calculos de forma masiva, intentan en la medida de todo lo posible no hacer llamadas a elementos visuales ni refresco de la información de los mismos, pues son rutinas que se pueden ejecutar varios millones de veces, y las llamadas a componentes visuales son muy lentas, a parte de que te pueden dejar muy tirado el programa.
Cita:
Empezado por danielmj
Código Delphi [-]procedure TForm1.CompararCombinaciones(const Cad1, cad2:Int64);
...
label21.Caption:= IntToStr(cad1);
...
ShowMessage('Iguales');
...
end;
|
Un saludo