Skip to content

Instantly share code, notes, and snippets.

@camaleaun
Created May 18, 2017 02:29
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save camaleaun/fd27d33bb25975040b3dec992f133fa7 to your computer and use it in GitHub Desktop.
Save camaleaun/fd27d33bb25975040b3dec992f133fa7 to your computer and use it in GitHub Desktop.
Algoritmo para obter início e fim do Horário de Verão
prog horarioverao
int inicio, fim, ano, s, dia, mes, a, b, c, d, e, f, g, h, i, k, l, m, x, dias;
logico bissexto;
bissexto <- falso;
imprima "Digite ano: ";
leia ano;
s <- ((ano - 1901) * 365 + (ano - 1901) div 4 + 274 + ((4 - ano % 4) div 4)) % 7;
inicio <- 21-s;
s <- ((ano - 1900) * 365 + (ano - 1900) div 4 + 32) % 7;
fim <- 21-s;
ano <- ano+1;
se ( ano%400 == 0 || (ano%4 == 0 && ano%100 <> 0) ) {
bissexto <- verdadeiro;
}
a <- ano%19;
b <- ano div 100;
c <- ano%100;
d <- b div 4;
e <- b%4;
f <- (b + 8) div 25;
g <- (b - f + 1) div 3;
h <- (19 * a + b - d - g + 15)%30;
i <- c div 4;
k <- c%4;
l <- (32 + 2 * e + 2 * i - h - k)%7;
m <- (a + 11 * h + 22 * l) div 451;
mes <- (h + l - 7 * m + 114) div 31;
dia <- (h + l - 7 * m + 114)%31 + 1;
dias <- dia;
para (x <- 0;x < mes;x++) {
se (x == 1 || x == 3) {
dias <- dias+31;
}
se (x == 2 && bissexto == verdadeiro) {
dias <- dias+29;
}
se (x == 2 && bissexto == falso) {
dias <- dias+28;
}
}
dias <- dias-49;
mes <- (dias div 30)+1;
para (x <- 0;x < mes;x++) {
se (x == 1 || x == 3) {
dias <- dias-31;
}
se (x == 2 && bissexto == verdadeiro) {
dias <- dias-29;
}
se (x == 2 && bissexto == falso) {
dias <- dias-28;
}
}
dia <- dias;
imprima inicio,"/10/",ano-1,"\n";
se (dia == fim && mes == 2) {
imprima fim+7,"/02/",ano,"\n";
} senao {
imprima fim,"/02/",ano,"\n";
}
fimprog
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment