Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Otros entornos y lenguajes > Lazarus, FreePascal, Kylix, etc.
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

 
 
Herramientas Buscar en Tema Desplegado
  #30  
Antiguo 17-04-2018
bucanero bucanero is offline
Miembro
 
Registrado: nov 2013
Ubicación: Almería, España
Posts: 208
Poder: 13
bucanero Va camino a la fama
Cita:
Empezado por danielmj Ver Mensaje
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
  // llama aqui a la funcion que te rellena el listbox PER 
  // combinatoria2([1, 4, 5, 12, 24], PER.Items);
  Memo1.Clear;
  with Per do begin
    for i := 0 to Count - 1 do begin
      //convierto el string separado por espacios a una lista
      list.Clear;
      list.delimitedText := items[i];
      //mostrar resultado
      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; //<-- Numero maximo de elementos

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
              //codifica la combinacion en un Int64
              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 Ver Mensaje
Código Delphi [-]
procedure TForm1.CompararCombinaciones(const Cad1, cad2:Int64);
...
  label21.Caption:= IntToStr(cad1);
...
    ShowMessage('Iguales');
...
end;
Un saludo
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
sumando valores de un listview danielmj Varios 28 14-11-2014 21:52:30
VALORES FANTASMAS FIREBIRD 2.1 valores Grandes ASAPLTDA Firebird e Interbase 17 02-12-2012 12:09:02
Rellenar con 0.... buitrago Varios 6 17-11-2011 20:02:53
¿Cómo insertar una imágen en un lisbox o un memo? Acuarius3000 Gráficos 3 27-06-2005 08:44:53
arastrar archivos a un lisbox gulder C++ Builder 3 05-05-2005 13:31:50


La franja horaria es GMT +2. Ahora son las 08:46:53.


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