Página 1 de 1
Cálculo domingo de páscoa
Enviado: 22 Abr 2021 15:46
por JoséQuintas
Estava olhando aqui pra tentar "clarear" o cálculo do domingo de páscoa.
Código: Selecionar todos
FUNCTION DomingoDePascoa( nAno )
LOCAL nA, nB, nC, nD, nE, nF, nG, nH, nI, nK, nL, nM, nMes, nDia
nA := nAno % 19
nB := Int( nAno / 100 )
nC := nAno % 100
nD := Int( nB / 4 )
nE := nB % 4
nF := Int( ( nB + 8 ) / 25 )
nG := Int( ( nB - nF + 1 ) / 3 )
nH := ( 19 * nA + nB - nD - nG + 15 ) % 30
nI := Int( nC / 4 )
nK := nC % 4
nL := ( 32 + 2 * nE + 2 * nI - nH - nK ) % 7
nM := Int( ( nA + 11 * nH + 22 * nL ) / 451 )
nMes := Int( ( nH + nL - 7 * nM + 114 ) / 31 )
nDia := ( ( nH + nL - 7 * nM + 114 ) % 31 ) + 1
RETURN Stod( StrZero( nAno, 4 ) + StrZero( nMes, 2 ) + StrZero( nDia, 2 ) )
À primeira vista, uma parte é pra simplificar o cálculo, talvez pra usar números menores e/ou fazer a mão.
Cálculo domingo de páscoa
Enviado: 22 Abr 2021 15:49
por JoséQuintas
Primeira mudança: o nome da variável pra calcular "quantos 100 anos".
Código: Selecionar todos
FUNCTION DomingoDePascoa( nAno )
LOCAL nA, nCemAnos, nC, nD, nE, nF, nG, nH, nI, nK, nL, nM, nMes, nDia
nA := nAno % 19
nCemAnos := Int( nAno / 100 )
nC := nAno % 100
nD := Int( nCemAnos / 4 )
nE := nCemAnos % 4
nF := Int( ( nCemAnos + 8 ) / 25 )
nG := Int( ( nCemAnos - nF + 1 ) / 3 )
nH := ( 19 * nA + nCemAnos - nD - nG + 15 ) % 30
nI := Int( nC / 4 )
nK := nC % 4
nL := ( 32 + 2 * nE + 2 * nI - nH - nK ) % 7
nM := Int( ( nA + 11 * nH + 22 * nL ) / 451 )
nMes := Int( ( nH + nL - 7 * nM + 114 ) / 31 )
nDia := ( ( nH + nL - 7 * nM + 114 ) % 31 ) + 1
RETURN Stod( StrZero( nAno, 4 ) + StrZero( nMes, 2 ) + StrZero( nDia, 2 ) )
Cálculo domingo de páscoa
Enviado: 22 Abr 2021 15:54
por JoséQuintas
A segunda, o resto de dividir por cem anos.
Código: Selecionar todos
FUNCTION DomingoDePascoa( nAno )
LOCAL nA, nCemAnos, nRestoCemAnos, nD, nE, nF, nG, nH, nI, nK, nL, nM, nMes, nDia
nA := nAno % 19
nCemAnos := Int( nAno / 100 )
nRestoCemAnos := nAno % 100
nD := Int( nCemAnos / 4 )
nE := nCemAnos % 4
nF := Int( ( nCemAnos + 8 ) / 25 )
nG := Int( ( nCemAnos - nF + 1 ) / 3 )
nH := ( 19 * nA + nCemAnos - nD - nG + 15 ) % 30
nI := Int( nRestoCemAnos / 4 )
nK := nRestoCemAnos % 4
nL := ( 32 + 2 * nE + 2 * nI - nH - nK ) % 7
nM := Int( ( nA + 11 * nH + 22 * nL ) / 451 )
nMes := Int( ( nH + nL - 7 * nM + 114 ) / 31 )
nDia := ( ( nH + nL - 7 * nM + 114 ) % 31 ) + 1
RETURN Stod( StrZero( nAno, 4 ) + StrZero( nMes, 2 ) + StrZero( nDia, 2 ) )
Por enquanto parei por aí.
À primeira vista tem o cálculo de anos bisextos nos 100 anos, e também fora deles, ao dividir por 4.
Cálculo domingo de páscoa
Enviado: 22 Abr 2021 16:02
por JoséQuintas
Parece algo do tipo:
Qual o dia da semana que caiu dia primeiro de abril?
Hoje é dia 22.
A cada 7 dias o dia de semana é a mesmo.
22 - 7 = 15 semana anterior, 15 - 7 = 8 semana anterior, 8 - 7 = 1 semana anterior, chegamos no dia primeiro, então dia primeiro é igual a hoje, quinta-feira.
Parece que a fórmula usa algo do tipo, pra simplificar cálculos (se é que simplifica).
Cálculo domingo de páscoa
Enviado: 22 Abr 2021 16:25
por JoséQuintas
Pensei nessa parte como sendo pra calcular anos bissextos, mas não parece ser, porque não seria encima de grupo de 100 anos.
Ou esta
A não ser que exista uma coincidência de dia de semana a cada 100 anos, ou algo do tipo.
Cálculo domingo de páscoa
Enviado: 22 Abr 2021 16:27
por JoséQuintas
Melhor deixar nisso mesmo... senão vai deixar doido.
Cálculo domingo de páscoa
Enviado: 22 Abr 2021 16:29
por JoséQuintas
É que estou olhando sobre as funções que poderia criar no MySQL.
E tentando entender algumas, até as que não dá pra entender kkkkk