Lista de Exercicios
5. Para conhecermos o dia da semana que corresponde a uma determinada
data, podemos aplicar o processo de Congruência de Zeller, onde o
dia da semana é calculado pela fórmula:
- DS = < (2.6 M - 0.2 ) + D + A + ( A/4 ) + ( C/4 ) - 2C >
- (0 a 6)
Onde:
- D = DIA
- M = MES (Sendo JANEIRO e FEVEREIRO considerados como 11 e 12 do ano
anterior e MARÇO=1, ABRIL=2...DEZ=10 do ano dado)
- C = SÉCULO - 1
- A = Ano do Século
- DS= Dia da Semana (0 - DOMINGO... 6-SÁBADO)
- Os parentese significam "MAIOR INTEIRO CONTIDO EM"
- Os sinais < > "MOD 7", indicam o resto da divisão
da expressão contidas dentro dos sinais < > por 7.
Escreva um programa para calcular o dia da semana a partir da data DD/MM/AAAA
lida.
- program P5;
- uses crt;
- const c = 19;
- var
- msg : string[36];
- dia : string[13];
- ds : integer;
- d, m, a : byte;
- num : string[8];
- code : integer;
- err : boolean;
- procedure erro (a : integer);
- begin
- err := true;
- clrscr;
- gotoxy(10,5);
- case a of
- 1 : msg := 'Data inválida!';
- 2 : msg := 'O ano deve estar entre 1901 e 1999!';
- 3 : msg := 'O mês deve estar entre 01 e 12!';
- 4 : msg := 'Erro no dia!';
- 5 : msg := 'Este mês não tem 31 dias!';
- 6 : msg := 'Neste ano, fevereiro só tem 28 dias!'
- end;
- highvideo;
- writeln(msg);
- sound(1000);
- delay(500);
- nosound;
- delay (1000);
- lowvideo;
- end;
- procedure tela;
- begin
- clrscr;
- gotoxy (22,2);
- highvideo;
- write ('PROGRAMA FEITO POR KARINE E MARIA DA GLORIA');
- highvideo;
- gotoxy(26,4);
- write (' CALCULA O DIA DA SEMANA');
- lowvideo;
- gotoxy (5,6);
- write ('Entre com a data desejada (DD/MM/AA): ');
- end;
- procedure ler_data(var d , m ,a: byte);
- var
- begin
- readln (num); {le a string NUM de 8 caracteres}
- val(copy(num,7,2),a,cont);{Separa o ano}
- {Verificar erro no ano}
- if cont <> 0 then
- if (a < 1) then
- val(copy(num,4,2),m,cont);{Separa o mes}
- {Verificar erro no mes}
- if cont <> 0 then
- if (m<0) or (m>12) then
- val(copy(num,1,2),d,cont);{Separa o dia}
- {Verificar erros no dia}
- if cont <> 0 then
- if (d<0) or (d>31) then
- if (d=31) and ((m=4) or (m=6) or (m=9) or (m=11)) then
- if (m=2) and ((d=29) and ((a mod 4) <> 0)) then
- else if (m=2) and (d=30) then
- {Trocar ano e/ou mes}
- if m>2 then
- else
- end;
- {Programa Principal}
- begin
- repeat
- err := false;
- tela;
- ler_data(d,m,a);
- until not err;
- gotoxy(3,10);
- ds := (((26* m - 2) div 10) + d + a + (a div 4)+ (c div 4) - (2
* c)) mod 7;
- case ds of
- 0 : dia := 'Domingo';
- 1 : dia := 'Segunda-feira';
- 2 : dia := 'Terça-feira';
- 3 : dia := 'Quarta-feira';
- 4 : dia := 'Quinta-feira';
- 5 : dia := 'Sexta-feira';
- 6 : dia := 'Sábado';
- end;
- writeln ('O dia da semana ‚: ',dia);
- repeat until keypressed;
- end.
Para retornar a tela principal clique aqui.