Programación General > Pascal

 Calcular Edad A Partir De Fechas.

<< < (2/4) > >>

thot_ohm:
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 --- program CalculaEdad; uses dos, crt; type  TFecha = record    Anio: word;    Mes: word;    Dia: word;  end; const  dias: array [0..6] of string =    ('Domingo','Lunes','Martes','Mi‚rcoles','Jueves',     'Viernes','S bado');var  a, m, d, dds: word;  Nacimiento, Actual: TFecha;  Edad: integer; begin  clrscr;  getdate(a,m,d,dds);  writeln ('Hoy es ', dias[dds], ', ', d:0, '/', m:0, '/', a:0);   writeln ('Introduzca la fecha de nacimiento:');  writeln ('D¡a:');  readln (Nacimiento.Dia);  writeln ('Mes:');  readln (Nacimiento.Mes);  writeln ('Año:');  readln (Nacimiento.Anio);   if (Nacimiento.Mes &#62;= m) and (Nacimiento.Dia &#62;= d) then    Edad:= (a - Nacimiento.Anio)  else Edad:= a - Nacimiento.Anio - 1;   writeln ('La edad es: ' ,Edad);  readln; end.  
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:

Enko:
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 --- program CalculaEdad; uses dos, crt; type TFecha = record   Anio: word;   Mes: word;   Dia: word; end; var dds: word; Nacimiento, Actual: TFecha; Edad: integer; begin clrscr; getdate(Actual.Anio, Actual.Mes, Actual.Dia, dds); { el :0 formatea la salida del numero. No estoy seguro pero por ahí no hace falta.} writeln ('Hoy es ',  '   ', Actual.Dia:0, '/', Actual.Mes:0, '/', Actual.Anio:0);  writeln ('Introduzca la fecha de nacimiento:'); write ('D¡a:'); readln (Nacimiento.Dia); write ('Mes:'); readln (Nacimiento.Mes); write ('Año:'); readln (Nacimiento.Anio);  if (Nacimiento.Mes &#62;= Actual.Mes) and (Nacimiento.Dia &#62;= Actual.Dia) then   Edad:= (Actual.Anio - Nacimiento.Anio) else Edad:= Actual.Anio - Nacimiento.Anio - 1;  writeln ('La edad es: ' ,Edad); readln; end.  
Creo que ahí esta  :rolleyes:

thot_ohm:
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.

Enko:
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 .

--- Fin de la cita ---
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:
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 --- if (Nacimiento.Mes &#62;= Actual.Mes) and (Nacimiento.Dia &#62;= Actual.Dia) then    Datos.Edad:= Actual.Anio - Nacimiento.Anio  else Datos.Edad:= Actual.Anio - Nacimiento.Anio - 1;  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 --- else Datos.Edad:= Actual.Anio - Nacimiento.Anio - 1;  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 --- if (Nacimiento.Mes &#62; Actual.Mes) then  Datos.Edad:= Actual.Anio - Nacimiento.Anio; if (Nacimiento.Mes &#60; Actual.Mes) then  Datos.Edad:= Actual.Anio - Nacimiento.Anio - 1; if (Nacimiento.Mes = Actual.Mes) then  if (Nacimiento.Dia &#62;= Actual.Dia) then    Datos.Edad:= Actual.Anio - Nacimiento.Anio  else Datos.Edad:= Actual.Anio - Nacimiento.Anio - 1;  
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

Navegación

[0] Índice de Mensajes

[#] Página Siguiente

[*] Página Anterior

Ir a la versión completa