Anda di halaman 1dari 2

Tcnicas de Programao 2013-2014

Ficha 2

Objectivos

Usar estruturas na resoluo de problemas.

Enunciado:

Crie uma biblioteca com o nome Data e nela defina uma estrutura com o nome Data para representar datas no formato (dia, ms, ano). Nessa biblioteca faa funes para: 1. Data* cria(int dia, int mes, int ano); Devolve um ponteiro para uma estrutura do tipo

Data se os parmetros formarem uma data vlida e NULL se formarem uma data invlida Um data invlida pode ser 30/2/2012 ou 40/3/2021. Relembre-se que um ano bissexto se for divisvel por 4 ou divisvel por 400, mas no por 100. 2. int compara(const Data *d1, const Data *d2); Devolve -1 se d1 for menor que d2.

Devolve 1 se d1 for maior que d2. Devolve 0 se forem iguais.


3.

int dif(const Data *d1, const Data *d2); Devolve o numero de dias que separam as

duas datas.
4.

void soma(Data *d, int dias); Acrescenta x dias data passada por parmetro. Se o

parmetro for negativo feita uma subtraco.


5.

int feriado(const Data *d); Devolve 1 se for feriado e 0 caso contrrio.

Feriados fixos: 1 de Janeiro Ano Novo 25 de Abril Dia da Liberdade 1 de Maio Dia do Trabalhador 10 de Junho Dia de Portugal 15 de Agosto Assuno de Maria 5 de Outubro Implantao da Repblica 1 de Novembro Dia de Todos os Santos
Tcnicas de Programao

1 de Dezembro Restaurao da Repblica 8 de Dezembro Imaculada Conceio 25 de Natal Dia de Natal Feriados Moveis: Carnaval 47 dias antes da Pscoa Sexta-Feira Santa 2 dias antes da Pscoa Corpo de Deus 60 dias aps a Pascoa Pscoa Dado pelo seguinte Algoritmo
a = MOD(ANO;19) b = ANO \ 100 c = MOD(ANO;100) d = b \ 4 e = MOD(b;4) f = (b + 8) \ 25 g = (b - f + 1) \ 3 h = MOD((19 a + b - d - g + 15);30) i = c \ 4 k = MOD(c;4) L = MOD((32 + 2 e + 2 i - h - k);7) m = (a + 11 h + 22 L) \ 451 MES = (h + L - 7 m + 114) \ 31 DIA = MOD((h + L - 7 m + 114);31) + 1 Nota: MOD resto da diviso inteira \ Diviso inteira

6.

int diaSemana(const Data *d): Devolve o dia da semana 1 domingo, 2 segunda, 3

tera, 4 quarta, 5 quinta, 6 sexta, 7 sabado


7.

void avancaProxima(Data *d, int diaSemana). O dia da semana recebe um valor

entre 1 e 7(1 Domingo, 2 Segunda, .. , 7 Sabado). A funo permite avanar at prxima segunda, prxima tera, etc.
8.

void recuaAnterior(Data *d, int diaSemana). O mesmo comportamento da funo

anterior mas para recuar.


9.

Faa um programa que calcule as proximas 13 sexta-feiras 13.

Tcnicas de Programao