• Viernes 1 de Noviembre de 2024, 18:31

Autor Tema:  Contar Bisiestos  (Leído 1405 veces)

Gussr78

  • Nuevo Miembro
  • *
  • Mensajes: 5
    • Ver Perfil
Contar Bisiestos
« en: Lunes 13 de Diciembre de 2010, 11:04 »
0
Hola, estoy comenzando en el  mundo de la programación y como creo que suele pasar, tengo muchas dudas. Ahora estoy haciendo una practica y necesitaria un subprograma que me cuente los años bisiestos que hay entre 2 años dados.
El primero siempre es 1600
Y el segundo lo solicitamos, pero tiene que ser inferior a 3001.
Mi planteamiento es que cumpla la regla de que son bisiestos los multiplos de 4 excepto los que son multiplos de 100, o los que son multiplos de 400.
((((a%4) == 0 && ((a%100)!= 0)) || (a%400)==0))

Y lo intenté hacer así, pero no sale lo que yo pensaba, solo planteo lo principal, ya despues pondré la limitación al año 3001 etc..

int main () {
int a;
int bisis;
bisis=0;
  printf ("dime un anio  ");
  scanf ("%d",&a);
  printf ("Anios  %d",a);
  for ( int i=1600; i<=(a-1);i++) {
    if ((((a%4) == 0&& ((a%100)!= 0)) || (a%400)==0))  {
    bisis++;
    }
printf ("n Los bisiestos son %d",bisis);
}

Si alguién me puede comentar que estoy haciendo mal y orientarme el camino lo agradezco mucho.

SkullFlower

  • Miembro activo
  • **
  • Mensajes: 25
    • Ver Perfil
Re: Contar Bisiestos
« Respuesta #1 en: Lunes 13 de Diciembre de 2010, 12:02 »
0
Hola,

Mira tu error esta aquí:

Código: C
  1. for ( int i=1600; i<=(a-1);i++) {
  2. if ((((a%4) == 0&& ((a%100)!= 0)) || (a%400)==0)) {
  3.  

a es el anio que pide el programa pero ahí en el ciclo for siempre va a ser el mismo por ejemplo si pones 1700, siempre sera 1700 no va a avanzar de 1 en 1 desde 1600 hasta 1700, que es lo que quieres.

Así que tendrías que cambiar a en el if por i así ira avanzando de 1 en 1 hasta el anio que puso el usuario.

Y la condición que tienes en el if creo que también esta mal:

Cito de Wikipedia:
Citar
La regla para los años bisiestos según el calendario gregoriano es:

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

Es decir los años que sean divisibles por 4 serán bisiestos; aunque no serán bisiestos si son divisibles entre 100 (como los años 1700, 1800, 1900 y 2100) a no ser que sean divisibles por 400 (como los años 1600, 2000 ó 2400)

Código: C
  1. if(a%4==0||(i%100==0&&i%400==0))
  2.  

Aquí te dejo el código corregido, por cierto, le quite el (a-1) que tenias en el ciclo for.

Código: C
  1. #include<stdio.h>
  2. int main () {
  3.     int a;
  4.     int bisis;
  5.     bisis=0;
  6.     printf ("dime un anio ");
  7.     scanf ("%d",&a);
  8.     printf ("Anios %d",a);
  9.     for ( int i=1600; i<=a;i++) {
  10.         if (i%4==0||(i%100==0&&i%400==0))) {
  11.             bisis++;
  12.         }
  13.     }
  14.     printf ("n Los bisiestos son %d",bisis);
  15.     return 0;
  16. }
  17.  

Saludos.
« última modificación: Lunes 13 de Diciembre de 2010, 15:39 por SkullFlower »

Gussr78

  • Nuevo Miembro
  • *
  • Mensajes: 5
    • Ver Perfil
Re: Contar Bisiestos
« Respuesta #2 en: Lunes 13 de Diciembre de 2010, 15:13 »
0
Hola, muchas gracias por tu rápida respuesta y por las explicaciones, me has hecho verlo mas claro. Solo una cosita, la condicin del if estaba bien, lo comprobé en varios post antes de usarlo, y creo que se te escapó alguna a donde también iba la i que me indicastes, pero me dí cuenta y funciona perfecto.
Muchas gracias de nuevo.

Saludos

SkullFlower

  • Miembro activo
  • **
  • Mensajes: 25
    • Ver Perfil
Re: Contar Bisiestos
« Respuesta #3 en: Lunes 13 de Diciembre de 2010, 15:40 »
0
haha tienes razón en lo de la a, bueno ya lo corregí.  :D