Ir al contenido


Foto

Ayuda para elaborar un algoritmo para una tabla de calculo


  • Por favor identifícate para responder
26 respuestas en este tema

#21 luk2009

luk2009

    Advanced Member

  • Moderadores
  • PipPipPip
  • 2.040 mensajes
  • LocationSanto Domingo

Escrito 03 abril 2011 - 10:19

Egostar,  ya el padre me dijo que yo iba a ser testigo en el tribunal.  :D :D


el sistema lo habia probado conmigo y con otros amigos y funciona perfecto, pero en este caso no funciona.




  • 0

#22 egostar

egostar

    missing my father, I love my mother.

  • Administrador
  • 14.448 mensajes
  • LocationMéxico

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  :D :D :D

Salud OS
  • 0

#23 JoAnCa

JoAnCa

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 775 mensajes
  • LocationPinar del Río, Cuba

Escrito 04 abril 2011 - 07:05

Pues ya encontre la solución que buscaba y funciona como esperaba 

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



delphi
  1. var
  2.   Form1                :TForm1;
  3.   Desde, Hasta        :TDateTime;
  4.   Padre, Madre,
  5.   Prim, Seg            :array[1..50] of TDateTime;
  6.   SexoP, SexoS, Sex :string;
  7.  
  8. ...
  9.  
  10.  
  11. procedure TForm1.BitBtn1Click(Sender: TObject);
  12. var
  13.   i,j    :Integer;
  14.   Ap, Am  :Word;
  15.  
  16. begin
  17.   //***** Inicialzar las variables *****
  18.   Padre[1]:=StrToDate(FechPadre.Text); Madre[1]:=StrToDate(FechMadre.Text);
  19.   Ap:=YearOf(Padre[1]);
  20.   Am:=YearOf(Madre[1]);
  21.   for i:=2 to 50 do
  22.   begin
  23.     Ap:=Ap + 5;
  24.     Am:=Am + 4;
  25.     Padre[i]:=RecodeYear(Padre[1], Ap);
  26.     Madre:=RecodeYear(Madre[1], Am);
  27.   end;
  28.  
  29.   //***** Definir por cual progenitor empieza *****
  30.   if YearOf(Padre[1]) <= YearOf(Madre[1]) then
  31.     begin
  32.       Desde:=Padre[1]; Hasta:=Madre[1];
  33.       Prim:=Padre;    Seg:=Madre;
  34.       SexoP:='Varón';  SexoS:='Hembra';
  35.     end
  36.   else
  37.     begin
  38.       Desde:=Madre[1]; Hasta:=Padre[1];
  39.       Prim:=Madre;    Seg:=Padre;
  40.       SexoP:='Hembra'; SexoS:='Varón';
  41.     end;
  42.  
  43.   //***** Crear la tabla de calculo *****
  44.   for i:=1 to 50 do
  45.   begin
  46.     if Odd(i) then
  47.     begin
  48.       for j:=1 to 50 do
  49.         begin
  50.           if (Desde < Seg[j]) then
  51.             begin
  52.               Hasta:=Seg[j];
  53.               Sex:=SexoP;
  54.               Break;
  55.             end;
  56.         end;
  57.     end
  58.     else
  59.     begin
  60.       for j:=1 to 50 do
  61.         begin
  62.           if Desde < Prim[j]    then
  63.             begin
  64.               Hasta:=Prim[j];
  65.               Sex:=SexoS;
  66.               Break;
  67.             end;
  68.         end;
  69.     end;
  70.     Listado.Cells[0,i]:=DateToStr(Desde);
  71.     Listado.Cells[1,i]:=DateToStr(Hasta);
  72.     Listado.Cells[2,i]:=Sex;
  73.     Desde:=Hasta;
  74.   end;
  75. end;
  76. [/i]


  • 0

#24 JoAnCa

JoAnCa

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 775 mensajes
  • LocationPinar del Río, Cuba

Escrito 04 abril 2011 - 07:24

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

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  *-) :D

Adjunto la tabla de calculo para que hagan pruebas y comenten 

Tal vez abrir un nuevo post para poner las estadisticas  (y)
  • 0

#25 Sergio

Sergio

    Advanced Member

  • Moderadores
  • PipPipPip
  • 1.092 mensajes
  • LocationMurcia, España

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):



delphi
  1. Edad_Padre_En_Anyos:= Round(DaysBetween(Fecha_Nacimiento_Padre, Fecha_Concepcion_Hijo) / 365.25);
  2. Edad_Gonada_Padre:= Trunc(EdadPadre) mod 5 + Frac(EdadPadre);
  3. Edad_Madre_En_Anyos:= Round(DaysBetween(Fecha_Nacimiento_Madre, Fecha_Concepcion_Hijo) / 365.25);
  4. Edad_Gonada_Madre:= Trunc(EdadMadre) mod 4 + Frac(EdadMadre);
  5. 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.
  • 0

#26 JoAnCa

JoAnCa

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 775 mensajes
  • LocationPinar del Río, Cuba

Escrito 04 abril 2011 - 08:05

Pues si sergio, mi idea de la tabla es para poder planificar el sexo del futuro bebé

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

  • 0

#27 JoAnCa

JoAnCa

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 775 mensajes
  • LocationPinar del Río, Cuba

Escrito 04 abril 2011 - 08:31

Escafandra
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
  • 0




IP.Board spam blocked by CleanTalk.