Ver Mensaje Individual
  #65  
Antiguo 22-05-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 Daniel,

Vuelves a mezclar mucho código de distintas cosas generando un caos en el código... Divide y vencerás!! esa es la técnica que tienes que utilizar, haz pequeñas funciones o procedimientos donde realice las mínimas acciones posibles y minimices los posibles errores, en particular tu código que has puesto podría quedar algo así:

Código Delphi [-]
function TForm1.GetComboBoxValue: Integer;
begin
  result:=0;
  with combobox1, items do
    if Itemindex>=0 then
      try
        //Convierte la cadena del combo en un numero
        result:=StrToInt(Items[itemIndex]);
      except
      end;
end;

procedure TForm1.GenerarCombinacionesAleatorias(const Numero:Integer);
var
  i:longint;
begin
  setLength(listCombinaciones, Numero);
  for i:=0 to High(listCombinaciones) do
    listCombinaciones[i].aleatorio;
end;  

function TForm1.BuscarMejorcombinacion: Tcombinacion;
begin
  //cargar la combinación maestra
  ... 
end; 

procedure TForm1.Button9Click(Sender: TObject);
var
  NumeroDeElementos:Integer;
  CombinacionMaestra:TCombinacion;
begin
  //Obtiene el numero de elementos seleccionado por el usuario en el combobox
  NumeroDeElementos:=GetComboBoxValue;
  //Genera una lista de N elementos de combinaciones aleatorios, mostrándolas en un listbox
  GenerarCombinacionesAleatorias(NumeroDeElementos);
  // Obtiene la combinación maestra
  CombinacionMaestra:=BuscarMejorcombinacion;
  //compara las combinaciones aleatorias con la combinación maestra
  CompararCombinacionesAleatorias(CombinacionMaestra);
end;

no se por que utilizas aquí un case, Poner un case por cada opción del combobox ademas de no ser muy eficiente, es duplicar código y complicar el proceso
Cita:
Empezado por danielmj Ver Mensaje
Código Delphi [-]
...
...
case comb.ItemIndex of
    0: //corresponde con el valor 5000
    begin
  ...
¿Por que no te hace los ciclos que tu quieres? pues seguramente este asignando el numero de elementos de la variable list* incorrectamente.
*.- te recomiendo que a las variables importantes y mas o menos globales les pongas nombres descriptivos que a simple vista sean fácilmente identificable.

Y en cuanto a CS1:
Cita:
Empezado por danielmj Ver Mensaje
Y por otra parte, veo que en cs1, juega con una combinacion arbitraria:
Código Delphi [-]
cs1 := '23 45 17 15 22 36';
Esto no se por que lo has puesto así, CS1 solo es la representación en string de la combinación maestra, y se utiliza para no estar en cada ciclo repitiendo el proceso de convertir dicha combinación a string, combinación que una vez calculada ya no vuelve a cambiar nunca, y por ser un proceso relativamente lento, en definitiva para acelerar cada iteración
Código Delphi [-]
cs1 := CombinacionMaestra.AsString;
Responder Con Cita