Años Bisiestos

Cuando nos preguntan que es un año bisiesto muchos responderían que es aquel en el cual el mes de Febrero tiene 29 días. Si por otra parte la pregunta va dirigida con relación a su periodicidad, la respuesta posiblemente sería que éstos se presentan cada cuatro años, es decir, cuando la cifra correspondiente al año es divisible por cuatro. Sin embargo, eso no es enteramente cierto. Los años 1800, 1900 y 2000 son todos ellos divisibles por 4 y, sin embargo, sólo el 2000 fue bisiesto. ¿Qué es lo que falta entonces en este planteamiento? La razón (complementada con la lógica de C++ entre paréntesis) es que en realidad los años bisiestos son aquellos que son divisibles entre 4 (year%4 == 0) y (&&) no son divisibles entre 100 (year%100 !=0) ó (||) son divisibles entre 400 (year%400 == 0). Los años de 1800 y 1900, aunque divisibles por 4, son excluidos porque son divisibles por 100 y no son divisibles por 400. Por eso no fueron bisiestos. El próximo año bisiesto divisible entre 400 será el 2400; muy lejos de nuestras espectativas. Sin entrar en consideraciones astronómicas del porqué de la necesidad de establecer los años bisiestos en nuestro calendario, nos referiremos más bien al porque de nuestro interés en ellos. Si tenemos una data correspondiente a elementos diarios de clima agrupados por años, para que estos se lean y procesen de la manera adecuada se debe tener en consideración los años bisiestos.

Lo anterior se logra con una simple función booleana en C++ (este tipo no está contemplado en C). El código sería el siguiente:

bool bisiesto(int year) {



	return year%4==0 && year%100!=0 || year%400==0;



}

El resultado que devuelve la función sería 1 (bisiesto) ó 0 (no bisiesto) y con esto se implementa el control en el programa principal para leer o escribir valores en pantalla/archivos con la secuencia adecuada, es decir, Febrero con 29 días y el año con 366 días en los bisiestos y Febrero con 28 días y el año con 365 días en los considerados “normales”. Parece una tontería pero si no lo toman en cuenta es posible que obtengan resultados muy diferentes a los esperados.

Un programa que incluye la función anterior sería:

#include <iostream>

using namespace std;

bool bisiesto(int year);

int main () {

	int anho;

	cout << "Introduzca el anho = ";

	cin >> anho;

	if (!bisiesto(anho)) cout << "no bisiesto\n";

		else cout << "bisiesto\n";
	

	return 0;

}

bool bisiesto(int year) {

    return year%4 == 0 && year%100 !=0 || year%400 == 0;

}
Esta entrada fue publicada en Código C++. Guarda el enlace permanente.

3 respuestas a Años Bisiestos

  1. Celeste dijo:

    Muchas gracias, me ha sido de mucha ayuda!!!

  2. ¿pero por que no compila ?

Responder

Por favor, inicia sesión con uno de estos métodos para publicar tu comentario:

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