Java - Determinar el miércoles de ceniza.

 
Vista:
sin imagen de perfil
Val: 9
Ha aumentado su posición en 6 puestos en Java (en relación al último mes)
Gráfica de Java

Determinar el miércoles de ceniza.

Publicado por Julian (3 intervenciones) el 27/09/2019 03:59:22
Buenas noches/días.

Me encuentro estancado en un logaritmo, el cual me pide determinar que día del año cae miércoles de ceniza. Yo me guio por medio del calendario gregoriano y el domingo de pascua, ya que el miércoles de ceniza cae 47 días antes, pero no he podido lograr calcularlo.

A = año%19
B = año%4
C = año%7
D = (19*A+24)%30
E = (2*B+4*C+6*D+5)%7
N = (22+D+E)

Así se calcula el domingo de pascua.

Si alguien me puede colaborar seria de mucha ayuda, gracias
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de pablo
Val: 607
Bronce
Ha aumentado su posición en 2 puestos en Java (en relación al último mes)
Gráfica de Java

Determinar el miércoles de ceniza.

Publicado por pablo (154 intervenciones) el 27/09/2019 15:42:15
Hola Julian, qué tal, pues bien viendo tu problema con lo del miércoles de ceniza encontré está página donde calculan de forma distinta el domingo de pascua: https://elpais.com/elpais/2017/04/12/el_aleph/1492008750_544261.html, ahora bien con el punto del domingo de pascua yo lo que haría es que a la fecha que me da le resto los 47 días para llegar ese miércoles requerido
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 9
Ha aumentado su posición en 6 puestos en Java (en relación al último mes)
Gráfica de Java

Determinar el miércoles de ceniza.

Publicado por Julian (3 intervenciones) el 27/09/2019 17:05:01
2019_09_27_10_00_12_Window

Ahí anexo el código, no sé si tanga algún error :/


La segunda imagen es otra alternativa, determinando también si el año es bisiesto o no

2019-09-27-10_04_23-Miercoles_ceniza-NetBeans-IDE-8.2
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de pablo
Val: 607
Bronce
Ha aumentado su posición en 2 puestos en Java (en relación al último mes)
Gráfica de Java

Determinar el miércoles de ceniza.

Publicado por pablo (154 intervenciones) el 28/09/2019 19:52:09
Hey qué tal Julian disculpa la demora pero bueno resolví lo de la pascua de esta forma
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
import java.util.Scanner;
 
 
public class Pascua {
 
	public static void main (String[] args) {
 
		int a, b , c , k , p , q , m ,n ,d, e, año, dias ,x;
 
		Scanner sc = new Scanner(System.in);
 
		System.out.println("Ingrese año que desea calcular");
		año = sc.nextInt();
 
		a = año % 19;
 
		b = año % 4;
 
		c = año % 7;
 
		k = año / 100;
 
		p = (13+ (8*k))/ 25;
 
		q = k / 4 ;
 
		m = (15 -p + k -q ) % 30;
 
		n = ( 4+ k -q ) % 7;
 
		d  = ((19*a) + m) % 30;
 
		e  = ((2*b) + (4*c) + (6*d) + n ) % 7;
 
		x =(11* m + 11) %30;
 
		if((22+d+e) < 32) {
			System.out.println("" + (22+d+e) + " de marzo del año " + año );
		}else {
			System.out.println(""+(d+e-9)+ " de abril " + año) ;
		}
		if(d == 29 && e == 6) {
			System.out.println("Sera el 19 de abril del " + año );
		} if( d == 28 && e ==6 && x < 19) {
			System.out.println(" 18 de abril del " + año);
		}
 
 
	}
 
}
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 9
Ha aumentado su posición en 6 puestos en Java (en relación al último mes)
Gráfica de Java

Determinar el miércoles de ceniza.

Publicado por Julian (3 intervenciones) el 29/09/2019 00:51:28
Determinar el día de pascua ya lo había hecho, pero poder determinar el miércoles de ceniza es lo que no he podido, se supone que el miércoles de ceniza es 46 (si no es bisiesto) o 47 (si es bisiesto) días antes del domingo de pascua.
Entonces es ahí donde recae mi probela, no poder tenerminar el miercoles de ceniza.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de pablo
Val: 607
Bronce
Ha aumentado su posición en 2 puestos en Java (en relación al último mes)
Gráfica de Java

Determinar el miércoles de ceniza.

Publicado por pablo (154 intervenciones) el 30/09/2019 15:45:42
Muy buenas Julian, qué tal, bueno buscando tu problema en internet y ajustando siguiendo lo que necesitabas aquí hay un nuevo código determinando sí el año es bisiesto o no aquí está el calculo de miércoles de ceniza, este código fue sacado de wikipedia el de pascua y para determinar sí el año es bisiesto o no de otra pagina para la referencia aquí están ambos códigos que utilice o las páginas de referencia

Para determinar la pascua:
https://es.wikipedia.org/wiki/Anexo:Implementaciones_del_algoritmo_de_cálculo_de_la_fecha_de_Pascua#Algoritmo_en_Java

Para determinar sí el año es bisiesto o no:

http://lineadecodigo.com/java/ano-bisiesto-en-java/

Este es el código:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
import java.util.Date;
import java.util.Calendar;
import java.util.GregorianCalendar;
 
public class Pascua {
 
    private static int M=24;
    private static int N=5;
 
    private int anno;
 
    /* Constructor de Pascua */
    public Pascua(int anno) {
        if (anno >= 1583 && anno <= 1699){
            M = 22;
            N = 2;
        }else if ( anno >=1700 && anno <= 1799){
            M = 23;
            N = 3;
        }else if ( anno >=1800 && anno <= 1899){
            M = 23;
            N = 4;
        }else if ( anno >=1900 && anno <=2099){
            M = 24;
            N = 5;
        }else if ( anno >=2100 && anno <=2199){
            M= 24;
            N= 6;
        }else if ( anno>=2200 && anno <= 2299){
            M= 25;
            N= 0;
        }
        this.anno = anno;
    }
 
 
    public  Date getFechaPascua(){
    int a,b,c,d,e,dia,mes;
 
 
    //Cálculo de residuos
    a = anno % 19;
    b = anno % 4;
    c = anno % 7;
    d = (19*a + M) % 30;
    e = (2*b+4*c+6*d + N) % 7;
 
    // Decidir entre los 2 casos:
    if (d+e < 10)  {
        dia = d+e+22;
        mes = Calendar.MARCH;
    }else{
        dia = d+e-9;
        mes = Calendar.APRIL;
    }
 
    // Excepciones especiales (según artículo)
    if (dia == 26  && mes == Calendar.APRIL)
        dia = 19;
    if (dia == 25 && mes == Calendar.APRIL && d==28 && e == 6 && a >10)
        dia = 18;
 
 
      Calendar fechaPascua = Calendar.getInstance();
      GregorianCalendar bisiesto = new GregorianCalendar();
 
      if ((this.anno % 4 == 0) && ((this.anno % 100 != 0) || (this.anno % 400 == 0))){
    	fechaPascua.set(Calendar.DAY_OF_MONTH,dia-47);
    	fechaPascua.set(Calendar.MONTH,mes);
    	fechaPascua.set(Calendar.YEAR,this.anno);
      }else {
      	fechaPascua.set(Calendar.DAY_OF_MONTH,dia-46);
    	fechaPascua.set(Calendar.MONTH,mes);
    	fechaPascua.set(Calendar.YEAR,this.anno);
      }
 
 
 
 
    return fechaPascua.getTime();
    }
 
    public static void main (String [] args){
       Pascua pascua = new Pascua(2019);
       System.out.println(java.text.DateFormat.getDateInstance().format(pascua.getFechaPascua()));
    }
}

Ahora bien que te recomiendo yo, que hagas un scanner para que el usuario pueda determinar que año quiere saber, y lo pases como parámetro en la instancia de pascua, puedes cambiarle el nombre a la clase y a la instancia; el año estará formateado ya. Comentame sí hay algo que quieras saber adicional del código.

Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar