https://foro.gambas-es.org/viewtopic.php?f=15&t=4520&p=25793#p25793
-----------------------------------
Shell
Sabado, 11 Abril 2015, 09:59

Re: El Reto De Los Calendarios
-----------------------------------
Buena idea el uso  de la tabla.
Hay fiestas como la semana santa que se puede calcular. En este ejemplo se calcula el domingo de pascua.

[code linenumbers=false syntax=gambas]
'El algoritmo de esta aplicación permite determinar la fecha de la Pascua (día y mes).
'Es valido desde el año 1583, siguiente a la implantación del calendario Gregoriano.(15/10/1582) "dd/mm/yy".

'El calendario gregoriano acumula un error de un día al cabo de 3314 años.
'Luego el equinoccio de primavera (21 de marzo) del año 1582 + 3314 = 4896 tendra lugar el dia
'20 de marzo (un día antes)

'Por este motivo este algoritmo no es valido para calcular la Pascua de los años posteriores al 4896.
'
'Las fechas extremas de la Pascua son el 22 de marzo (cae en esta fecha si el 22 es domingo) y 25 de Abril
'(cae en esta fecha si el 20 de Marzo es plenilunio.)

'Luego la Pascua puede caer en cualquier día que se encuentre dentro de ambas fechas mencionada (35 días de variación)

Private meses As String[] = ["Enero", "Febrero", "Marzo", "Abril", "Mayo", "Junio", "Julio", "Agosto", "Septiembre", "Octubre", "Noviembre", "Diciembre"]
Private q As Integer
Private z As Integer
Private r As Integer
Private y As Integer

Public Sub _new()
  
End

Public Sub Form_Open()
  
  Me.Center
  
End

Public Sub BtnAyuda_Click()
  
  FormAyuda.ShowModal()   
  
End

Public Sub btnCalcular_Click()

  Dim a, b, c, d, e, f, g, h, i, k, j, l, m, n, x As Integer
  
  If IsNumber(txtyear.Text) Then 
    x = CInt(txtyear.Text)
  Else
    txtyear.Text = ""
    Return
  Endif
  
  If x < 1583 Or x >= (1582 + 3314) Then 
    txtyear.Text = ""
    Return  
  Endif
  
  z = x
  y = 19
  Calculo
  a = r
  
  z = x 
  y = 100
  Calculo
  b = q
  c = r
  
  z = b
  y = 4
  Calculo
  d = q
  e = r
  
  z = b + 8
  y = 25
  Calculo
  
  'Limite
  z = 32 + 2 * e + 2 * i - h - j
  y = 7
  Calculo
  k = r
  
  z = a + 11 + h + 22 * k  
  y = 451
  Calculo
  l = q
  
  z = h + k - 7 * l + 114
  y = 31
  Calculo
  m = q - 1 'resto 1 para indice 0  
  n = r
  'Limite
  f = q
  
  z = b - f + 1
  y = 3
  Calculo
  g = q
  
  z = 19 * a + b - d - g + 15
  y = 30
  Calculo
  h = r
  
  z = c
  y = 4
  Calculo
  i = q
  j = r
  
  z = 32 + 2 * e + 2 * i - h - j
  y = 7
  Calculo
  k = r
  
  z = a + 11 + h + 22 * k  
  y = 451
  Calculo
  l = q
  
  z = h + k - 7 * l + 114
  y = 31
  Calculo
  m = q - 1 'resto 1 para indice 0
  n = r
  
  Message.Info("La pascua del año " & x & " es el día " & (n + 1) & " del més de " & meses[m])
  
End

Public Sub Calculo()
  
  q = Int(z / y)  
  r = z Mod y
  
End
[/code]

Habría que restar siete días para el Domingo de Ramos.

Saludos


