PLE:Unidad4Ejercicio21

/* Programa:        Unidad4Ejercicio21.cpp Fecha:           19/01/2006 Descripción:     Estructura fecha.

using namespace std;
 * 1) include
 * 2) include
 * 3) include
 * 4) include
 * 1) include

struct fecha {     int dia; int mes; int anyo; };

void leeFecha(fecha &f); void escribeFecha(fecha f); void sumaDia(fecha &f); void sumaDias(fecha &f, unsigned int n); bool esFinAnyo(fecha f); bool esFinMes(fecha f); bool esAniversario(fecha f1, fecha f2); bool esIgual(fecha f1, fecha f2); bool esDistinta(fecha f1, fecha f2); bool esMenor(fecha f1, fecha f2); bool esMenorIgual(fecha f1, fecha f2); bool esMayor(fecha f1, fecha f2); bool esMayorIgual(fecha f1, fecha f2);

void main {     fecha f1, f2; unsigned int d;

cout << "Introduzca una fecha "; leeFecha(f1); cout << "\nLa fecha inrtoducida es "; escribeFecha(f1);

if(esFinMes(f1)) cout << "\nEs fin de mes"; else cout << "\nNO es fin de mes";

if(esFinAnyo(f1)) cout << "\nEs fin de año"; else cout << "\nNO es fin de año";

sumaDia(f1); cout << "\nLafecha del dia siguiente es: "; escribeFecha(f1);

cout << "\nIntroduzca el numero de dias a sumar "; cin >> d;

sumaDias(f1,d); cout << "\nLa fecha obtenida es: "; escribeFecha(f1);

cout << "Introduzca otra fecha "; leeFecha(f2);

if(esAniversario(f1,f2)) cout << "\nEs aniversario de la primera fecha"; else cout << "\nNo es aniversario de la primera fecha";

if(esIgual(f1,f2)) cout << "\nLas fechas son iguales"; else cout << "\nLas fechas no son iguales";

if(esMenor(f1,f2)) cout << "\nLa primera es menor que la segunda"; else cout << "\nLa primera no es menor que la segunda";

cin.ignore; cin.get; }

void leeFecha(fecha &f) {     char cfecha[14]; char cdia[3]; char cmes[3]; char canyo[8]; int i;

cin >> cfecha;

for(i = 0; i < 2; i++) cdia[i] = cfecha[i]; cdia[i] = '\0';

for(i = 3; i < 5; i++) cmes[i - 3] = cfecha[i]; cmes[i - 3] = '\0';

for(i = 6; i < strlen(cfecha) ; i++) canyo[i - 6] = cfecha[i]; canyo[i - 6] = '\0';

f.dia = atoi(cdia); f.mes = atoi(cmes); f.anyo = atoi(canyo); }

void escribeFecha(fecha f) { cout << f.dia << '/' << f.mes << '/' << f.anyo; }

bool esBisiesto(fecha f) { if((f.anyo % 400 == 0) || (f.anyo % 4 ==0 && f.anyo % 100 != 0)) return true; else return false; }

void sumaDia(fecha &f) {     // comprobamos si es fin de año if(esFinAnyo(f)) { f.dia = 1; f.mes = 1; f.anyo++; }else if(esFinMes(f)) { f.dia = 1; f.mes++; }else { f.dia++; } }

void sumaDias(fecha &f, unsigned int n) { for(unsigned int i=0; i < n; i++) sumaDia(f); }

bool esFinAnyo(fecha f) { if(f.dia == 31 && f.mes == 12) return true; else return false; }

bool esFinMes(fecha f) { if((f.mes == 1 || f.mes == 3 || f.mes == 5 || f.mes == 7 || f.mes == 8 || f.mes == 10 || f.mes == 12) && f.dia == 31) return true; else if((f.mes == 4 || f.mes == 6 || f.mes == 9 || f.mes == 11) && f.dia == 30) return true; else if(f.mes == 2 && f.dia == 28 && !esBisiesto(f)) return true; else if(f.mes == 2 && f.dia == 29 && esBisiesto(f)) return true; else return false; }

bool esAniversario(fecha f1, fecha f2) {     if(f1.dia == f2.dia && f1.mes == f2.mes) return true; else return false; }

bool esIgual(fecha f1, fecha f2) {     if(f1.dia == f2.dia && f1.mes == f2.mes && f1.anyo == f2.anyo) return true; else return false; }

bool esDistinta(fecha f1, fecha f2) {     return !esIgual(f1,f2); }

bool esMenor(fecha f1, fecha f2) {     if(f1.anyo < f2.anyo) return true; else if(f1.anyo == f2.anyo && f1.mes < f2.mes) return true; else if(f1.anyo == f2.anyo && f1.mes == f2.mes && f1.dia < f2.dia) return true; else return false; }

bool esMenorIgual(fecha f1, fecha f2) {     return (esMenor(f1,f2) || esIgual(f1,f2)); }

bool esMayor(fecha f1, fecha f2) {     return !esMenorIgual(f1,f2); }

bool esMayorIgual(fecha f1, fecha f2) {     return (esMayor(f1,f2) || esIgual(f1,f2)); }