Club Delphi  
    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

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #61  
Antiguo 17-05-2018
Avatar de danielmj
danielmj danielmj is offline
Miembro
 
Registrado: jun 2011
Posts: 383
Poder: 14
danielmj Va por buen camino
Buenas, estoy haciendo pruebas con tu codigo Bucanero, y si bien funciona perfectamente, hay algo que me choca.. a veces se dan hasta 6 combinaciones iguales donde solo cambia un numero y me pregunto, desde el punto de vista estadistico ¿cual es la posibilidad de que ocurra eso realmente?


https://drive.google.com/open?id=13k...Yu0opkIBvkB2DY


Un saludo.
__________________
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
  #62  
Antiguo 17-05-2018
bucanero bucanero is offline
Miembro
 
Registrado: nov 2013
Ubicación: Almería, España
Posts: 208
Poder: 11
bucanero Va camino a la fama
Cita:
Empezado por danielmj Ver Mensaje
a veces se dan hasta 6 combinaciones iguales donde solo cambia un numero y me pregunto, desde el punto de vista estadistico ¿cual es la posibilidad de que ocurra eso realmente?
A eso ya no te puedo responder... tendría que hacerlo un matemátic@.
Por lo que veo si estas comparando una combinación (maestra) de 6 números con otras combinaciones de 5 números esperando encontrar coincidencias para todos los números, entonces tendrás 6 combinaciones que cumplan ese requisito...
La pregunta es ¿Que probabilidades hay de que en 20 o 30mil combinaciones aleatorias aparezcan esas 6 combinaciones? pues la lógica dice que no muchas, aunque ten en cuenta que la combinación maestra la has obtenido de los números mas repetidos de esas combinaciones aleatorias.

Una cosa curiosa de la estadística con respecto a lo que pretendes buscar, es que si coges toda la tanda de datos históricos de sorteos de lotería primitiva y haces un recuento de los números que mas salen con respecto a los que menos salen, veras que las diferencias son mínimas, aquí te dejo los enlaces a los historicos
primitiva-resultados-historicos-de-todos-los-sorteos/
Responder Con Cita
  #63  
Antiguo 17-05-2018
Avatar de danielmj
danielmj danielmj is offline
Miembro
 
Registrado: jun 2011
Posts: 383
Poder: 14
danielmj Va por buen camino
Hola por ahora ya lo dejo así, ire probando y dejaré para mas adelante implementar otras cosas como cargar un CSV con el registro de sorteos y comparar la clave maestra con ellos..

Un saludo y gracias
__________________
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
  #64  
Antiguo 22-05-2018
Avatar de danielmj
danielmj danielmj is offline
Miembro
 
Registrado: jun 2011
Posts: 383
Poder: 14
danielmj Va por buen camino
Buenos dias, sigo haciendo pruebas y alguna modificacion para la version de Windows, como generar un listView con x numero de combinaciones aleatorias y buscar los 6 mas repetidos para tomarlos como clave maestra (supongo que se me puede aplicar eso de R que R pero es lo que buscaba de un principio). En Windows va todo bien (excepto lo de atender al combobox, no lo he comprobado), hace lo que debe. Pero en Linux, me encuentro que cuando selecciono un valor del combobox por ejemplo 5000, en el listBox, solo aparecen 2885 y no sé por qué no antiende al case que por cierto es proporcional al valor del combo, es decir si selecciono 50.000 combinaciones, solo hace los calculos sobre 28684.

Código Delphi [-]
...
...
case comb.ItemIndex of
    0: //corresponde con el valor 5000
    begin
    listBox1.Clear;
    //repeat;
    listBox1.clear;
    setLength(list, 5000);
    //rellenar una list de 5000 elementos con una combinación aleatoria
    for i:=0 to high(list) do
      list[i].aleatorio2;

    //cargar la combinación maestra
    if not Combinacion1.load([1, 45, 33, 14, 20, 22]) 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 := '23 45 17 15 22 36'; //Combinacion1.AsString;
    //recorre el bucle para analizar todas las combinaciones con la combinacion principal
    for i := 0 to high(list) do begin
      /// compara una combinacion con otra y obtine los comunes a ambas combinaciones
      comunes := list[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);
        listBox1.Items.Add(IntToStr(listBox1.Items.Count)+#9+'Maestra: '+cs1 + #9 + 'Aleatoria: '+list[i].AsString + #9 + '(' + IntToStr(comunes.count) + ') ' + comunes.AsString);
      if comunes = 5 then
      with lista.Items.Add do
      begin
        caption:= IntToStr(lista.items.count);
        subItems.Add(cs1);
        subItems.Add(list[i].AsString);
        subItems.Add(IntToStr(comunes.count));
      end;
    end;
    inc (int);
    {until lista.Items.Count > 1 ;
    label4.visible:= true;
    label4.Caption:='Realizadas '+IntToStr(int)+' pasadas.';
    panel1.Visible:= false;}
    end;

Y por otra parte, veo que en cs1, juega con una combinacion arbitraria:
Código Delphi [-]
cs1 := '23 45 17 15 22 36';
¿Como podría hacer lo mismo que en Windows, es decir generar x numero de combinaciones aleatorias y buscar los 6 mas repetidos para proporcionarle este dato a cs1?
Un saludo


__________________
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.

Última edición por danielmj fecha: 22-05-2018 a las 12:02:47.
Responder Con Cita
  #65  
Antiguo 22-05-2018
bucanero bucanero is offline
Miembro
 
Registrado: nov 2013
Ubicación: Almería, España
Posts: 208
Poder: 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
  #66  
Antiguo 23-05-2018
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.257
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Cita:
Empezado por danielmj Ver Mensaje
(supongo que se me puede aplicar eso de R que R ...)


Cita:
Empezado por bucanero Ver Mensaje
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
Responder Con Cita
Respuesta



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 22:52:30
VALORES FANTASMAS FIREBIRD 2.1 valores Grandes ASAPLTDA Firebird e Interbase 17 02-12-2012 13:09:02
Rellenar con 0.... buitrago Varios 6 17-11-2011 21:02:53
¿Cómo insertar una imágen en un lisbox o un memo? Acuarius3000 Gráficos 3 27-06-2005 09:44:53
arastrar archivos a un lisbox gulder C++ Builder 3 05-05-2005 14:31:50


La franja horaria es GMT +2. Ahora son las 01:55:49.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi