Autor
|
Tema: Problema ejericio 104 bisiesto (Leído 26,165 veces)
|
viruss1362
|
hola tengo un problema con el ejericio 104 mi codigo es el siguiente: /* 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
Mensajes: 2.322
Peace & Love
|
- 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
|
|
|
|
Cobac
Ex-Staff
Desconectado
Mensajes: 5.465
Still In Development
|
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: 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: #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
|
perfecto Cobac  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.. 
|
|
|
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
Mensajes: 5.465
Still In Development
|
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
|
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 #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
|
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 #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
|
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 #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
Mensajes: 7
|
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. #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
|
|
|
|
|