| Ver tema anterior :: Ver siguiente tema | | Autor | Mensaje |
|---|
lidikat
Registrado: 01 Ene 2013 Mensajes: 23
| Publicado: 01/04/2013 12:02 am | | | Título: Número de días entre dos fechas. C++ |
| Hola, estoy haciendo un programa cuyo enunciado es el siguiente:
-----------------------------------------------------------------------------------
Realice un programa que lea dos fechas (día, mes y año) y diga el número de días que hay entre ellas. Debe comprobar la validez de las fechas, aunque si ambas son correctas puede suponer que la segunda fecha leída y igual o posterior a la primera. Para realizar este ejercicio desarrolle (al menos) los subprogramas mencionados a continuación y úselos de forma coordinada para resolver el problema: • Un subprograma que lea una fecha; tres números que representan día, mes y año. • Un subprograma que compruebe si un año es bisiesto. • Un subprograma al que se le pase el mes y nos devuelva cuantos días tiene. • Un subprograma que compruebe si una fecha es válida.
------------------------------------------------------------------------------------
Me he quedado atascada en el último subprograma y no sé como hacer para que cuente los días entre las dos fechas, les dejo el trozo de programa que tengo hecho
| Código: | #include <iostream> using namespace std;
int main() { }
void leerFecha (int dia, int mes, int year) { cout << "Introduce el dia: "; cin >> dia; cout << "Introduce el mes(en numero): "; cin >> mes; cout << "Introduce el year: "; cin >> year; }
int Bisiesto(int year) { bool bisiesto = true; for(int i=-year; i<year; i++) { if(bisiesto) { year=2000+(i*4); } } return bisiesto; } void DiasMes (int mes) { if((mes==1)||(mes==3)||(mes==5)||(mes==7)||(mes==8)||(mes==10)||(mes==12)) { cout << "El mes tiene 31 dias" << endl; } else if ((mes==2)&&Bisiesto(year)) { cout << "El mes tiene 29 dias"<< endl; } else if (mes==2) { cout << "El mes tiene 28 dias" << endl; else { cout << "El mes tiene 30 dias" << endl; } } int valida(int dia, int mes, int year) { | [/list][/list] |
| | Volver arriba | |  | Masakre
Registrado: 06 Jun 2012 Mensajes: 245
| Publicado: 01/04/2013 6:56 am | | | Título: Re: Número de días entre dos fechas. C++ |
| | lidikat escribió: | •Un subprograma que lea una fecha; tres números que representan día, mes y año. •Un subprograma que compruebe si un año es bisiesto. •Un subprograma al que se le pase el mes y nos devuelva cuantos días tiene. •Un subprograma que compruebe si una fecha es válida. |
El subprograma que lee la fecha está bien, aunque podrías crear una estructura Fecha para mantener los 3 datos unidos. Entonces cuando invoques al programa leerFecha le haces un paso por referencia para que actualice el valor de una instancia de la estructura Fecha.
Sobre la función Bisiesto, esta debería devolver true si el año que le pasas por parámetro es bisiesto, y false si no lo es. En ninguno de los casos veo que le asignes un valor false.
Sobre el subprograma DiasMes, la función en vez de mostrar la cantidad de días por pantalla debería devolver esa cantidad de días, porque las vas a necesitar posteriormente. Es decir, debería ser int DiasMes(int); su prototipo.
La función de validar si una fecha es correcta debería verificar que el día sea un entero positivo y que no exceda el número de días máximos del mes respectivo. Además debería verificar primero que el mes tenga un número correcto (en casos hipotéticos de recibir valores absurdos como -1 o 13, esto es para que el programa no tenga vacíos).
Saludos. |
| | Volver arriba | |  | rir3760

Registrado: 01 Oct 2004 Mensajes: 7530 Ubicación: Mexico
| Publicado: 01/04/2013 7:02 am | | | Título: |
| Varios problemas con el código fuente de tu programa:
* En la función "leerFecha" los datos introducidos por el usuario se almacenan en variables locales y estas se destruyen al terminar la función. En su lugar debes declarar las variables en la función main y utilizar el paso por referencia para modificarlas en "leerFecha":
| Código: | int main() { int dia; int mes; int year; // ... leerFecha(dia, mes, year); // ... return 0; }
void leerFecha(int& dia, int& mes, int& year) { cout << "Introduce el dia: "; cin >> dia; cout << "Introduce el mes(en numero): "; cin >> mes; cout << "Introduce el year: "; cin >> year; } |
* Para conocer si un año es bisiesto solo debes verificar si es múltiplo de 400 o de 4 pero no de cien. En base a ello la función se reduce a:
| Código: | int Bisiesto (int year) { return year % 400 == 0 || year % 4 == 0 && year % 100 != 0; } |
* A la función "DiasMes" debes declararla para que retorna el numero de días en el mes y debes pasarle tanto el mes como el año, este ultimo para verificar si es o no bisiesto. Y es mas fácil almacenar el numero de días de cada mes en un array, de esta forma:
| Código: | int DiasMes(int year, int mes) // mes == 1 .. 12 { int dias[2][13] = { {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}, {0, 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}, }; return dias[Bisiesto(year)][mes]; } |
* También faltaba una llave de cierre.
Bueno, puedes empezar corrigiendo esas partes.
Un saludo _________________ C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly. -- Kernighan & Ritchie, The C programming language |
| | Volver arriba | |  | | |
| No puede crear mensajes No puede responder temas No puede editar sus mensajes No puede borrar sus mensajes No puede votar en encuestas
|
|
| |