domingo, 20 de noviembre de 2011

Determinar si un año es bisiesto en C++

Este programa es parte del libro Programación y Resolución de Problemas con C++ de Nell Dale y Cheep Weems, cuarta edición. El problemita es sencillo pero sirve, al menos para mí, como un primer uso del tipo de datos boolean. Para entender el algoritmo basta con recordar que un año bisiesto es aquel que tiene 366 dias en vez de 365. La regla, en el calendario gregoriano, es la siguiente:

Un año es bisiesto si es divisible entre 4, excepto el último de cada siglo (aquel divisible por 100), salvo que este último sea divisible por 400.

Con ésto es posible escribir la función Bisiesto que contiene este programa. Tal vez lo único extraño es la llamada de esta función mediante if. En realidad hay que recordar que un condicional en C++ se evalúa como true o como false, (véase el inciso 3 de esta entrada)así que, dado que la función llamada (Bisiesto) devuelve uno de esos dos valores, es perfectamente válido invocarla en el if.

////////////////////////////////////////////////////
 // Este programa recibe un anio e imprime si es   //
 // bisiesto o no                                  // 
 // /////////////////////////////////////////////////
 

 #include <iostream>
 using namespace::std;

 bool Bisiesto( int );

 int main()
 {                //  Abre main
 int anio;
 cout <<"\nIntroduzca un anio y sabra si es bisiesto:\n";
 cin >> anio;

 if ( Bisiesto( anio ) )
 // Nota: If solo evalua true o false
 cout << anio << " es un anio bisiesto." << endl;
 else // es decir, si es false
 cout << anio << " no es un anio bisiesto." << endl;
 
 return 0;
 }                // Cierra main

 ////////////////////////////////////////////////////
 // FUNCION BISIESTO
 ////////////////////////////////////////////////////
 
 bool Bisiesto( int a  )
 // Esta funcion regresa un valor booleano true
 // si el anio es bisiesto y regresa el valor 
 // booleano false si el anio no es bisiesto

 {     // Abre funcion Bisiesto

 if ( 0 != a%4 )
 return false;
 else if ( 0 != a % 100 )
 return true;
 else if ( 0 != a % 400 )
 return false;
 else 
 return true;
 }     // Cierra funcion Bisiesto
Aquí una ejecución del programa:

Introduzca un anio y sabra si es bisiesto:
2004
2004 es un anio bisiesto.



2 comentarios:

  1. antes que nada muchas gracias
    solo que al ejecutar el programa e introdusco un numero para saber si el año es bisiesto o no se cierra y ya no si si es bisiesto que hago?

    ResponderEliminar
    Respuestas
    1. ¡Hola, Oscar! Aquí el asunto es que seguro estás usando windows, y por lo tanto, lo que sucede es que la ejecución es tan rápida que no puedes verla.
      Una opción, si es que usas windows, es que pongas, al final de la función main, pero antes de la instrucción return 0, la línea:
      system("PAUSE");
      lo que estás haciendo es una llamada al sistema, con éso se detiene la pantalla y sólo das enter para continuar.
      Otra opción es que pongas, al final del programa, antes de cerrar main cin.get(); cin.get();

      Saludos.

      Eliminar

Related Posts Plugin for WordPress, Blogger...