[ Foro de Pascal ]

arrays

30-Mar-2010 02:19
Juan Rosario
3 Respuestas

Como puedo hacer un array para que me calcule la fecha de una persona a partir de su fecha de nacimiento que se ingresara por teclado, y tambien para que genere la fecha el el siguiente formato dd-mm-aa.
12-12-2010 o 12-diciembre-2010.

Nota: el programa debe decir la edad de la siguiente manera
tienes tantos anos, tanto meses y tantos dias.

Gracias.


31-Mar-2010 19:39
Nacho Cabanes (+84)

Pero eso no necesariamente implica usar arrays. El único array "cómodo pero no imprescindible" es el que te convierte textos como "diciembre" a cifras como 12.

Así que ¿cual es tu duda: la forma de plantear ese array que convierte de textos a cifras, o la lógica de un programa que reste dos fechas?


01-Apr-2010 00:05
Juan Rosario

Ambas cosas.


14-Apr-2010 18:57
Nacho Cabanes (+84)

Perdona, Juan, se me había pasado tu mensaje sin responder.

- Para convertir textos como "diciembre" a números como "12" te basta con usar un array de strings, en el que el primer elemento sea "enero", el segundo "febrero" y así sucesivamente. Luego recorres ese array para comprobar si el texto que te han indicado coincide con algún elemento (por ejemplo, como "marzo" coincidiría con el tercero, el número de mes sería 3) o si debes dar un mensaje de error, en caso contrario.

- Para restar fechas, una aproximación sencilla (pero no fiable del todo) es convertir ambas fechas a días y restar. Por ejemplo, el 13 de marzo de 2009 sería:

2009 * 365 (supuestos días hasta llegar al 2010) + 31 (días de enero) + 28 (días de febrero) + 13 (días de marzo).

Ese 31 y ese 28 no son "magia", sino que almacenas en un array el número de días que tiene cada mes, para poder sumar los días que ha habido en los meses anteriores.

Para que eso funcione correctamente, deberías tener en cuenta además  los años bisiestos, tanto porque febrero tendrá 29 días en ese año, como porque el año tendrá 366 días si es anterior. Ya sabes: un año es bisiesto si es múltiplo de 4, pero no de 100 salvo si lo es de 400. Hay algún detalle más que afinar, relacionado con los calendarios juliano y gregoriano, pero con eso debería bastar en la mayoría de casos.






(No se puede continuar esta discusión porque tiene más de dos meses de antigüedad. Si tienes dudas parecidas, abre un nuevo hilo.)