Ver Mensaje Individual
  #32  
Antiguo 16-04-2018
bucanero bucanero is offline
Miembro
 
Registrado: nov 2013
Ubicación: Almería, España
Posts: 208
Reputación: 11
bucanero Va camino a la fama
Hola danielmj

En tu código en cuanto a la parte estrictamente de programación hay algunos errores:

- Asignas el valor MAX a los progressBar dentro de los bucles, eso hace que esta operación se realice en cada ciclo del propio bucle sin necesidad. Esta inicialización hay que hacerla al principio fuera del bucle y solo una vez. Y dentro del bucle solo actualizar el campo Position del progressBar

Cita:
Empezado por danielmj Ver Mensaje
Código Delphi [-]
  // Recorro lista3
  for i := 0 to lista3.Items.Count -1 do
    begin
      barra.Max:= lista3.Items.Count;
      barra.Position:= i+1;
    end;
La forma correcta es esta:
Código Delphi [-]
  // Recorro lista3
  barra.Max:= lista3.Items.Count;
  for i := 0 to lista3.Items.Count -1 do
    begin
      barra.Position:= i+1;
    end;

-La variable list:TStringList la declaras en la sección private del form y luego a nivel local dentro del var del procedure TForm1.Button10Click, por lo que al llamarlo desde dentro del procedure, vas a usar la variable local ademas parece que no esta inicializada, por lo que obtendrás un error de access violation


- En esta parte del código, primero muestras el contenido de una variable que aun no has asignado, y mas adelante es cuando le asignas el valor.
Cita:
Empezado por danielmj Ver Mensaje
Código Delphi [-]
procedure TForm1.buscarComunes(const Cad1:Int64);
     ...
     form1.label22.Caption:= IntToStr(cad2);
     ...
     cad2 := ValorCombinacion(list);
     ...
end;
En general te recomiendo que separes la parte del calculo de la parte visual y de muestreo de datos. Te quedara un código mucho mas limpio.

-En el procedure CompararCombinaciones has eliminado toda la parte correspondiente a la búsqueda de los números que coinciden cuando las dos combinaciones no son exactamente iguales (variable res)
Cita:
Empezado por danielmj Ver Mensaje
Código Delphi [-]
procedure TForm1.CompararCombinaciones(const Cad1, cad2:Int64);
var
  res:Int64;
  comunes:string;
begin
  res:=cad1 and cad2;
  if (cad1 = cad2) then begin
    // las dos combinaciones son iguales
    ShowMessage('Iguales');
  end
  else
    showMessage('No hay coincidencias');
    form1.timer1.Enabled:= false;
    form1.Refresh;
    exit
end;


- El procedure combinatoria2(v: array of Integer; Serie: TStrings); no tengo claro lo que quieres hacer con el, lo único que hace es cambiar el orden en que se obtiene los elementos de esa determinada combinación en particular, pero en realidad siempre obtienes la misma combinación en distinto orden de sus elementos. Y si lo que buscas es un sistema tipo LOTO, el orden de los elementos no influye. Aquí tienes los datos que muestras en tu vídeo, correspondientes todos ellos a la misma combinación:
Código:
1 4 5 12 24
1 4 5 24 12
1 4 12 5 24
1 4 12 24 5
1 4 24 5 12
1 4 24 12 5
Si mi ejemplo, que lo único que hace es buscar los numero que coinciden dentro de dos combinaciones,
te ha servido y es lo que estas intentando implementar, entonces intenta entender su funcionamiento, y en base a ese ejemplo haz tus propias modificaciones. Si no es eso exactamente lo que necesitas, entonces como te comento Mamcx el problema es que no esta muy claro lo que pretendes obtener
Cita:
Empezado por mamcx Ver Mensaje
Ni el video ni la imagen es clara. Lo que necesitas es un ejemplo minimo de los datos (la imagen habla de los numeros mas repetidos pero eso no se ve).
Un saludo
Responder Con Cita