• Jueves 25 de Abril de 2024, 01:53

Autor Tema:  Calcular Edad A Partir De Fechas.  (Leído 14062 veces)

thot_ohm

  • Miembro activo
  • **
  • Mensajes: 46
    • Ver Perfil
Calcular Edad A Partir De Fechas.
« en: Jueves 9 de Junio de 2005, 15:31 »
0
Hola a todos.

Estoy iniciandome en el mundo de la programación, por lo que espero que no se rían mucho si pregunto algo que ya esté trillado.  :unsure:

En la universidad me pidieron hacer un programa (en Pascal), que entre otras cosas, necesita calcular la edad de una persona a partir de la fecha de nacimiento. Intuitivamente: edad:= fechaactual - fechanacimiento (digo yo...  <_< ). Confieso mi total fracaso a la hora de diseñar una rutina que haga esto. Estoy seguro que debe haber una rutina "estandar" que ejecute esta acción.

Pueden ayudarme a conseguirla??

Por otro lado ¿hay que declarar algún tipo de dato para que el computador lea la fecha adecuadmente?

De antemano gracias por recibir en el grupo a este aprendiz de programador.

Mil gracias!!!
OHM

Enko

  • Miembro de PLATA
  • *****
  • Mensajes: 1562
  • Nacionalidad: 00
    • Ver Perfil
Re: Calcular Edad A Partir De Fechas.
« Respuesta #1 en: Jueves 9 de Junio de 2005, 16:05 »
0
Bienvenido. :D
La verdad que no recuerdo cual es el tipo de dato fecha de los compiladores estandard de pascal pero no creo que necesites eso  :P

Todo pasa por tener estas variables mas o menos así:
Código: Text
  1.  
  2. AnioNacimiento: integer;
  3. MesNacimiento: byte;
  4. DiaNacimiento: byte;
  5.  
  6. AnioActual: integer;
  7. MesActual: byte;
  8. DiaNacimiento: byte;
  9.  
  10. Edad: byte;
  11.  
  12.  

Luego ingresas los valore de cada cosa y haces algo parecido a.......
Código: Text
  1.  
  2. if (MesNacimiento >= MesActual) and (DiaNacimiento >= DiaActual) then
  3.    Edad := AnioActual - AnioNacimiento
  4. else  Edad :=  AnioActual - AnioNacimiento - 1;
  5.  
  6.  
Supongo que la diferencia entre los años daría la edad solo si, ha cumplido los años,  es decir, el mes y dia de naciemiento es mayor al actual.

Para no tener tantas variables podes usar estructuras:
Código: Text
  1.  
  2. type
  3.    TFecha = record
  4.        Anio: integer;
  5.        Mes: byte;
  6.        Dia: byte;
  7.     end;
  8. var
  9.   Nacimiento, Actual: TFecha;
  10. (... para usarlos...)
  11. Nacimiento.Anio:= 1986;
  12. Nacimienot.Mes := 11;
  13. Actual.Anio := 2005;
  14. Edad := Actual.Anio- Nacimiento.Anio;    
  15.  
  16.  

Saludos
Enko
 :hola:

thot_ohm

  • Miembro activo
  • **
  • Mensajes: 46
    • Ver Perfil
Re: Calcular Edad A Partir De Fechas.
« Respuesta #2 en: Jueves 9 de Junio de 2005, 21:28 »
0
Muchas gracias Enko!!!

Me ayudaste enormemente. Ya hice la rutina, te la adjunto para que la veas y me des tu opinión.

Código: Text
  1.  
  2. program CalculaEdad;
  3.  
  4. uses
  5.   crt;
  6.  
  7. type
  8.   TFecha = record
  9.     Anio: integer;
  10.     Mes: byte;
  11.     Dia: byte;
  12.   end;
  13.  
  14. var
  15.   Nacimiento, Actual: TFecha;
  16.   Edad: integer;
  17.  
  18. begin
  19.   clrscr;
  20.   Actual.Dia:= 9;
  21.   Actual.Mes:= 6;
  22.   Actual.Anio:= 2005;
  23.  
  24.   writeln ('Introduzca la fecha de nacimiento:');
  25.   writeln ('D¡a:');
  26.   readln (Nacimiento.Dia);
  27.   writeln ('Mes:');
  28.   readln (Nacimiento.Mes);
  29.   writeln ('Año:');
  30.   readln (Nacimiento.Anio);
  31.  
  32.   if (Nacimiento.Mes >= Actual.Mes) and (Nacimiento.Dia >= Actual.Dia) then
  33.     Edad:= (Actual.Anio - Nacimiento.Anio)
  34.   else Edad:= Actual.Anio - Nacimiento.Anio - 1;
  35.  
  36.   writeln ('La edad es: ' ,Edad);
  37.   readln;
  38.  
  39. end.
  40.  
  41.  

De nuevo mil gracias por el recibimiento y la ayuda.
OHM

thot_ohm

  • Miembro activo
  • **
  • Mensajes: 46
    • Ver Perfil
Re: Calcular Edad A Partir De Fechas.
« Respuesta #3 en: Jueves 9 de Junio de 2005, 21:30 »
0
Disculpa que se me olvidaba.

¿Como hago para que la rutina obtenga la fecha del sistema?
OHM

Enko

  • Miembro de PLATA
  • *****
  • Mensajes: 1562
  • Nacionalidad: 00
    • Ver Perfil
Re: Calcular Edad A Partir De Fechas.
« Respuesta #4 en: Jueves 9 de Junio de 2005, 22:37 »
0
Cita de: "thot_ohm"
Disculpa que se me olvidaba.

¿Como hago para que la rutina obtenga la fecha del sistema?
Creo que vas a tener que cambiar la estructura  TFecha para que todos los datos sean de tipo WORD.
Te adjunto el código de la ayuda de Turbo Pascal sobre eso.
Código: Text
  1.  
  2.  uses Dos, Crt;
  3.  
  4.  const
  5.    days : array [0..6] of String[9] =
  6.      ('Sunday','Monday','Tuesday',
  7.       'Wednesday','Thursday','Friday',
  8.       'Saturday');
  9.  var
  10.    y, m, d, dow : Word;
  11.  begin
  12.    GetDate(y,m,d,dow);
  13.    Writeln('Today is ', days[dow],', ', m:0, '/', d:0, '/', y:0);
  14.  end.
  15.  
  16.  

Deberás usar la funcion GetDate(Año, Mes, Dia, DiaDeLaSemana).

thot_ohm

  • Miembro activo
  • **
  • Mensajes: 46
    • Ver Perfil
Re: Calcular Edad A Partir De Fechas.
« Respuesta #5 en: Jueves 9 de Junio de 2005, 23:39 »
0
Ok listo!!

No entendía mucho lo que hacía la función, pero a medida que la iba utilizando en el programa le iba agarrando el hilo. Acá tienes el código.

Código: Text
  1.  
  2. program CalculaEdad;
  3.  
  4. uses dos, crt;
  5.  
  6. type
  7.   TFecha = record
  8.     Anio: word;
  9.     Mes: word;
  10.     Dia: word;
  11.   end;
  12.  
  13. const
  14.   dias: array [0..6] of string =
  15.     ('Domingo','Lunes','Martes','Mi‚rcoles','Jueves',
  16.      'Viernes','S bado');
  17. var
  18.   a, m, d, dds: word;
  19.   Nacimiento, Actual: TFecha;
  20.   Edad: integer;
  21.  
  22. begin
  23.   clrscr;
  24.   getdate(a,m,d,dds);
  25.   writeln ('Hoy es ', dias[dds], ', ', d:0, '/', m:0, '/', a:0);
  26.  
  27.   writeln ('Introduzca la fecha de nacimiento:');
  28.   writeln ('D¡a:');
  29.   readln (Nacimiento.Dia);
  30.   writeln ('Mes:');
  31.   readln (Nacimiento.Mes);
  32.   writeln ('Año:');
  33.   readln (Nacimiento.Anio);
  34.  
  35.   if (Nacimiento.Mes >= m) and (Nacimiento.Dia >= d) then
  36.     Edad:= (a - Nacimiento.Anio)
  37.   else Edad:= a - Nacimiento.Anio - 1;
  38.  
  39.   writeln ('La edad es: ' ,Edad);
  40.   readln;
  41.  
  42. end.
  43.  
  44.  

Ahora bien, cree la constante 'dias' para ver como funcionaba realmente esta funcion GETDATE. Pero realmente, el saber el día de la semana es irrelevante en el programa que necesito. De hecho, la orden de mostrar el día de hoy es para saber si lo estaba haciendo bien  :huh: .Voy a probar a quitar la constante 'dias' y que sólo me tome el día, mes y año.

Por otro lado, yo tengo el FreePascal, pero no tiene ningún archivo de ayuda  :angry: . Puedo bajar estos archivos de algún sitio? Es mejor Turbo Pascal 7 que el FreePascal? y por último, donde puedo bajar el TP7?

Disculpa si ya estoy pasado de preguntón, pero tu ayuda me animó bastante a continuar.   :comp:
OHM

Enko

  • Miembro de PLATA
  • *****
  • Mensajes: 1562
  • Nacionalidad: 00
    • Ver Perfil
Re: Calcular Edad A Partir De Fechas.
« Respuesta #6 en: Viernes 10 de Junio de 2005, 02:33 »
0
Esta más que bien que preguntes. Para eso está el foro. :D
Respecto a la ayuda:
Yo tengo tanto el TurboPascal como el Free Pascal. Los uso bajo Windows por lo que tengo la IDE, es decir el editor de texto ese. Las dos IDE traen ayuda pero es un tanto distinta respecto al contenido.
Donde puedes bajar el turbo pascal.....mhhhh.... no recuerdo bien, de la página de Borland puedes bajar gratuitamente el TP5.5 y si quieres bajar el 7, busca en la red con Google que no vas a tardar tanto.  
En todo caso, si quieres te lo envio a tu email si quieres.

Respecto al ejemplo, lo de saber el día de semana es realmente innecesario, lo que pasa que el ejemplo ya venía así y bueno, tampoco molesta tanto. La funcion usa la libreria DOS.tpu así que supongo que usará lo mismo que el comando DATE del DOS.

Aqui te quito la constante..... estoy en un ciber así que por ahi tenga algun error.
Código: Text
  1.  
  2. program CalculaEdad;
  3.  
  4. uses dos, crt;
  5.  
  6. type
  7.  TFecha = record
  8.    Anio: word;
  9.    Mes: word;
  10.    Dia: word;
  11.  end;
  12.  
  13. var
  14.  dds: word;
  15.  Nacimiento, Actual: TFecha;
  16.  Edad: integer;
  17.  
  18. begin
  19.  clrscr;
  20.  getdate(Actual.Anio, Actual.Mes, Actual.Dia, dds);
  21.  
  22. { el :0 formatea la salida del numero. No estoy seguro pero por ahí no hace falta.}
  23.  writeln ('Hoy es ',  '   ', Actual.Dia:0, '/', Actual.Mes:0, '/', Actual.Anio:0);
  24.  
  25.  writeln ('Introduzca la fecha de nacimiento:');
  26.  write ('D¡a:');
  27.  readln (Nacimiento.Dia);
  28.  write ('Mes:');
  29.  readln (Nacimiento.Mes);
  30.  write ('Año:');
  31.  readln (Nacimiento.Anio);
  32.  
  33.  if (Nacimiento.Mes >= Actual.Mes) and (Nacimiento.Dia >= Actual.Dia) then
  34.    Edad:= (Actual.Anio - Nacimiento.Anio)
  35.  else Edad:= Actual.Anio - Nacimiento.Anio - 1;
  36.  
  37.  writeln ('La edad es: ' ,Edad);
  38.  readln;
  39.  
  40. end.
  41.  
  42.  

Creo que ahí esta  :rolleyes:

thot_ohm

  • Miembro activo
  • **
  • Mensajes: 46
    • Ver Perfil
Re: Calcular Edad A Partir De Fechas.
« Respuesta #7 en: Viernes 10 de Junio de 2005, 17:01 »
0
Me gusta mucho más este código. Se entiende mejor (más limpio).

El que yo hice era parecido al tuyo, pero me gustó más el tuyo (honores al maestro jejeje).

En cuanto a lo de TurboPascal (TP) y FreePascal (FP), no sé cual sea mejor. Tenía el TP pero tuve que comprar un disco duro nuevo y lo perdí. FP lo veo más "amigable", me refiero a que marca con distintos colores las palabras clave y lo que son comentarios y textos a mostrar en pantalla. ¿Que opinas tú?

Sea lo que sea, no está de más tener TP. Mi mail es thot_ohm@yahoo.com, aunque creo eso lo puedes ver en mi perfil, ¿no?  <_< .

Bueno, estimado, ya no lo molesto más (por ahora jejeje). Seguramente según vaya desarrollando el programa necesitaré de nuevo tu invaluable ayuda.

Muchas gracias por todo.
OHM

Enko

  • Miembro de PLATA
  • *****
  • Mensajes: 1562
  • Nacionalidad: 00
    • Ver Perfil
Re: Calcular Edad A Partir De Fechas.
« Respuesta #8 en: Sábado 11 de Junio de 2005, 00:46 »
0
De nada, para eso estoy  :D
Ningun maestro, tan solo programo por hobby y tan tengo 18 años.  ;)
Citar
Sea lo que sea, no está de más tener TP. Mi mail es thot_ohm@yahoo.com, aunque creo eso lo puedes ver en mi perfil, ¿no? dry.gif .
Si es cierto, lo puedo ver en tu perfil pero pregunte para saber si lo quirías :) . Te lo estoy enviando en un rato, +/- una hora.

thot_ohm

  • Miembro activo
  • **
  • Mensajes: 46
    • Ver Perfil
Re: Calcular Edad A Partir De Fechas.
« Respuesta #9 en: Lunes 13 de Junio de 2005, 17:21 »
0
Hola de nuevo!!

Tengo un problemita. Por dármelas de "galán_programador_superarrecho"  B) le dije a mi novia para que ingresara su fecha para que le calculara la edad (estupideces de uno...) y resultó que le salió 19 años cuando ella tiene 20 (nació el 01 de Mayo de 1985).

Me puse a revisar a fondo la rutina y me di cuenta que éste condicional
Código: Text
  1.  
  2. if (Nacimiento.Mes >= Actual.Mes) and (Nacimiento.Dia >= Actual.Dia) then
  3.     Datos.Edad:= Actual.Anio - Nacimiento.Anio
  4.   else Datos.Edad:= Actual.Anio - Nacimiento.Anio - 1;
  5.  
  6.  
sólo es verdadero cuando el mes Y el día de nacimiento son mayores o iguales al mes y día actuales. Ahora bien, se puede dar el caso que el mes de nacimiento sea mayor (o incluso igual) al mes actual pero que el día de nacimiento sea menor al día actual (como sucede en éste caso), por lo que el condicional se evaluaría falso ejecutando esta parte del código
Código: Text
  1.  
  2. else Datos.Edad:= Actual.Anio - Nacimiento.Anio - 1;
  3.  
  4.  
siendo ésto incorrecto por haber cumplido ésta persona años ya.

Por ejemplo (que sé que está medio enredado): Hoy es 13 de Junio de 2005, mi novia nació el 01 de Mayo de 1985. El mes actual, efectivamente, es mayor que el mes de nacimiento, pero el día de nacimiento es menor. El if es falso y se ejecuta el else.

Modifiqué un poco tu rutina he hice este:
Código: Text
  1.  
  2. if (Nacimiento.Mes > Actual.Mes) then
  3.   Datos.Edad:= Actual.Anio - Nacimiento.Anio;
  4.  
  5. if (Nacimiento.Mes < Actual.Mes) then
  6.   Datos.Edad:= Actual.Anio - Nacimiento.Anio - 1;
  7.  
  8. if (Nacimiento.Mes = Actual.Mes) then
  9.   if (Nacimiento.Dia >= Actual.Dia) then
  10.     Datos.Edad:= Actual.Anio - Nacimiento.Anio
  11.   else Datos.Edad:= Actual.Anio - Nacimiento.Anio - 1;
  12.  
  13.  

Lo he revisado y lo veo "lógicamente" bien. Pero, obviamente debe haber algún error ya que el error persiste; sigue diciendo que tiene 19 años en vez de 20.

Ayudame a ver que es lo que estoy haciendo mal...

¿¿¿O es que mi novia me engañó en la edad???  :blink: jajaja
OHM

thot_ohm

  • Miembro activo
  • **
  • Mensajes: 46
    • Ver Perfil
Re: Calcular Edad A Partir De Fechas.
« Respuesta #10 en: Lunes 13 de Junio de 2005, 17:34 »
0
Creo que ya dí con lo que era. Mira a ver:

Código: Text
  1.  
  2.   if (Actual.Mes > Nacimiento.Mes) then
  3.     Datos.Edad:= Actual.Anio - Nacimiento.Anio;
  4.  
  5.   if (Actual.Mes < Nacimiento.Mes) then
  6.     Datos.Edad:= Actual.Anio - Nacimiento.Anio - 1;
  7.  
  8.   if (Nacimiento.Mes = Actual.Mes) then
  9.     if (Actual.Dia >= Nacimiento.Dia) then
  10.       Datos.Edad:= Actual.Anio - Nacimiento.Anio
  11.     else Datos.Edad:= Actual.Anio - Nacimiento.Anio - 1;
  12.  
  13.  

Sugerencias bien recibidas...
OHM

Enko

  • Miembro de PLATA
  • *****
  • Mensajes: 1562
  • Nacionalidad: 00
    • Ver Perfil
Re: Calcular Edad A Partir De Fechas.
« Respuesta #11 en: Martes 14 de Junio de 2005, 01:55 »
0
Cita de: "thot_ohm"
Creo que ya dí con lo que era. Mira a ver:

Código: Text
  1.  
  2.   if (Actual.Mes > Nacimiento.Mes) then
  3.     Datos.Edad:= Actual.Anio - Nacimiento.Anio;
  4.  
  5.   if (Actual.Mes < Nacimiento.Mes) then
  6.     Datos.Edad:= Actual.Anio - Nacimiento.Anio - 1;
  7.  
  8.   if (Nacimiento.Mes = Actual.Mes) then
  9.     if (Actual.Dia >= Nacimiento.Dia) then
  10.       Datos.Edad:= Actual.Anio - Nacimiento.Anio
  11.     else Datos.Edad:= Actual.Anio - Nacimiento.Anio - 1;
  12.  
  13.  

Sugerencias bien recibidas...
si es cierto, me faltó considerar que es lo que pasa si el mes es mayor pero el día no ya que, aún así, como el mes es mayor cumplió los años...... :rolleyes:
Código: Text
  1.  
  2.   if (Actual.Mes > Nacimiento.Mes) then
  3.       Datos.Edad:= Actual.Anio - Nacimiento.Anio
  4.   else if (Nacimiento.Mes = Actual.Mes) and (Actual.Dia >= Nacimiento.Dia) then
  5.       Datos.Edad:= Actual.Anio - Nacimiento.Anio
  6.   else
  7.       Datos.Edad:= Actual.Anio - Nacimiento.Anio - 1;
  8.  
  9.  

Creo que ahí ya debe bastar. El caso cuando el mes actual es menor que el de nacimiento encaja en el ultimo  ELSE.

thot_ohm

  • Miembro activo
  • **
  • Mensajes: 46
    • Ver Perfil
Re: Calcular Edad A Partir De Fechas.
« Respuesta #12 en: Martes 14 de Junio de 2005, 16:27 »
0
Gracias Enko, pero el error persiste cuando trato de calcular la edad de alguien que haya nacido el día anterior o el posterior a la fecha actual.

Por ejemplo, calculo la edad de alguien nacido el 13/06/1985 me dice que tiene 20 años y si le pongo a calcular de alguien nacido el 15/06/1985 dice que tiene 19 años.

Tu código es más limpio que el mío y lo he seguido mentalmente para revisarle la lógica y lo veo perfecto (a no ser que sea mi lógica la que está mal  :blink: ).

Te envío adjunto a éste mensaje el código del programa completo por si lo quieres compilar y probarlo tu mismo a ver si yo estoy haciendo algo mal.

De nuevo gracias!

Código: Text
  1.  
  2. program corocoras;
  3.  
  4. uses dos, crt;
  5.  
  6. type
  7.   TFecha = record
  8.     Anio: word;
  9.     Mes: word;
  10.     Dia: word;
  11.   end;
  12.  
  13.   TDatos = record
  14.     Nombre: string;
  15.     Edad: integer;
  16.     Grado: byte;
  17.     Prom: real;
  18.   end;
  19.  
  20. var
  21.   Datos: TDatos;
  22.   Archivo: File of TDatos;
  23.  
  24. procedure calculaedad;
  25.   var
  26.     dds: word;
  27.     Nacimiento, Actual: TFecha;
  28.  
  29.   begin
  30.   getdate(Actual.Anio, Actual.Mes, Actual.Dia, dds);
  31.   writeln ('La fecha actual es: ', Actual.Dia, '/', Actual.Mes, '/', Actual.Anio);
  32.   write ('D¡a: ');
  33.   readln (Nacimiento.Dia);
  34.   write ('Mes: ');
  35.   readln (Nacimiento.Mes);
  36.   write ('A¤o: ');
  37.   readln (Nacimiento.Anio);
  38.  
  39.   if (Actual.Mes > Nacimiento.Mes) then
  40.     Datos.Edad:= Actual.Anio - Nacimiento.Anio
  41.   else if (Nacimiento.Mes = Actual.Mes) and (Actual.Dia >= Nacimiento.Dia) then
  42.     Datos.Edad:= Actual.Anio - Nacimiento.Anio
  43.   else
  44.      Datos.Edad:= Actual.Anio - Nacimiento.Anio - 1;
  45.  
  46.   {if (Actual.Mes > Nacimiento.Mes) then
  47.     Datos.Edad:= Actual.Anio - Nacimiento.Anio - 1;
  48.  
  49.   if (Actual.Mes < Nacimiento.Mes) then
  50.     Datos.Edad:= Actual.Anio - Nacimiento.Anio;
  51.  
  52.   if (Nacimiento.Mes = Actual.Mes) then
  53.     if (Actual.Dia >= Nacimiento.Dia) then
  54.       Datos.Edad:= Actual.Anio - Nacimiento.Anio - 1
  55.     else Datos.Edad:= Actual.Anio - Nacimiento.Anio;}
  56.   end;
  57.  
  58. procedure obtenernotas;
  59.  
  60.   var
  61.     i: byte;
  62.     key: char;
  63.     Notas: Array[1..10] of real;
  64.     SumNotas: real;
  65.   begin
  66.   i:= 0;
  67.   repeat
  68.     i:= i + 1;
  69.     write ('Intoduzca la nota: ');
  70.     readln (Notas[i]);
  71.     SumNotas:= SumNotas + Notas[i];
  72.     write ('¨Desea introducir otra nota? (s/n): ');
  73.     readln (key);
  74.     if i = 10 then write ('Ya se tienen 10 notas del alumno');
  75.   until (key = 'n') or (key = 'N') or (i = 10);
  76.   Datos.Prom:= SumNotas / i;
  77.   write ('El promedio es ', Datos.Prom);
  78.   readln;
  79.   end;
  80.  
  81. procedure obtenerdatos;
  82.   begin
  83.   clrscr;
  84.   write ('Introduzca el nombre: ');
  85.   readln (Datos.Nombre);
  86.   writeln ('Fecha de nacimiento: ');
  87.   calculaedad;
  88.   write ('Grado: ');
  89.   readln (Datos.Grado);
  90.   write ('Notas: ');
  91.   obtenernotas;
  92.   end;
  93.  
  94. procedure almacenardatos;
  95.   begin
  96.   end;
  97.  
  98. begin
  99.   obtenerdatos;
  100.   almacenardatos;
  101.   writeln ('Nombre: ' ,Datos.Nombre);
  102.   writeln ('Edad: ' ,Datos.Edad);
  103.   writeln ('Grado: ' ,Datos.Grado);
  104.   writeln ('Notas: ' ,Datos.Prom);
  105.   readln;
  106. end.
  107.  
  108.  
OHM

Enko

  • Miembro de PLATA
  • *****
  • Mensajes: 1562
  • Nacionalidad: 00
    • Ver Perfil
Re: Calcular Edad A Partir De Fechas.
« Respuesta #13 en: Miércoles 15 de Junio de 2005, 01:28 »
0
Citar
Por ejemplo, calculo la edad de alguien nacido el 13/06/1985 me dice que tiene 20 años y si le pongo a calcular de alguien nacido el 15/06/1985 dice que tiene 19 años.
Entonces poniendo al reves los -1 debería funcionar  :rolleyes:

Me equivoque, Van al reves los -1, así si funciona:

Código: Text
  1.  
  2. if (Actual.Mes > Nacimiento.Mes) then
  3.   Datos.Edad:= Actual.Anio - Nacimiento.Anio -1
  4. else if (Nacimiento.Mes = Actual.Mes) and (Actual.Dia >= Nacimiento.Dia) then
  5.   Datos.Edad:= Actual.Anio - Nacimiento.Anio -1
  6. else
  7.   Datos.Edad:= Actual.Anio - Nacimiento.Anio;
  8.  
  9.  

Si el mes actual es mayor que el mes del nacimiento es porque no cumplió los años y hay que restarle un 1 :rolleyes:

thot_ohm

  • Miembro activo
  • **
  • Mensajes: 46
    • Ver Perfil
Re: Calcular Edad A Partir De Fechas.
« Respuesta #14 en: Miércoles 15 de Junio de 2005, 14:43 »
0
Citar
Si el mes actual es mayor que el mes del nacimiento es porque no cumplió los años y hay que restarle un 1

Si el mes actual es mayor al mes de nacimiento es porque SÍ cumplió años. Esto es lo que me tiene frikie. En ese caso quedaría así (digo yo  :unsure: ):

Código: Text
  1.  
  2. if (Actual.Mes > Nacimiento.Mes) then
  3.  Datos.Edad:= Actual.Anio - Nacimiento.Anio
  4. else if (Nacimiento.Mes = Actual.Mes) and (Actual.Dia >= Nacimiento.Dia) then
  5.  Datos.Edad:= Actual.Anio - Nacimiento.Anio -1
  6. else
  7.  Datos.Edad:= Actual.Anio - Nacimiento.Anio;
  8.  
  9.  

Ahora bien, en ésta parte del código:
Código: Text
  1.  
  2. else if (Nacimiento.Mes = Actual.Mes) and (Actual.Dia >= Nacimiento.Dia) then
  3.  Datos.Edad:= Actual.Anio - Nacimiento.Anio -1
  4.  
  5.  
evalúa que si el mes de nacimiento es igual al actual y el día de nacimiento es MAYOR o IGUAL al actual le reste -1 a la resta del año actual menos el año de nacimiento. Es decir, que no ha cumplido años. Pero sí habría cumplido años si éste condicional es cierto  :blink: , por lo que no habría que restarle 1.

Si seguimos con la parte final del condicional:
Código: Text
  1.  
  2. else
  3.  Datos.Edad:= Actual.Anio - Nacimiento.Anio;
  4.  
  5.  
se está evaluando que si no se cumple (que el mes de nacimiento sea igual al mes actual y que el dia actual sea mayor o igualal día de nacimiento) no le reste 1. Es decir que sí habría cumplido años ¿?.

¿No es esto incorrecto?

Tal como acabo de analizar el código, tal como estaba estaría bien:
Código: Text
  1.  
  2. if (Actual.Mes > Nacimiento.Mes) then
  3.      Datos.Edad:= Actual.Anio - Nacimiento.Anio
  4.  else if (Nacimiento.Mes = Actual.Mes) and (Actual.Dia >= Nacimiento.Dia) then
  5.      Datos.Edad:= Actual.Anio - Nacimiento.Anio
  6.  else
  7.      Datos.Edad:= Actual.Anio - Nacimiento.Anio - 1;
  8.  
  9.  

Ahora bien, que te parece si anidamos otro condicional. Algo así:
Código: Text
  1.  
  2. if (Actual.Mes > Nacimiento.Mes) then
  3.      Datos.Edad:= Actual.Anio - Nacimiento.Anio
  4.  else if (Nacimiento.Mes = Actual.Mes) and (Actual.Dia >= Nacimiento.Dia) then
  5.      Datos.Edad:= Actual.Anio - Nacimiento.Anio
  6.  else if (Nacimiento.Mes = Actual.Mes) and (Actual.Dia < Nacimiento.Dia) then
  7.      Datos.Edad:= Actual.Anio - Nacimiento.Anio - 1
  8.  else if (Nacimiento.Mes < Actual.Mes) then
  9.      Datos.Edad:= Actual.Anio - Nacimiento.Anio - 1
  10.  
  11.  

Voy a correrlo y posteo los resultados a ver si funcionó.

No me canso de darte las gracias por la ayuda. Y disculpa el fastidio  :(
OHM

thot_ohm

  • Miembro activo
  • **
  • Mensajes: 46
    • Ver Perfil
Re: Calcular Edad A Partir De Fechas.
« Respuesta #15 en: Miércoles 15 de Junio de 2005, 16:44 »
0
Le dí para arriba y le dí para abajo y al final la que funcionó fue ésta:

Código: Text
  1.  
  2.   if (Actual.Mes > Nacimiento.Mes) then
  3.    Datos.Edad:= Actual.Anio - Nacimiento.Anio;
  4.  
  5.   if (Actual.Mes < Nacimiento.Mes) then
  6.    Datos.Edad:= Actual.Anio - Nacimiento.Anio - 1;
  7.  
  8.   if (Nacimiento.Mes = Actual.Mes) then
  9.    if (Actual.Dia >= Nacimiento.Dia) then
  10.      Datos.Edad:= Actual.Anio - Nacimiento.Anio
  11.    else Datos.Edad:= Actual.Anio - Nacimiento.Anio - 1;
  12.  
  13.  

Así se quedará jejeje. Gracias.
OHM

Enko

  • Miembro de PLATA
  • *****
  • Mensajes: 1562
  • Nacionalidad: 00
    • Ver Perfil
Re: Calcular Edad A Partir De Fechas.
« Respuesta #16 en: Miércoles 15 de Junio de 2005, 18:26 »
0
Citar
Si el mes actual es mayor al mes de nacimiento es porque SÍ cumplió años. Esto es lo que me tiene frikie. En ese caso quedaría así (digo yo unsure.gif ):
Si es cierto  :( , lo curioso es que probé de esa ultima manera y funcaba.  :(

En fin, si te funcionó de otra forma, mejor :lol:

dont know

  • Nuevo Miembro
  • *
  • Mensajes: 4
    • Ver Perfil
Re: Calcular Edad A Partir De Fechas.
« Respuesta #17 en: Viernes 5 de Mayo de 2006, 23:14 »
0
la verdad necesio ayudacomo kda el codigo????
esk a mi me pidieron ese programa xa el lunes y ya hoy es viernes y si no lo entrego epruebo por favor ayudenme

pro con este programa los datos los introduces desd teclado????

si alguno sabe como kdo el  programa por favor ayudeme mi correo es

mariguana_pera@hotmail.com
auxilio :scream:  :scream:  :scream:

Enko

  • Miembro de PLATA
  • *****
  • Mensajes: 1562
  • Nacionalidad: 00
    • Ver Perfil
Re: Calcular Edad A Partir De Fechas.
« Respuesta #18 en: Sábado 6 de Mayo de 2006, 00:33 »
0
Cita de: "dont know"
la verdad necesio ayudacomo kda el codigo????
esk a mi me pidieron ese programa xa el lunes y ya hoy es viernes y si no lo entrego epruebo por favor ayudenme

pro con este programa los datos los introduces desd teclado????

si alguno sabe como kdo el  programa por favor ayudeme mi correo es

mariguana_pera@hotmail.com
auxilio :scream:  :scream:  :scream:
En este foro no se hacen tareas.
Dudas puntuales?

dont know

  • Nuevo Miembro
  • *
  • Mensajes: 4
    • Ver Perfil
Re: Calcular Edad A Partir De Fechas.
« Respuesta #19 en: Sábado 6 de Mayo de 2006, 06:17 »
0
pero a lo k me refiero es k no se como calcular los mese intente pero no corrio el programa osea no kkiero k me hagan la tarea sory si entendieron mal