Cálculo domingo de páscoa

Aqui você poderá oferecer suas Contribuições, Dicas e Tutoriais (Texto ou Vídeo) que sejam de interesse de todos.

Moderador: Moderadores

Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Cálculo domingo de páscoa

Mensagem 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.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Cálculo domingo de páscoa

Mensagem 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 ) )
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Cálculo domingo de páscoa

Mensagem 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.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Cálculo domingo de páscoa

Mensagem 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).
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Cálculo domingo de páscoa

Mensagem por JoséQuintas »

Código: Selecionar todos

   nD   := Int( nCemAnos / 4 )
   nE   := nCemAnos % 4
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

Código: Selecionar todos

   nI   := Int( nRestoCemAnos / 4 )
   nK   := nRestoCemAnos % 4
A não ser que exista uma coincidência de dia de semana a cada 100 anos, ou algo do tipo.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Cálculo domingo de páscoa

Mensagem por JoséQuintas »

Melhor deixar nisso mesmo... senão vai deixar doido.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Cálculo domingo de páscoa

Mensagem 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
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Responder