Fecha primera de tres dadas

Marta Rubio

//Este programa dice cuál es la primera de tres fechas

#include <iostream>
#include <stdlib.h>
using namespace std;

struct fecha
{
 int d, m, a;
};

bool esBisiesto(int a);
int nDias(int m, int a);
struct fecha fechaAnterior(struct fecha x, struct fecha y, struct fecha z);
bool sonFechasIguales(struct fecha x, struct fecha y, struct fecha z);
void escribirFecha(struct fecha x);
bool noFechaCorrecta (struct fecha x);

int main()
{
int m, a;
struct fecha x, y, z;

do {
cout << "Introduce una fecha:  "; cin >> x.d >> x.m >> x.a;
}while (noFechaCorrecta(x));

do {
 cout << "Introduce otra fecha: "; cin >> y.d >> y.m >> y.a;
}while (noFechaCorrecta(y));

do {
cout << "Introduce la ultima fecha: "; cin >> z.d >> z.m >> z.a;
}while (noFechaCorrecta(z));

cout << endl;

if (sonFechasIguales(x,y,z))
 cout<< "Las tres fechas son iguales.";
else
{
 cout << "La fecha ";     
 escribirFecha(fechaAnterior(x,y,z)) << " es anterior a las otras.";
}
cout << endl << endl;

system("PAUSE");
return 0;
}

//FUNCIONES
bool esBisiesto(int a)
{
 return ((a % 400 == 0) || (a % 4 == 0 && a % 100 != 0));
}

int nDias(int m, int a)
{
 switch(m)
 {
  case 2:
   if (esBisiesto(a)) return 29;
   else return 28;
   break;
  case 4: case 6: case 9: case 11: return 30;
  default: return 31;
 }
}

bool noFechaCorrecta (struct fecha x)
{
 return (x.a<0||x.a>2011||x.m<1||x.m>12||x.d<1||x.d>nDias(x.m,x.a));
}

struct fecha fechaAnterior(struct fecha x, struct fecha y, struct fecha z)
{
 if (x.a < y.a && x.a < z.a) return x;
 else if (y.a < x.a && y.a < z.a) return y;
 else if (z.a < x.a && z.a < y.a) return z;
 else if (x.m < y.m && x.m < z.m) return x;
 else if (y.m < x.m && y.m < z.m) return y;
 else if (z.m < x.m && z.m < y.m) return z;
 else if (x.d < y.d && x.d < z.d) return x;
 else if (y.d < x.d && y.d < z.d) return y;
 else if (z.d < x.d && z.d < y.d) return z;
}

bool sonFechasIguales(struct fecha x, struct fecha y, struct fecha z)
{
 return (x.d == y.d == z.d && x.m == y.m == z.m && x.a == y.a == z.a);
}

void escribirFecha(struct fecha x)
{
 if (x.d<10) cout << 0;
 cout << x.d << "/";
 if (x.m<10) cout << 0;
 cout << x.m << "/" << x.a;
}
Anuncios
Esta entrada fue publicada en Informática e Internet. Guarda el enlace permanente.

Una respuesta a Fecha primera de tres dadas

  1. Observa corrección hecha en la función NoFechaCorrecta().

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s