Foro de elhacker.net

Programación => Ejercicios => Mensaje iniciado por: viruss1362 en 22 Abril 2005, 19:59 pm



Título: Problema ejericio 104 bisiesto
Publicado por: viruss1362 en 22 Abril 2005, 19:59 pm
hola tengo un problema con el ejericio 104 mi codigo es el siguiente:

Código:
/* Ejercicio 104
Escribir un programa que solicite un año e indique si es bisiesto o no
Un año es bisiesto si es múltiplo de 4 excluyendo aquellos que son múltiplo de 100 y no de 400.
- Los años exactamente divisibles entre 4 son años bisiestos.
- Los años exactamente divisibles entre 100 no son años bisiestos.
- Los años exactamente divisibles entre 400 sí son años bisiestos.
*/
#include <stdio.h>
int num;
int resto;
main()
{
printf("Escriba un año y le dire si es bisiesto o no: ");
fflush(stdin);
scanf("%d",&num);
if (num>1 && num<20000)
    {
    resto = num%4;
    if(resto == 0 && num%100 != 0)
    printf("El año es bisiesto");
    else if(num%100 == 0 && num%400 != 0)
    printf("El año no es bisiesto");
    else
    printf("El año no es bisiesto");
    }
else
{
printf("Introduzca un numero razonable");
}
getchar();
getchar();
}

Si lo probais verias k si poneis 2003 como es logico no es bisiesto pero si ponemos 2004 si es bisiesto, de momento todo bien, pero y si pongo 2000? me dice que no es bisiesto pero si lo es.. y en vuestro codigo publicado en soluciones c pasa lo mismo.. se puede arreglar o es k 2000 es un año especial?


Título: Re: Problema ejericio 104 bisiesto
Publicado por: Crack_X en 22 Abril 2005, 20:08 pm
Citar
- Los años exactamente divisibles entre 100 no son años bisiestos.

Tengo entendido que los años bisiestos son los divisibles entre 4. Pero por que no puede ser divisible entre 100, si 100 es divisible entre 4 ?


Título: Re: Problema ejericio 104 bisiesto
Publicado por: Cobac en 22 Abril 2005, 20:15 pm
Citar
Tengo entendido que los años bisiestos son los divisibles entre 4. Pero por que no puede ser divisible entre 100, si 100 es divisible entre 4 ?

lo dice en el "enunciado" que dejo soplo:

Citar
Un año es bisiesto si es múltiplo de 4 excluyendo aquellos que son múltiplo de 100 y no de 400.

cierto que esta mal el código, no me lo debi leer bien (lo siento)

ahora creo que esta bien xDD (pruebalo si quieres), el código mio sería este:

Código:
#include <stdio.h>

main()
{
int ano=0, rest=0;

    printf("Introduce el año: ");
    scanf("%d", &ano);
   
    if(ano < 0)
        printf("Años negativos no\n");
       
    else
    {
        rest = ano%4;
       
        if(ano%100 == 0 && ano%400 != 0)
                printf("El año %d no es bisiesto\n", ano);
               
        else if(rest == 0 && ano%100 != 0 || (ano%400 == 0 && ano%100 == 0))
                printf("El año %d es bisiesto!!\n", ano);
       
        else
                printf("El año %d no es bisiesto\n", ano);
    }
   
getchar();
getchar();
}

es decir primera condición si el divirlo por 100 da 0 de resto y al dividirlo por 400 da distinto no es bisiesto

y la segunda condición, si el resto da 0 y sino es disivisble por cien es bisiesto o!! que año sea divisible por 400 y por 100...

salu2


Título: Re: Problema ejericio 104 bisiesto
Publicado por: viruss1362 en 22 Abril 2005, 21:09 pm
perfecto Cobac  ;D e estado mas de 1 hora calentandome la cabeza y vas tu en 10 minutos y ale xD, es k el problema que como soy novato no sabia k podia hacer esto:
else if(rest == 0 && ano%100 != 0 || (ano%400 == 0 && ano%100 == 0))

es decir meter tantas condiciones.. yo creia k solo podia poner 2  ::) y por eso no me salia bien el programa... bueno pos nada ya esta arreglao y encima e aprendio una cosa importante, enga gracias cobac voy a seguir con los ejercicios en C que habeis puesto ... que ya se complica la cosa..  :P


Título: Re: Problema ejericio 104 bisiesto
Publicado por: Cobac en 22 Abril 2005, 21:23 pm
puedes meter las condiciones que quieras ;)

salu2

P.D.:Gracias a ti por ver el fallo del programa, si ves otro no dudes en decirlo ;)


Título: Re: Problema ejericio 104 bisiesto
Publicado por: Nehemoth en 26 Enero 2008, 16:49 pm
Hola jovenes.

Un nuevo por aqui.

Estoy tomando una clases de C++ en la univ, y me han puesto este mismo ejercicio.

Lamentablemente la forma de educacion de mi Pais deja mucho que desear, pero ese es otro tema. La cosa es que no he querido buscar el codigo para hacer este programa, pero despues de un sin numero de intentos fallidos he estado buscando para ver donde esta mi error, he dado con este tema y este codigo el cual he probado pero igual sigue mal.

Por ejemplo si entramos el año 1999 dice que es bisiesto y logico que no lo es, hasta ahora con el unico año que me ha funcionado es con el 2200 y ni siquiera e calculado mentalmente a ver si lo es.

Teniendo en cuenta lo siguiente :
- Un año divisible por 4 es bisiesto.
- Un año divisible por 100 no es bisiesto.
- Un año divisible por 400 es bisiesto.

Hasta ahora este es el codigo que he creado, pero obvio que tiene problemas y me gustaria me ayudaran a comprender mas
Código:
#include <stdio.h>


using namespace std;

int main()
{
   
    std::cout <<"*****************************************"<<endl;
    std::cout <<"*Programa Que Dice Si Un Año Es Bisiesto*"<<endl;
    std::cout <<"*****************************************"<<endl;
   
    int ano=0;
    std::cout <<"Introduzca Ano"<< endl;
    std::cin >> ano;
    if (ano % 4 == 0 && ano % 400 == 0)
                printf ("El Ano %d Es Bisiesto");
    else if (ano % 100 == 0)
                printf ("El Ano %d No Es Bisiesto");
   
return 0;
}

Gracias de antemano
PD : Estoy usando el compilador DEV-C++ version 4.9.9.2 en Windows XP SP2


Título: Re: Problema ejericio 104 bisiesto
Publicado por: Nehemoth en 26 Enero 2008, 18:00 pm
Ok he logrado mejorar un poco mi codigo y ahora me funciona con algunos años y otros no (como el 2004).

Al parecer mi problema era con la formula y la sintaxis de If no estaba poniendo el {} aunque aun no se del todo porque son necesarios.

El nuevo codigo es
Código:
#include <iostream>
#include <stdio.h>

using namespace std;

//Programa Año Bisiesto
//Grimaldy Soto
//2006-0309
//Creacion January 21 2008.....Modificacion January 21 2008
int main(int argc, char *argv[])
{
    std::cout <<"*****************************************"<<endl;
    std::cout <<"*Programa Que Dice Si Un Año Es Bisiesto*"<<endl;
    std::cout <<"*****************************************"<<endl;
   
    int ano=0;
    int rest=0;
    std::cout <<"Introduzca Ano"<< endl;
    scanf("%d", &ano);
    if(ano%4 == 0 && ano%400 == 0) {
                printf ("El ano %d es bisiesto\n", ano);
        }       
        else if (ano%100 != 0) {
                printf ("El ano %d No es bisiesto!!\n", ano);
        }
           
getchar();
getchar();
}


Título: Re: Problema ejericio 104 bisiesto
Publicado por: Nehemoth en 26 Enero 2008, 18:05 pm
Ok, ahora si creo que lo he logrado, de hecho tal parece que mi codigo ha resultado mejor que el que esta entre las respuestas de los ejercicios, pero no nos adelantemos.

Al parecer el problema de la formula esta en que el año debe ser divisible entre 4 mas sin embargo al parecer no debe ser divisible exactamente.

Favor intentar en los demas codigos con los años 2004, 2008 o 2012 y probar con este codigo lo mismo

Código:
#include <iostream>
#include <stdio.h>

using namespace std;

//Programa Año Bisiesto
//Grimaldy Soto
//2006-0309
//Creacion January 21 2008.....Modificacion January 21 2008
int main(int argc, char *argv[])
{
    std::cout <<"*****************************************"<<endl;
    std::cout <<"*Programa Que Dice Si Un Año Es Bisiesto*"<<endl;
    std::cout <<"*****************************************"<<endl;
   
    int ano=0;
    printf ("Introduzca Ano: ");
    scanf("%d", &ano);
    if(ano%4 == 0 && ano%400 && ano%100 !=0) {
                printf ("El ano %d es bisiesto\n", ano);
        }       
        else {
                printf ("El ano %d No es bisiesto!!\n", ano);
        }
           
getchar();
getchar();
}


Título: Re: Problema ejericio 104 bisiesto
Publicado por: Drmaloy en 10 Febrero 2008, 20:57 pm
Hola que tal, la verdad es que he pasado por este mismo problema , asi que he estado buscando la solucion por un par de dias. La verdad es que es un programa bastante sencillo, pero para pensar mucho y razonar de manera interesante, en fin les adjunto la solucion que he hallado...El código no es C, sino C++, pero es facilmente comprensible por los usuarios de C.

Código:
#include <iostream.h>
/*#include <conio.h>----->Si trabajas es Dev c++ es necesaria esta libreria*/
main()

{
int anho;
cout<<"Ingrese un año cualquiera: ";
cin>>anho;
if (((anho%4)==0 && (anho%100!=0)) || (anho%400==0))
{
cout<<"El año es Bisiesto";
}
else
{
cout<<"El año No es Bisiesto";
}
/*getche (); otra linea más necesaria en Dev c++*/
}

Yo lo he compilado en mi Mac, en Xcode, pero tambien es posible portarlo a Dev c++ (u otros compliadores no lo se...) agregando la libreria y el getche, en fin solo hace falta quitarle los comentarios