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 Buscar Temas de Hoy Marcar Foros Como Leídos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 27-03-2018
Avatar de danielmj
danielmj danielmj is offline
Miembro
 
Registrado: jun 2011
Posts: 383
Poder: 15
danielmj Va por buen camino
Buenos dias, lo de cargar archivos manualmente o todos en lote, creo que no es relevante (tal como yo lo veo) y lo digo por que los listados de sorteos anteriores, que he encontrado en la web en formato csv vienen tal que así:

27/3/2018 10:36
**************************************************************
***---- ARCHIVO GENERADO EN WWW.LaWebdelaPrimitiva.com ----***
**************************************************************
HISTORICO DE SORTEOS DE La Primitiva DE 2018

FECHA N1 N2 N3 N4 N5 N6 C R Joker Pares/Impares Decenas Bajos/Altos
24-03-2018 17 18 21 23 27 48 6 2 5736038 (2/4) '02301' (4/2)
22-03-2018 1 7 24 34 36 48 29 8 2271456 (4/2) '20121' (3/3)
17-03-2018 8 21 35 36 37 43 39 1 4497057 (2/4) '10131' (2/4)
15-03-2018 5 9 11 20 22 29 33 0 3794358 (2/4) '21300' (5/1)
10-03-2018 4 18 20 25 30 49 16 0 6041319 (4/2) '11211' (4/2)
8-03-2018 2 9 12 15 26 31 16 0 5986378 (3/3) '22110' (4/2)
3-03-2018 5 14 24 28 36 49 21 7 4052156 (4/2) '11211' (3/3)
1-03-2018 6 9 17 22 28 36 7 1 8185066 (4/2) '21210' (4/2)
24-02-2018 4 5 12 27 43 45 40 7 3544370 (2/4) '21102' (3/3)
22-02-2018 4 8 11 23 34 35 2 2 6822466 (3/3) '21120' (4/2)
17-02-2018 9 18 19 22 31 38 17 8 8034825 (3/3) '12120' (4/2)
15-02-2018 1 2 21 22 27 47 24 0 4085600 (2/4) '20301' (4/2)
10-02-2018 7 10 12 19 22 45 2 3 9104800 (3/3) '13101' (5/1)
8-02-2018 12 18 19 24 32 42 30 7 7355415 (5/1) '03111' (4/2)
3-02-2018 1 9 11 26 33 40 27 2 6229581 (2/4) '21111' (3/3)
1-02-2018 1 4 38 42 46 49 35 2 5778491 (4/2) '20013' (2/4)
27-01-2018 7 8 10 14 27 48 42 7 3129415 (4/2) '22101' (4/2)
25-01-2018 3 6 25 31 32 40 20 6 8889779 (3/3) '20121' (3/3)
20-01-2018 15 23 28 36 39 47 29 8 3031690 (2/4) '01221' (2/4)
18-01-2018 11 12 22 28 37 49 24 0 3973025 (3/3) '02211' (3/3)
13-01-2018 6 7 22 31 38 44 40 8 5053 (4/2) '20121' (3/3)
11-01-2018 15 24 29 32 36 46 44 0 4807239 (4/2) '01221' (2/4)
6-01-2018 19 28 33 40 42 48 38 0 263047 (4/2) '01113' (1/5)
4-01-2018 6 9 13 24 35 42 16 3 5207129 (3/3) '21111' (4/2)

Y al final tendre que editarlos para quedarme solo con las columnas referentes a los 6 números despreciando el resto, por lo que según lo veo, cargarlos por lote no me sirve. Lo que si hice fue abrilos todos con libreoffice y formar un solo archivo con todos los sorteos, ese es el único fichero que le paso al programa. En cuanto al otro tema (ley del primer dígito, sigo en ello)
__________________
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
  #2  
Antiguo 27-03-2018
Avatar de Casimiro Noteví
Casimiro Noteví Casimiro Noteví is offline
Merodeador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.669
Poder: 10
Casimiro Noteví Tiene un aura espectacularCasimiro Noteví Tiene un aura espectacular
Cita:
Empezado por danielmj Ver Mensaje
Y al final tendre que editarlos para quedarme solo con las columnas referentes a los 6 números despreciando el resto, por lo que según lo veo, cargarlos por lote no me sirve. Lo que si hice fue abrilos todos con libreoffice y formar un solo archivo con todos los sorteos, ese es el único fichero que le paso al programa. En cuanto al otro tema (ley del primer dígito, sigo en ello)
Es una solución.

La otra solución es cambiar de la primitiva a la bonoloto porque el fichero csv es así:

Código:
FECHA,COMB. GANADORA,,,,,,COMP.
4/05/2017,5,7,10,23,36,41,22
3/05/2017,13,25,27,33,34,38,19
2/05/2017,2,17,25,27,35,43,37
1/05/2017,9,12,15,19,38,46,4
29/04/2017,10,19,22,24,43,44,23
28/04/2017,5,9,15,17,21,47,20
27/04/2017,11,40,42,45,46,49,27
26/04/2017,12,14,20,34,39,40,27
25/04/2017,5,9,12,13,39,41,45
24/04/2017,16,22,25,31,38,48,46
22/04/2017,12,35,37,41,47,48,17
21/04/2017,2,5,9,16,37,40,10
Responder Con Cita
  #3  
Antiguo 27-03-2018
tsk tsk is offline
Miembro
 
Registrado: dic 2017
Posts: 56
Poder: 9
tsk Va por buen camino
Realizando un análisis rápido de los números que han salido, sin tomar en cuenta su posición, observamos que existe una tendencia a que el primer dígito esté distribuido más o menos equitativamente entre los primeros 4 dígitos (1-4) Esto se explica porque los números van del 1 al 49, pero aun así no se ve que siga la gráfica de la distribución del primer dígito.



Pero no todo está perdido, ya que aun así puedes obtener otro tipo de información, por ejemplo, si observas en la siguiente gráfica, se ve que al menos, la gráfica se parece entre 2015 y 2016 y entre 2017 y 2018 está tomando la misma forma.



Con respecto a la lista de números que han aparecido de 2015-2018 vemos



Me imagino que si tomo lo totalidad de los sorteos, esto debería tender a formar una distribución uniforme.

¿Porqué vemos esa disminución que existe entre los 20-25?



Porque desde el 2015, que tomé los datos, no ha aparecido el número 25



Pero si también observas, en cada año siempre hay un número que supera, por muy poco las 20 apariciones, y también son pocos los que alcanzan a superar los 15 apariciones

Por ejemplo

2015 > 20 -> 30
2016 > 20 -> 40
2017 > 20 -> 3
2018 > 20 -> No hay suficientes datos pero los que llevan la delantera son los números 9, 22 y 36.

2015 > 15 <=20 -> 1,11,20,38,46,49 (1-2 , 2-1, 3-1, 4-2)
2016 > 15 <=20 -> 6,11,12,14,21,46 (1-3, 2-1, 4-1, 6-1 )
Si observas las gráficas verás que en esos años, los números que se destacaron ligeramente más, fueron los que tenían como primer dígito el 1 y el 4.

2017 > 15 <=20 -> 20,22,26,28,29,35,48 (2-5,3,1,4-1)
2018 > 15 <=20 -> No hay suficientes datos, pero voy a tomar los que ya llegaron a 4 y 5 apariciones 1,4,6,7,11,12,18,19,24,28,29,32,42,48,49

Si observas las gráficas, en 2017 los números que tuvieron como primer digito el 2 fueron los que destacaron, siguiendo el 3 y el 4, así que si sigue la misma tendencia, los números que más van a aparecer en el 2018 son del 20 al 29.

Existen programas que te permiten explorar los datos, uno de ellos es R que junto con R-Studio, te permite realizar un análisis más complejo. Para las gráficas de arriba use python+matplotlib.

Cabe aclarar que ya se entró al mundo de la especulación, ya que no se tomó la totalidad de los resultados,es decir, los de antes de 2015 y el objetivo de esto fue tan sólo para explorar los datos, obtener cierta información y determinar que otras pruebas se podrían hacer para ver si existe algún otro tipo de patrón, como por ejemplo, no se estudió el orden de aparición de los números y tampoco se estudió el segundo dígito. Tampoco se estudió las secuencias ganadoras, para ver su relación con los números que más aparecen, entre otras cosas, tan sólo fue algo exploratorio que inicialmente permite ver ciertos comportamientos y permite extraer cierta información que puede ser útil a la hora de plantear otros métodos para obtener una mejor idea de lo que ocurre.

Saludos.
Responder Con Cita
  #4  
Antiguo 30-03-2018
Avatar de danielmj
danielmj danielmj is offline
Miembro
 
Registrado: jun 2011
Posts: 383
Poder: 15
danielmj Va por buen camino
Hola tsk, gracias por toda la información, estoy en ello.
Como dije en un principio, la migracion era de win->linux y unas de las unidades que se usa (para general los números aleatorios) es uTAlea.pas, he tenido que convertirla a lazarus para que sepa interpretarla ya que el archivo original para windows seguía una sintaxis que era desconocida para lazarus. En concreto:

sistaxis delphi
Código Delphi [-]
ZeroMemory(Lista,1+Maximo * SizeOf(Boolean));
(uTAlea.pas original)

sistaxis lazarus
Código Delphi [-]
FillByte(Lista,1+Maximo,65000);

Buscando en la red encontre la equivalencia delphi->lazarus
http://forum.lazarus.freepascal.org/...html#msg105499

Como puede verse, son ligeramente diferentes, en lazarus sino me equivoco no existe la instrucción "zeromemory" en su lugar se usa FillByte, y aunque en tiempo de compilación no da error, si lo da en cuanto pulso el boton que tiene ese código asociado como puede verse en la captura. Por otra parte, el valor de 65000 es arbitrario, lo he puesto sin saber muy bien que valor poner (antes tenia 4096)y seguía con el mismo error, por lo que no sé que valor poner ahí para que no de error.

Creo que es esa linea la que tira la aplicacion, pero no estoy seguro..
https://drive.google.com/open?id=1La...0NhGHaGGoXWL6z

Alguna idea? Saludos.
__________________
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: 30-03-2018 a las 18:07:57.
Responder Con Cita
  #5  
Antiguo 30-03-2018
tsk tsk is offline
Miembro
 
Registrado: dic 2017
Posts: 56
Poder: 9
tsk Va por buen camino
Esta es la definición del procedimiento FillByte

Código:
procedure FillByte(

  var x;

  count: SizeInt;

  value: Byte

);
El valor que debes de poner tiene que ir de 0 a 255, que en tu caso tendría que ser un 0 para que sea como ZeroMemory

http://lazarus-ccr.sourceforge.net/d.../fillbyte.html
Responder Con Cita
  #6  
Antiguo 31-03-2018
Avatar de danielmj
danielmj danielmj is offline
Miembro
 
Registrado: jun 2011
Posts: 383
Poder: 15
danielmj Va por buen camino
Hola estoy teniendo problemas con el ordenador (posiblemente placa) l lo digo por si veis que no contesto a vuestros mensajes, que es por ese motivo.
tsk voy a probar lo que comentas. Gracias.

edito: He probado lo de FillByte y sigue dando el mismo error.. sigo investigando.
__________________
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: 31-03-2018 a las 15:44:45.
Responder Con Cita
  #7  
Antiguo 01-04-2018
tsk tsk is offline
Miembro
 
Registrado: dic 2017
Posts: 56
Poder: 9
tsk Va por buen camino
Acabo de ver tu video, y el error que te marca es por intentar acceder a una región de memoria inválida, y el error está cuando invocas la función FillByte.

Hice lo siguiente para hacer unas pruebas, y a pesar de compilar, presenta unos errores.

Código:
program Main;

type
    TArrayBool = array[0..0] of boolean;
    PArrayBool = ^TArrayBool;

var 
    Lista : PArrayBool;    
begin
    Getmem(Lista,1 + 10*SizeOf(Boolean));
    writeln(Lista^[0]);
    FillByte(Lista,1+10*SizeOf(Boolean),0);
    writeln(Lista^[1]);
    writeln(Lista^[3]);
    Lista^[3] := TRUE;
    writeln(Lista^[3]);
    writeln(Lista^[10]);
    writeln(Lista^[11]);
    writeln(Lista^[12]);
    writeln(Lista^[13]);
    FreeMem(Lista,1 + 10*SizeOf(Boolean));
    writeln('Test');
end.
Código:
 fpc main.pas
Free Pascal Compiler version 3.0.0 [2015/12/05] for x86_64
Copyright (c) 1993-2015 by Florian Klaempfl and others
Target OS: Linux for x86-64
Compiling main.pas
main.pas(13,20) Warning: range check error while evaluating constants (1 must be between 0 and 0)
main.pas(14,20) Warning: range check error while evaluating constants (3 must be between 0 and 0)
main.pas(15,12) Warning: range check error while evaluating constants (3 must be between 0 and 0)
main.pas(16,20) Warning: range check error while evaluating constants (3 must be between 0 and 0)
main.pas(17,20) Warning: range check error while evaluating constants (10 must be between 0 and 0)
main.pas(18,20) Warning: range check error while evaluating constants (11 must be between 0 and 0)
main.pas(19,20) Warning: range check error while evaluating constants (12 must be between 0 and 0)
main.pas(20,20) Warning: range check error while evaluating constants (13 must be between 0 and 0)
Linking main
/usr/bin/ld: aviso: link.res contiene secciones de salida. ¿Olvidó -T?
23 lines compiled, 0.4 sec
8 warning(s) issued
Si lo ejecuto, obtengo el mismo error que tu, al invocar la función FillByte

Código:
$ ./main
TRUE
Runtime error 216 at $0000000000400252
  $0000000000400252
  $000000000040018F
Pero si lo comentamos y compilamos de nuevo, no se observa el error, pero lo que no me cuadra el es hecho que se puede acceder a regiones de memoria que no se encuentran dentro de los límites que se especificaron en GetMem

Código:
$ ./main
TRUE
FALSE
TRUE
TRUE
FALSE
FALSE
FALSE
FALSE
Test
Le hice algunos cambios, también debes notar que hay dos funciones, GetMem y Getmem. GetMem es una función que retorna un puntero hacia el espacio de memoria reservado y lo puedes ver en el siguiente código como Lista := GetMem(....). Y Getmem funciona como el GetMem del Delphi.

También puedes observar que en FillByte cambién FillByte(Lista,1+10*SizeOf(Boolean),0) por FillByte(Lista^,1+10*SizeOf(Boolean),0), es ahí donde te marcaba el error 216.

Código:
program Main;

type
    TArrayBool = array[0..0] of boolean;
    PArrayBool = ^TArrayBool;

var 
    Lista : PArrayBool;    
begin
    //Lista := GetMem(1 + 10*SizeOf(Boolean));
    Getmem(Lista,1 + 10*SizeOf(Boolean));
    writeln(Lista^[0]);
    writeln(Lista^[1]);
    writeln(Lista^[2]);
    FillByte(Lista^,1+10*SizeOf(Boolean),0);
    writeln(Lista^[0]);
    writeln(Lista^[1]);
    writeln(Lista^[2]);
    writeln(Lista^[10]);
    writeln(Lista^[11]);
    writeln(Lista^[12]);
    writeln(Lista^[13]);
    FreeMem(Lista,1 + 10*SizeOf(Boolean));
    writeln('Test');
end.
Salida
Código:
$ ./main
TRUE
TRUE
TRUE
FALSE
FALSE
FALSE
FALSE
FALSE
FALSE
FALSE
Test
Como vez, puso todo a 0, y para comprobar que sólo se inicializan los valores correspondientes, modifico FillByte de 0 a 1

Código:
program Main;

type
    TArrayBool = array[0..0] of boolean;
    PArrayBool = ^TArrayBool;

var 
    Lista : PArrayBool;    
begin
    //Lista := GetMem(1 + 10*SizeOf(Boolean));
    Getmem(Lista,1 + 10*SizeOf(Boolean));
    writeln(Lista^[0]);
    writeln(Lista^[1]);
    writeln(Lista^[2]);
    FillByte(Lista^,1+10*SizeOf(Boolean),1);
    writeln(Lista^[0]);
    writeln(Lista^[1]);
    writeln(Lista^[2]);
    writeln(Lista^[10]);
    writeln(Lista^[11]);
    writeln(Lista^[12]);
    writeln(Lista^[13]);
    FreeMem(Lista,1 + 10*SizeOf(Boolean));
    writeln('Test');
end.
Salida

Código:
$ ./main
TRUE
TRUE
TRUE
TRUE
TRUE
TRUE
TRUE
FALSE
FALSE
FALSE
Test
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

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
Meetup #3 - Migrar Un componente de Lazarus a Delphi Starter egostar La Taberna 1 20-07-2017 23:11:17
problemas al migrar aplicacion lazarus windows a lazarus linux anubis Linux 5 08-11-2016 15:41:58
Migrar Aplicacion Lazarus De Ubuntu A Windows volv87 Lazarus, FreePascal, Kylix, etc. 4 26-07-2007 08:03:07
Migrar aplicacion Delphi triskel Windows 1 10-05-2005 13:26:04
migrar una aplicacion alfgonvar Varios 2 04-07-2003 18:15:24


La franja horaria es GMT +2. Ahora son las 11:49:44.


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