Underc0de

Foros Generales => Dudas y pedidos generales => Mensaje iniciado por: hackmin en Febrero 25, 2015, 01:12:45 PM

Título: [SOLUCIONADO] Ayuda Contar los domingos
Publicado por: hackmin en Febrero 25, 2015, 01:12:45 PM
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

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) [Seleccionar]
public static void main(String[] args) {

Scanner cin = new Scanner(System.in);
System.out.println("Cual es la base: ");
int Base = cin.nextInt();
int[] Meses = {31,0,31,30,31,30,31,31,30,31,30,31};
int año = 1901;
int e = 0;
int Domingos = 0;
int SumaMeses = 0;
int SumarDias = 0;




   
    for(int i = 1;i <= 7;i++){
   
    if(año > 2000){
    System.out.println(Domingos);
    return;
    }
   
   
    if(i == 1){
   
    if(año % 4 == 0 && año % 100 != 0){
        Meses[1] = 29;
       
        }
        if(año % 4 == 0 && año % 100 == 0){
        Meses[1] = 28;
        }
        if(año % 4 != 0 && año % 400 != 0 ){
        Meses[1]= 28;
        }
   
    }
   
   
    if(i == 7 && SumarDias < SumaMeses){
    Domingos = Domingos + 1;
    SumarDias = SumarDias + i;
    i = 1;
    }
    if(i == 1 && SumarDias == 0)
    {
    for(int x = 0; x <= Meses.length-1;x++){
   
    SumaMeses = Meses[x] + SumaMeses;
   
    }
    }
    if(SumarDias > SumaMeses && SumaMeses < 366){
    Domingos = Domingos - 1;
    }
   
    if(SumarDias > SumaMeses ){
          año = año +  1;
          i = 0;
          SumarDias = 0;
          SumaMeses = 0;
    }
   
   

    }
}
}
   
Título: Re:Ayuda Contar los domingos
Publicado por: 79137913 en Febrero 25, 2015, 02:20:42 PM
HOLA!!!

Código (java) [Seleccionar]
import java.util.*;

/** DateDiff -- compute the difference between two dates.
*/
public class DateDiff {
   public static void main(String[] av) {
      /** old date */
      Date d1 = new GregorianCalendar(1900,01,01,23,59).getTime();

      /** newer date */
      Date d2 = new GregorianCalendar(2000,12,31,23,59).getTime();

      // Get msec from each, and subtract.
      long diff = d2.getTime() - d1.getTime();

      System.out.println( (diff / (1000*60*60*24)) + " days.");
   }
}


Si mi calculo  no falla son 36899 dias.

GRACIAS POR LEER!!!
Título: Re:Ayuda Contar los domingos
Publicado por: hackmin en Febrero 25, 2015, 03:00:02 PM
Mirando y mirando el código, creo y puedo decir con certeza que el fallo posiblemente este aquí:

Código (java) [Seleccionar]
if(SumarDias > SumaMeses && SumaMeses < 366){
    Domingos = Domingos - 1;
    }


El problema es que no se como arreglar esa línea, estoy bloqueado jejeje-
Amigo tu respuesta esta mal: 36899

Esa no es...
Título: Re:Ayuda Contar los domingos
Publicado por: 79137913 en Febrero 25, 2015, 03:21:18 PM
HOLA!!!

No suponia ayudarte con tu codigo solo mostrarte una manera mas limpia de sacar la diferencia de dias, 36899 no es la cantidad de domingos, es la cantidad de dias.

No pensabas que iba a hacer tu tarea no?

GRACIAS POR LEER!!!
Título: Re:Ayuda Contar los domingos
Publicado por: hackmin en Febrero 25, 2015, 03:33:12 PM
No tienes permitido ver enlaces. Registrate o Entra a tu cuenta
HOLA!!!

No suponia ayudarte con tu codigo solo mostrarte una manera mas limpia de sacar la diferencia de dias, 36899 no es la cantidad de domingos, es la cantidad de dias.

No pensabas que iba a hacer tu tarea no?

GRACIAS POR LEER!!!
En ningun momento te dije que me la hicieras, realmente no quiero, pero mas bien creo que el error de mi código esta en la linea que te dije arriba, simplemente eso amigo, y creo que es eso, ahora lo estoy mirando y si no puedo pues miro ya el código que pusistes arriba
Título: Re:Ayuda Contar los domingos
Publicado por: hackmin en Febrero 26, 2015, 05:16:04 PM
a hice el ejercicio y me dio 171 :D

Se que el código que ponga, estará mal organizado, no podía usar métodos...para los proximos ejercicios intentare hacerlo mejor...

Gracias  por perder minutos de su vida en mi, te estoy agradecido compañero... Bueno espero que no te dañe la vista mi código :D

Tambien te quiero decir que el problema lo entendí mal y era hacer un programa que cuente ¿Cuántos domingos cayó en el primer día del mes durante el siglo XX?

Código (java) [Seleccionar]
[HIGHLIGHT="Java"]public class DomingoFinal {


public static void main(String[] args) {

int[] Meses = {31,28,31,30,31,30,31,31,30,31,30,31};
int[] NombreMeses = {1,2,3,4,5,6,7,8,9,10,11,12};
int año = 1901;
int e = 0;
int A = 0;
int B = 50;
int C = -1;
int D = 6;
int E = 1;
int Resultado = 0;
int Domingos = 0;
String NombreMes = "";


for(int i = 1; i <= 12;i++){



if(i == NombreMeses[0]){
e = e + 1;
NombreMes = "Enero";
D = 6;
}
if(i == NombreMeses[1]){
e = e + 1;
NombreMes = "Febrero";
D = 2;
}
if(i == NombreMeses[2]){
e = e + 1;
NombreMes = "Marzo";
D = 2;
}
if(i == NombreMeses[3]){
e = e + 1;
NombreMes = "Abril";
D = 5;
}
if(i == NombreMeses[4]){
e = e + 1;
NombreMes = "Mayo";
D = 0;
}
if(i == NombreMeses[5]){
e = e + 1;
NombreMes = "Junio";
D = 3;
}
if(i == NombreMeses[6]){
e = e + 1;
NombreMes = "Julio";
D = 5;
}
if(i == NombreMeses[7]){
e = e + 1;
NombreMes = "Agosto";
D = 1;
}
if(i == NombreMeses[8]){
e = e + 1;
NombreMes = "Septiembre";
D = 4;
}
if(i == NombreMeses[9]){
e = e + 1;
NombreMes = "Octubre";
D = 6;
}
if(i == NombreMeses[10]){
e = e + 1;
NombreMes = "Noviembre";
D = 2;
}
if(i == NombreMeses[11]){
e = e + 1;
NombreMes = "Diciembre";
D = 4;
}

//Operaciones Enero
if(NombreMes == "Enero"){
if(año % 4 == 0 && año % 100 == 0){
Meses[1] = 28;
}
if(año % 4 == 0 && año % 100 == 0 && año % 400 == 0){
Meses[1] = 29;
}
if(año % 4 != 0 && año % 100 != 0 && año % 400 != 0){
Meses[1] = 28;
}
if(año >= 1900 && año <= 2000){
    A = 1;
    }
    if(año >=2000 && año <=2099){
    A = 0;
    }
   
    // Fin Opcion A
   
    //Opcion B
    if(año >= 2000 && año < 3000){
    B = (año - 2000);
    B = B / 4;
    B = (año - 2000) + B;
    }
    if(año >= 1900 && año < 2000){
    B = (año - 1900);
    B = B / 4;
    B = (año - 1900) + B;
    }
    // FIN DE OPCION B
   
    // Opcion C
    if(Meses[1] == 29){
    C = -1;
    }
    else{
    C = 0;
    }
    //FIN de opcion C
    Resultado = (A + B + C + D + E)%7;
if(Resultado == 0 ){
Domingos = Domingos + 1;
}
}

//Operaciones Febrero

if(NombreMes == "Febrero"){
if(año % 4 == 0 && año % 100 == 0){
Meses[1] = 28;
}
if(año % 4 == 0 && año % 100 == 0 && año % 400 == 0){
Meses[1] = 29;
}
if(año % 4 != 0 && año % 100 != 0 && año % 400 != 0){
Meses[1] = 28;
}
if(año >= 1900 && año <= 2000){
    A = 1;
    }
    if(año >=2000 && año <=2099){
    A = 0;
    }
   
    // Fin Opcion A
   
    //Opcion B
    if(año >= 2000 && año < 3000){
    B = (año - 2000);
    B = B / 4;
    B = (año - 2000) + B;
    }
    if(año >= 1900 && año < 2000){
    B = (año - 1900);
    B = B / 4;
    B = (año - 1900) + B;
    }
    // FIN DE OPCION B
   
    // Opcion C
    if(Meses[1] == 29){
    C = -1;
    }
    else{
    C = 0;
    }
    //FIN de opcion C
    Resultado = (A + B + C + D + E)%7;
if(Resultado == 0 ){
Domingos = Domingos + 1;
}

}

// Operaciones marzo

if(NombreMes == "Marzo"){
if(año % 4 == 0 && año % 100 == 0){
Meses[1] = 28;
}
if(año % 4 == 0 && año % 100 == 0 && año % 400 == 0){
Meses[1] = 29;
}
if(año % 4 != 0 && año % 100 != 0 && año % 400 != 0){
Meses[1] = 28;
}
if(año >= 1900 && año <= 2000){
    A = 1;
    }
    if(año >=2000 && año <=2099){
    A = 0;
    }
   
    // Fin Opcion A
   
    //Opcion B
    if(año >= 2000 && año < 3000){
    B = (año - 2000);
    B = B / 4;
    B = (año - 2000) + B;
    }
    if(año >= 1900 && año < 2000){
    B = (año - 1900);
    B = B / 4;
    B = (año - 1900) + B;
    }
    // FIN DE OPCION B
   
    // Opcion C
    if(Meses[1] == 29){
    C = -1;
    }
    else{
    C = 0;
    }
    //FIN de opcion C
    Resultado = (A + B + C + D + E)%7;
if(Resultado == 0 ){
Domingos = Domingos + 1;
}

}



if(NombreMes == "Abril"){
if(año % 4 == 0 && año % 100 == 0){
Meses[1] = 28;
}
if(año % 4 == 0 && año % 100 == 0 && año % 400 == 0){
Meses[1] = 29;
}
if(año % 4 != 0 && año % 100 != 0 && año % 400 != 0){
Meses[1] = 28;
}
if(año >= 1900 && año <= 2000){
    A = 1;
    }
    if(año >=2000 && año <=2099){
    A = 0;
    }
   
    // Fin Opcion A
   
    //Opcion B
    if(año >= 2000 && año < 3000){
    B = (año - 2000);
    B = B / 4;
    B = (año - 2000) + B;
    }
    if(año >= 1900 && año < 2000){
    B = (año - 1900);
    B = B / 4;
    B = (año - 1900) + B;
    }
    // FIN DE OPCION B
   
    // Opcion C
    if(Meses[1] == 29){
    C = -1;
    }
    else{
    C = 0;
    }
    //FIN de opcion C
    Resultado = (A + B + C + D + E)%7;
if(Resultado == 0 ){
Domingos = Domingos + 1;
}

}




if(NombreMes == "Mayo"){
if(año % 4 == 0 && año % 100 == 0){
Meses[1] = 28;
}
if(año % 4 == 0 && año % 100 == 0 && año % 400 == 0){
Meses[1] = 29;
}
if(año % 4 != 0 && año % 100 != 0 && año % 400 != 0){
Meses[1] = 28;
}
if(año >= 1900 && año <= 2000){
    A = 1;
    }
    if(año >=2000 && año <=2099){
    A = 0;
    }
   
    // Fin Opcion A
   
    //Opcion B
    if(año >= 2000 && año < 3000){
    B = (año - 2000);
    B = B / 4;
    B = (año - 2000) + B;
    }
    if(año >= 1900 && año < 2000){
    B = (año - 1900);
    B = B / 4;
    B = (año - 1900) + B;
    }
    // FIN DE OPCION B
   
    // Opcion C
    if(Meses[1] == 29){
    C = -1;
    }
    else{
    C = 0;
    }
    //FIN de opcion C
    Resultado = (A + B + C + D + E)%7;
if(Resultado == 0 ){
Domingos = Domingos + 1;
}

}
if(NombreMes == "Junio"){
if(año % 4 == 0 && año % 100 == 0){
Meses[1] = 28;
}
if(año % 4 == 0 && año % 100 == 0 && año % 400 == 0){
Meses[1] = 29;
}
if(año % 4 != 0 && año % 100 != 0 && año % 400 != 0){
Meses[1] = 28;
}
if(año >= 1900 && año <= 2000){
    A = 1;
    }
    if(año >=2000 && año <=2099){
    A = 0;
    }
   
    // Fin Opcion A
   
    //Opcion B
    if(año >= 2000 && año < 3000){
    B = (año - 2000);
    B = B / 4;
    B = (año - 2000) + B;
    }
    if(año >= 1900 && año < 2000){
    B = (año - 1900);
    B = B / 4;
    B = (año - 1900) + B;
    }
    // FIN DE OPCION B
   
    // Opcion C
    if(Meses[1] == 29){
    C = -1;
    }
    else{
    C = 0;
    }
    //FIN de opcion C
    Resultado = (A + B + C + D + E)%7;
if(Resultado == 0 ){
Domingos = Domingos + 1;
}

}


if(NombreMes == "Julio"){
if(año % 4 == 0 && año % 100 == 0){
Meses[1] = 28;
}
if(año % 4 == 0 && año % 100 == 0 && año % 400 == 0){
Meses[1] = 29;
}
if(año % 4 != 0 && año % 100 != 0 && año % 400 != 0){
Meses[1] = 28;
}
if(año >= 1900 && año <= 2000){
    A = 1;
    }
    if(año >=2000 && año <=2099){
    A = 0;
    }
   
    // Fin Opcion A
   
    //Opcion B
    if(año >= 2000 && año < 3000){
    B = (año - 2000);
    B = B / 4;
    B = (año - 2000) + B;
    }
    if(año >= 1900 && año < 2000){
    B = (año - 1900);
    B = B / 4;
    B = (año - 1900) + B;
    }
    // FIN DE OPCION B
   
    // Opcion C
    if(Meses[1] == 29){
    C = -1;
    }
    else{
    C = 0;
    }
    //FIN de opcion C
    Resultado = (A + B + C + D + E)%7;
if(Resultado == 0 ){
Domingos = Domingos + 1;
}

}



if(NombreMes == "Agosto"){
if(año % 4 == 0 && año % 100 == 0){
Meses[1] = 28;
}
if(año % 4 == 0 && año % 100 == 0 && año % 400 == 0){
Meses[1] = 29;
}
if(año % 4 != 0 && año % 100 != 0 && año % 400 != 0){
Meses[1] = 28;
}
if(año >= 1900 && año <= 2000){
    A = 1;
    }
    if(año >=2000 && año <=2099){
    A = 0;
    }
   
    // Fin Opcion A
   
    //Opcion B
    if(año >= 2000 && año < 3000){
    B = (año - 2000);
    B = B / 4;
    B = (año - 2000) + B;
    }
    if(año >= 1900 && año < 2000){
    B = (año - 1900);
    B = B / 4;
    B = (año - 1900) + B;
    }
    // FIN DE OPCION B
   
    // Opcion C
    if(Meses[1] == 29){
    C = -1;
    }
    else{
    C = 0;
    }
    //FIN de opcion C
    Resultado = (A + B + C + D + E)%7;
if(Resultado == 0 ){
Domingos = Domingos + 1;
}

}


if(NombreMes == "Septiembre"){
if(año % 4 == 0 && año % 100 == 0){
Meses[1] = 28;
}
if(año % 4 == 0 && año % 100 == 0 && año % 400 == 0){
Meses[1] = 29;
}
if(año % 4 != 0 && año % 100 != 0 && año % 400 != 0){
Meses[1] = 28;
}
if(año >= 1900 && año <= 2000){
    A = 1;
    }
    if(año >=2000 && año <=2099){
    A = 0;
    }
   
    // Fin Opcion A
   
    //Opcion B
    if(año >= 2000 && año < 3000){
    B = (año - 2000);
    B = B / 4;
    B = (año - 2000) + B;
    }
    if(año >= 1900 && año < 2000){
    B = (año - 1900);
    B = B / 4;
    B = (año - 1900) + B;
    }
    // FIN DE OPCION B
   
    // Opcion C
    if(Meses[1] == 29){
    C = -1;
    }
    else{
    C = 0;
    }
    //FIN de opcion C
    Resultado = (A + B + C + D + E)%7;
if(Resultado == 0 ){
Domingos = Domingos + 1;
}

}



if(NombreMes == "Octubre"){
if(año % 4 == 0 && año % 100 == 0){
Meses[1] = 28;
}
if(año % 4 == 0 && año % 100 == 0 && año % 400 == 0){
Meses[1] = 29;
}
if(año % 4 != 0 && año % 100 != 0 && año % 400 != 0){
Meses[1] = 28;
}
if(año >= 1900 && año <= 2000){
    A = 1;
    }
    if(año >=2000 && año <=2099){
    A = 0;
    }
   
    // Fin Opcion A
   
    //Opcion B
    if(año >= 2000 && año < 3000){
    B = (año - 2000);
    B = B / 4;
    B = (año - 2000) + B;
    }
    if(año >= 1900 && año < 2000){
    B = (año - 1900);
    B = B / 4;
    B = (año - 1900) + B;
    }
    // FIN DE OPCION B
   
    // Opcion C
    if(Meses[1] == 29){
    C = -1;
    }
    else{
    C = 0;
    }
    //FIN de opcion C
    Resultado = (A + B + C + D + E)%7;
if(Resultado == 0 ){
Domingos = Domingos + 1;
}

}

if(NombreMes == "Noviembre"){
if(año % 4 == 0 && año % 100 == 0){
Meses[1] = 28;
}
if(año % 4 == 0 && año % 100 == 0 && año % 400 == 0){
Meses[1] = 29;
}
if(año % 4 != 0 && año % 100 != 0 && año % 400 != 0){
Meses[1] = 28;
}
if(año >= 1900 && año <= 2000){
    A = 1;
    }
    if(año >=2000 && año <=2099){
    A = 0;
    }
   
    // Fin Opcion A
   
    //Opcion B
    if(año >= 2000 && año < 3000){
    B = (año - 2000);
    B = B / 4;
    B = (año - 2000) + B;
    }
    if(año >= 1900 && año < 2000){
    B = (año - 1900);
    B = B / 4;
    B = (año - 1900) + B;
    }
    // FIN DE OPCION B
   
    // Opcion C
    if(Meses[1] == 29){
    C = -1;
    }
    else{
    C = 0;
    }
    //FIN de opcion C
    Resultado = (A + B + C + D + E)%7;
if(Resultado == 0 ){
Domingos = Domingos + 1;
}

}


if(NombreMes == "Diciembre"){
if(año % 4 == 0 && año % 100 == 0){
Meses[1] = 28;
}
if(año % 4 == 0 && año % 100 == 0 && año % 400 == 0){
Meses[1] = 29;
}
if(año % 4 != 0 && año % 100 != 0 && año % 400 != 0){
Meses[1] = 28;
}
if(año >= 1900 && año <= 2000){
    A = 1;
    }
    if(año >=2000 && año <=2099){
    A = 0;
    }
   
    // Fin Opcion A
   
    //Opcion B
    if(año >= 2000 && año < 3000){
    B = (año - 2000);
    B = B / 4;
    B = (año - 2000) + B;
    }
    if(año >= 1900 && año < 2000){
    B = (año - 1900);
    B = B / 4;
    B = (año - 1900) + B;
    }
    // FIN DE OPCION B
   
    // Opcion C
    if(Meses[1] == 29){
    C = -1;
    }
    else{
    C = 0;
    }
    //FIN de opcion C
    Resultado = (A + B + C + D + E)%7;
if(Resultado == 0 ){
Domingos = Domingos + 1;
}

}

  if(i == 12 && año >= 1901 && año < 1999){
año = año + 1;
i = 0;
}
         



} // Esto es el for

System.out.println(Domingos);

}

}

[/HIGHLIGHT]