Foros del Web » Programación para mayores de 30 ;) » Java »

[SOLUCIONADO] [Ayuda]Contar los domingos de X años

Estas en el tema de [Ayuda]Contar los domingos de X años en el foro de Java en Foros del Web. Bueno antes que nada, pido porfavor que el que me ayude no exponga el código suyo correctamente, tal vez mi código este perfectamente, pero a ...
  #1 (permalink)  
Antiguo 25/02/2015, 10:15
 
Fecha de Ingreso: noviembre-2014
Mensajes: 34
Antigüedad: 9 años, 5 meses
Puntos: 1
[Ayuda]Contar los domingos de X años

Bueno antes que nada, pido porfavor que el que me ayude no exponga el código suyo correctamente, tal vez mi código este perfectamente, pero a lo mejor no entendi lo que pide y ese era el fallo...

Expongo el problema:

Se le da la siguiente información, pero puede que prefiera hacer una investigación por sí mismo.

01 de enero 1900 fue un lunes.
Treinta días tiene septiembre,
abril, junio y noviembre.
Todo el resto tiene treinta y uno,
solo ahorro de febrero,
que tiene veintiocho años, llueva o haga sol.
Y en años bisiestos, veintinueve.
Un año bisiesto se produce en cualquier año divisible por 4, pero no en un siglo a menos que sea divisible por 400.
¿Cuántos domingos cayó en el primer día del mes durante el siglo XX (1 enero 1901 a 31 diciembre 2000)?


Mi programa dice que tiene en total desde el 1 de enero de 1901 hasta el 31 de diciembre 2000, hay en total: 5224 Domingos exactamente, ademas para ver si es cierto calcule desde 1901 hasta 1904, lo hice hasta 1904 por que el 1904 es bisiesto y yo lo calcule a mano y efectivamente, dio: 209 (Es decir que los años bisiestos tambien lo reconoce facilmente.)


Se lo puse al profesor la solución y me dijo que no, que es erronea :-\

Miren el código porfavor y deduzcan:

Código Java:
Ver original
  1. public static void main(String[] args) {
  2.  
  3.          Scanner cin = new Scanner(System.in);
  4.          System.out.println("Cual es la base: ");
  5.         int Base = cin.nextInt();
  6. int[] Meses = {31,0,31,30,31,30,31,31,30,31,30,31};
  7. int año = 1901;
  8. int e = 0;
  9. int Domingos = 0;
  10. int SumaMeses = 0;
  11. int SumarDias = 0;
  12.  
  13.  
  14.  
  15.        
  16.        
  17.         for(int i = 1;i <= 7;i++){
  18.                
  19.                 if(año > 2000){
  20.                         System.out.println(Domingos);
  21.                         return;
  22.                 }
  23.                
  24.                
  25.                 if(i == 1){
  26.                        
  27.                         if(año % 4 == 0 && año % 100 != 0){
  28.                                 Meses[1] = 29;
  29.                                
  30.                         }
  31.                         if(año % 4 == 0 && año % 100 == 0){
  32.                                 Meses[1] = 28;
  33.                         }
  34.                         if(año % 4 != 0 && año % 400 != 0 ){
  35.                                 Meses[1]= 28;
  36.                         }
  37.                        
  38.                 }
  39.                
  40.                
  41.         if(i == 7 && SumarDias < SumaMeses){
  42.                 Domingos = Domingos + 1;
  43.                 SumarDias = SumarDias + i;
  44.                 i = 1;
  45.         }
  46.         if(i == 1 && SumarDias == 0)
  47.         {
  48.                 for(int x = 0; x <= Meses.length-1;x++){
  49.                        
  50.                         SumaMeses = Meses[x] + SumaMeses;
  51.                        
  52.                 }
  53.         }
  54.         if(SumarDias > SumaMeses && SumaMeses < 366){
  55.                 Domingos = Domingos - 1;
  56.         }
  57.        
  58.         if(SumarDias > SumaMeses ){
  59.           año = año +  1;
  60.           i = 0;
  61.           SumarDias = 0;
  62.           SumaMeses = 0;
  63.         }
  64.    
  65.    
  66.  
  67.         }      
  68. }
  69. }

Saludos y muchisimas gracias por perder tu tiempo en mi, estoy realmente agredecido con esta web
  #2 (permalink)  
Antiguo 26/02/2015, 04:48
Avatar de Xerelo  
Fecha de Ingreso: mayo-2009
Mensajes: 2.175
Antigüedad: 14 años, 11 meses
Puntos: 306
Respuesta: [Ayuda]Contar los domingos de X años

A mí me salen 171, puede ser que me haya equivocado pero he cogido algunos años al azar y son correctos.

A ver, tu código desde el punto de vista de mantenibilidad es horroroso, no se puede ver claramente la estructura y es difícil de depurar.


Para trabajar con fechas te sería mucho más cómodo usar la clase GregorianCalendar, aunque no sé si está permitido usarlas en este ejercicio. De todas formas yo lo he hecho sin ella y sin dividir el código en métodos para que fuera parecido al tuyo.

Tienes que tener en cuenta que en ocasiones no se necesita un método supergenérico, parte de la programación es escribir código adaptado a las circunstancias, por lo que a veces se pueden usar "trucos" que aligeran el código y los tiempos.

En este caso he utilizado algo sencillo, si el primer día a contar es el un lunes 1, todos los domingos caerán en múltiplo de 7.

Sé que no quieres la solución (me parece genial por tu parte) pero por si te interesa una vez solucionado tu código.

http://ideone.com/xAgSAC

Para depurar tu código, te recomiendo que empieces por lo sencillo y añade trazas.

Comprueba con trazas que estás detectando correctamente todos los años bisiestos.
Pinta el mes y año cada vez que encuentres un domingo primeros de mes.
Haz una prueba con un año, después añade otro y por último 4, de esa forma habras abarcado todos los casos.

Edito:

Creo que no has leído bien el enunciado

Cita:
¿Cuántos domingos cayó en el primer día del mes durante el siglo XX (1 enero 1901 a 31 diciembre 2000)?
No que cuentes todos los domingos.
__________________
Cada vez que solucionas los problemas de alguien que no se esfuerza, piensa en que el día de mañana puede llegar a ser tu compañero de trabajo, o peor, tu jefe.

Última edición por Xerelo; 26/02/2015 a las 05:57
  #3 (permalink)  
Antiguo 26/02/2015, 09:00
 
Fecha de Ingreso: noviembre-2014
Mensajes: 34
Antigüedad: 9 años, 5 meses
Puntos: 1
Respuesta: [Ayuda]Contar los domingos de X años

Hola amigo...

171 te sale a ti desde 1901 hasta 1904? es que ami me sale 208

Si parece ser que no entendí bien el ejercicio y solo te pide todos los domingos del primer Mes, de todas manera, creo que ya logré solucionarlo sin usar métodos:

5215 domingos hay desde 1901 hasta 2000(creo que esta correcto) lo que mas me fastidia es que no hay ninguna solución en google, no existe tal programa por la red que haga esto, entonces no se cual sería la solución correcta (Esos 5215 domingos es en los 12 meses de cada año, no solo cuento el primer mes)

Ahora me quedo con la duda si lo hice mal o bien, que pena

Bueno intento el: ¿Cuántos domingos cayó en el primer día del mes durante el siglo XX?

A ver si me sale, ojala y gracias amigo de veras
  #4 (permalink)  
Antiguo 26/02/2015, 09:52
Avatar de Xerelo  
Fecha de Ingreso: mayo-2009
Mensajes: 2.175
Antigüedad: 14 años, 11 meses
Puntos: 306
Respuesta: [Ayuda]Contar los domingos de X años

171 son el número de domingos que son primero de mes, yo leí bien el enunciado.

Y si mis cuentas no fallan, del 01 de enero de 1901 al 31 de diciembre de 2000 (que es domingo) hay 5218 domingos.
__________________
Cada vez que solucionas los problemas de alguien que no se esfuerza, piensa en que el día de mañana puede llegar a ser tu compañero de trabajo, o peor, tu jefe.
  #5 (permalink)  
Antiguo 26/02/2015, 10:13
Avatar de Profesor_Falken  
Fecha de Ingreso: agosto-2014
Ubicación: Mountain View
Mensajes: 1.323
Antigüedad: 9 años, 8 meses
Puntos: 182
Respuesta: [Ayuda]Contar los domingos de X años

Buenas,

Cita:
Y si mis cuentas no fallan, del 01 de enero de 1901 al 31 de diciembre de 2000 (que es domingo) hay 5218 domingos.
Exacto, en realidad para eso no hace falta ni hacer un programa.

(((365 * 100) + 25) /7) + 1 = 5218 //1901 - 2001 (como bien dice Xerelo el ultimo dia es domingo luego sumo 1)

(((365 * 4) + 25) /7) = 208 // 1901-1904


Un saludo
__________________
If to err is human, then programmers are the most human of us

Última edición por Profesor_Falken; 26/02/2015 a las 10:20

Etiquetas: programa
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 08:51.