elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Usando Git para manipular el directorio de trabajo, el índice y commits (segunda parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  Ejercicios
| | | |-+  Problema ejericio 104 bisiesto
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Problema ejericio 104 bisiesto  (Leído 25,674 veces)
viruss1362

Desconectado Desconectado

Mensajes: 204



Ver Perfil WWW
Problema ejericio 104 bisiesto
« 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?


En línea

Más vale parecer un idiota con la boca cerrada, que abrir la boca y demostrar que lo eres

www.equipome.com
Crack_X
Anti-War
Ex-Staff
*
Desconectado Desconectado

Mensajes: 2.322


Peace & Love


Ver Perfil WWW
Re: Problema ejericio 104 bisiesto
« Respuesta #1 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 ?


En línea

Shit loads of money spend to show us wrong from right. Say no to war


Yasser Has Things To Say
WarZone
Cobac
Ex-Staff
*
Desconectado Desconectado

Mensajes: 5.465


Still In Development


Ver Perfil
Re: Problema ejericio 104 bisiesto
« Respuesta #2 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
En línea

PIV 2533 @ 2720Mhz | 512MB DRR333 @ 358 | 160 Gb + 40 Gb Seagate Barracuda

En la Edad Media la Iglesia robaba con los diezmos. En el siglo XXI la SGAE roba con sus cánones.
viruss1362

Desconectado Desconectado

Mensajes: 204



Ver Perfil WWW
Re: Problema ejericio 104 bisiesto
« Respuesta #3 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
En línea

Más vale parecer un idiota con la boca cerrada, que abrir la boca y demostrar que lo eres

www.equipome.com
Cobac
Ex-Staff
*
Desconectado Desconectado

Mensajes: 5.465


Still In Development


Ver Perfil
Re: Problema ejericio 104 bisiesto
« Respuesta #4 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 ;)
En línea

PIV 2533 @ 2720Mhz | 512MB DRR333 @ 358 | 160 Gb + 40 Gb Seagate Barracuda

En la Edad Media la Iglesia robaba con los diezmos. En el siglo XXI la SGAE roba con sus cánones.
Nehemoth

Desconectado Desconectado

Mensajes: 27


Ver Perfil WWW
Re: Problema ejericio 104 bisiesto
« Respuesta #5 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
En línea

When once you have tasted flight, you will forever walk the earth with your eyes turned skyward, for there you have been and there you will always long to return.

— Leonardo da Vinci
Nehemoth

Desconectado Desconectado

Mensajes: 27


Ver Perfil WWW
Re: Problema ejericio 104 bisiesto
« Respuesta #6 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();
}
En línea

When once you have tasted flight, you will forever walk the earth with your eyes turned skyward, for there you have been and there you will always long to return.

— Leonardo da Vinci
Nehemoth

Desconectado Desconectado

Mensajes: 27


Ver Perfil WWW
Re: Problema ejericio 104 bisiesto
« Respuesta #7 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();
}
En línea

When once you have tasted flight, you will forever walk the earth with your eyes turned skyward, for there you have been and there you will always long to return.

— Leonardo da Vinci
Drmaloy

Desconectado Desconectado

Mensajes: 7



Ver Perfil
Re: Problema ejericio 104 bisiesto
« Respuesta #8 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
« Última modificación: 10 Febrero 2008, 21:04 pm por drmaloy » En línea

Oh, yes! fill the churches with dirty thoughts! Introduce honesty to the white house! Write letters in dead languages to people you've never met! Paint filthy words on the foreheads of children! Burn your credit cards and wear high heels! Asylum doors stand open! Fill the suburbs with murder and rape! Divine madness! Let there be ecstacy, ecstacy in the streets! Laugh and the world laughs with yo
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines