Ayuda para elaborar un algoritmo para una tabla de calculo
#21
Escrito 03 abril 2011 - 10:19
el sistema lo habia probado conmigo y con otros amigos y funciona perfecto, pero en este caso no funciona.
#22
Escrito 03 abril 2011 - 10:59
Egostar, ya el padre me dijo que yo iba a ser testigo en el tribunal.
el sistema lo habia probado conmigo y con otros amigos y funciona perfecto, pero en este caso no funciona.
jeje, El consuelo que queda es que es más padre el que cria que el que engendra
Salud OS
#23
Escrito 04 abril 2011 - 07:05
Sergio, no me conecte el fin de semana por eso no vi el post con tu solución, no obstante la probaré también
Les muestro mi codigo, que tal vez pueda ser optimizado un poco, pero así funciona bastante bien.
Lo comprobé haciendo una tabla "a mano" y despues la mande a generar con el soft y salió exacta
var Form1 :TForm1; Desde, Hasta :TDateTime; Padre, Madre, Prim, Seg :array[1..50] of TDateTime; SexoP, SexoS, Sex :string; ... procedure TForm1.BitBtn1Click(Sender: TObject); var i,j :Integer; Ap, Am :Word; begin //***** Inicialzar las variables ***** Padre[1]:=StrToDate(FechPadre.Text); Madre[1]:=StrToDate(FechMadre.Text); Ap:=YearOf(Padre[1]); Am:=YearOf(Madre[1]); for i:=2 to 50 do begin Ap:=Ap + 5; Am:=Am + 4; Padre[i]:=RecodeYear(Padre[1], Ap); Madre:=RecodeYear(Madre[1], Am); end; //***** Definir por cual progenitor empieza ***** if YearOf(Padre[1]) <= YearOf(Madre[1]) then begin Desde:=Padre[1]; Hasta:=Madre[1]; Prim:=Padre; Seg:=Madre; SexoP:='Varón'; SexoS:='Hembra'; end else begin Desde:=Madre[1]; Hasta:=Padre[1]; Prim:=Madre; Seg:=Padre; SexoP:='Hembra'; SexoS:='Varón'; end; //***** Crear la tabla de calculo ***** for i:=1 to 50 do begin if Odd(i) then begin for j:=1 to 50 do begin if (Desde < Seg[j]) then begin Hasta:=Seg[j]; Sex:=SexoP; Break; end; end; end else begin for j:=1 to 50 do begin if Desde < Prim[j] then begin Hasta:=Prim[j]; Sex:=SexoS; Break; end; end; end; Listado.Cells[0,i]:=DateToStr(Desde); Listado.Cells[1,i]:=DateToStr(Hasta); Listado.Cells[2,i]:=Sex; Desde:=Hasta; end; end; [/i]
#24
Escrito 04 abril 2011 - 07:24
No veo la forma de ubicar en una tabla cada rango
Luk2009
Como ya comenté, no es 100% efectivo, consideré que fuera un 90 o 95% por las veces que lo he probado, pero no obstante seria bueno probar con bastantes casos para poder tener numeros que sean validos para una estadistica para calcular su porciento de efectividad
Probe con las fechas que me das y para el 1er caso me dio hembra
y para los otros, el 1 hembra y el 2 varon
Veo algo curioso, en 1 de los que me fallo la madre es mayor que el padre (igual que tu amigo), que me daba hembra y salio varon
Parece que ellos cayeron en el 10% de error
Adjunto la tabla de calculo para que hagan pruebas y comenten
Tal vez abrir un nuevo post para poner las estadisticas
#25
Escrito 04 abril 2011 - 07:51
Sergio, analizando tu codigo (todavia no lo he probado) me parece que solo sirve para dadas las fechas, me devuelva si es varon o hembra
No veo la forma de ubicar en una tabla cada rango
JoAnCa, mi codigo usa las fechas de nacimiento del padre y la madre mas la de concepcion del hijo, y directamente te hace todo el calculo sin usar tablas ni listas ni nada, directamente, asi que tu código se queda en casi nada, solo en el trocito que te copie!
La idea para hacerlo de un golpe es que si tienes la edad del padre en el momento de la concepcion (solo has de hayar los dias que han pasado con DaysBetween() y convertirlo a años dividiendo), y te quedas con la parte entera, es decir, los años que tenía (dejando los días extra como "decimales"), es sencillo quitarle de golpe todos los 5 años que se necesitan quitar de un solo golpe, en lugar de meter todas las fechas en una lista y operar con ellas: usas la funcion "mod 5" y listo.
Te pongo un ejemplo al azar: El padre nacio 01/01/1970, el hijo fue engendrado el 01/06/2011.
1) La edad del padre en dias a fecha 01/01/2011 es: EdadPadre:= DaysBetween(FechaPadre, FechaHijo)
2) Para convertirlo en años con sus decimales: EdadPAdre:= round(EdadPadre/396.25); (notar que por los bisientos, un año es 365 días y un cuarto).
nota: en este punto, EdadPadre será 41.5 años aprox., ese .5 son los 6 meses extra.
3) Separas años completos de los decimales con Trunc(EdadPadre), y obtendrías 41 años. El 0.5 sería Frac(EdadPadre).
4) Si divides 41/5 el resto (que vale 1) son los años que tiene la gonada ahora: Trunc(EDadPAdre) mod 5 = 1
5) Finalmente, a ese 1 le has de sumar el 0.5 para obtener la edad real.
Por eso, estas 5 líneas son totalemtne equivalentes a todo tu código (te pongo nombres de variable muy muy descriptivos):
Edad_Padre_En_Anyos:= Round(DaysBetween(Fecha_Nacimiento_Padre, Fecha_Concepcion_Hijo) / 365.25); Edad_Gonada_Padre:= Trunc(EdadPadre) mod 5 + Frac(EdadPadre); Edad_Madre_En_Anyos:= Round(DaysBetween(Fecha_Nacimiento_Madre, Fecha_Concepcion_Hijo) / 365.25); Edad_Gonada_Madre:= Trunc(EdadMadre) mod 4 + Frac(EdadMadre); if Edad_Gonada_Padre > Edad_Gonada_Madre then Sexo:= 'V' else Sexo:= 'H';
Eso si, quizas tu prefieras tener toda esa lista de fechas en las que se producen los cambios para así poder "eelgir" la fecha según el sexo que quieras para tus hijos... en ese caso mi formula no te vale, pero como tu usas la fecha de concepción, supongo que solo se necesita saber para esa fecha concreta.
#26
Escrito 04 abril 2011 - 08:05
Para un caso especifico si es facil hacer el calculo, tanto con tu codigo como con cualquier variante, con solo algunas lineas
Con la tabla los padres pueden planificar cuando deben concebir al bebe según el sexo que quieran
#27
Escrito 04 abril 2011 - 08:31
Como tal las gonadas son: los testiculos en el hombre y los ovarios en la mujer, y las celulas que los componen son las que se renuevan, es decir se cambian celulas viejas por celulas nuevas, pero siguen siendo las mismas gonadas y produciendo sus gametos respectivos (espermatozoides y ovulos)
Un vinculo que habla sobre la renovación celular
http://es.scribd.com...o-tiene-10-anos
Este otro tambien, aunque mas enfocado a la alimentación
http://www.alimentac...esintoxicar.htm
En realidad no se de quien es esta teoria de que el sexo lo determina la renovación de las gonadas pero funciona en muchos casos