Cálculo de feriados móveis em Gambas3

Publicado por Alvaro G B Rodrigues em 26/03/2018

[ Hits: 2.448 ]

 


Cálculo de feriados móveis em Gambas3



Os feriados móveis no Brasil são os seguintes:
  • Páscoa
  • Sexta-feira Santa
  • Carnaval
  • Corpus Chisti

Para calcular a data em que eles ocorrem, basta calcular o dia da Páscoa. Os demais são obtidos pela adição ou subtração de um determinado número de dias: subtraindo 47 dias do dia da Páscoa obtemos o dia correspondente à terça-feira de Carnaval; subtraindo 2 dias do dia da Páscoa obtemos a sexta-feira Santa e somando 60 dias ao dia da Páscoa obtemos o dia correspondente a Corpus Christi.

Para calcular o dia da Páscoa foi utilizado o algoritmo de Meeus/Jones/Butcher.

Descrição do aplicativo

1. Entrar no Gambas3.

2. Escolher New Project.

3. Selecionar Graphical application e clicar em Next.

4. Selecionar a pasta onde vai ficar o programa e clicar Next.

5. Informar o nome do projeto (Project name), por exemplo: FeriadosMoveis

6. Informar um título para o projeto, por exemplo: Cálculo do dia da Páscoa.

7. Clicar em OK.

8. Na tela que vai surgir clicar dua vezes em FMain. Vai abrir uma área para desenho do formulário.

No formulário deverão ser incluídos:
  • 5 Labeks
  • 5 TextBox: txtAno, txtCarna, txtSexta. txtPascoa e txtCorpus
  • 1 Button: Button1

Abaixo segue o código, composto de uma função (FeriadoMovel) e um evento Button1_Click.

A função implementa o algoritmo de Meeus/Jones/Butcher e o evento calcula as demais datas usando, para isso, a função interna DateAdd(data, gb.day, numero de dias), onde:
  • data -> data base, no caso o dia da Páscoa;
  • gb.day -> constante interna que especifica que o cálculo será feto utilizando quantidade de dias;
  • número de dias: uma quantidade positiva ou negativa de dias.

Pra utilizar a função DateAdd é necessário incorporar o componente gb,vb às propriedades do projeto.

Código fonte do aplicativo para cálculo de feriados móveis.

' Gambas class file

   Public Function FeriadoMovel(Ano As Integer) As Date

            Dim a, b, c, d, e, f, g, h, i, k, l, m, mes, dia As Integer
            Dim Pascoa As Date

            a = Ano Mod 19
            b = Int(Ano / 100)
            c = Ano Mod 100
            d = Int(b / 4)
            e = b Mod 4
            f = Int((b + 8) / 25)
            g = Int((b - f + 1) / 3)
            h = (19 * a + b - d - g + 15) Mod 30
            i = Int(c / 4)
            k = c Mod 4
            l = (32 + 2 * e + 2 * i - h - k) Mod 7
            m = Int((a + 11 * h + 22 * l) / 451)
            mes = Int((h + l - 7 * m + 114) / 31)
            dia = ((h + l - 7 * m + 114) Mod 31) + 1
            Pascoa = CDate(mes & "/" & dia & "/" & Ano)
            Return Pascoa
   End Function

Public Sub Button1_Click()

        Dim ano As Integer
        Dim pascoa As Date
        Dim sexta As Date
        Dim carna As Date
        Dim corpus As Date
        txtAno.Select()
        ano = CInt(txtAno.Text)

        pascoa = FeriadoMovel(ano)

        sexta = DateAdd(pascoa, gb.day, -2)
        carna = DateAdd(pascoa, gb.day, -47)
        corpus = DateAdd(pascoa, gb.day, 60)

        txtPascoa.Text = Format$(pascoa, "dd/mm/yyyy")
        txtCarna.Text = Format$(carna, "dd/mm/yyyy")
        txtSexta.Text = Format$(sexta, "dd/mm/yyyy")
        txtCorpus.Text = Format$(corpus, "dd/mm/yyyy")

End

Outras dicas deste autor
Nenhuma dica encontrada.
Leitura recomendada

O que fazer depois de instalar o Slackware [vídeo]

Instalação e uso do SUDO no Debian

Como instalar o Windows Live Messenger no Ubuntu Linux

tmux: melhorando a experiência com o terminal

Solução "definitiva" - Placas SIS Mirage 3 Graphics (771/671) e Wireless RTL8187B

  

Comentários
[1] Comentário enviado por removido em 26/03/2018 - 16:29h

Ali em Labeks,tu quis dizer labels?

[2] Comentário enviado por alvarogr em 27/03/2018 - 06:44h


[1] Comentário enviado por Capitao_Zap em 26/03/2018 - 16:29h

Ali em Labeks,tu quis dizer labels?


Sim, desculpem o engano.



Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts