5)Fazer uma função que recebe um dia,um mês e um ano como parâmetros e retor- na o número de dias desde o início daquele ano.Para o dia 10 de janeiro de qual- quer ano,a função deve retornar 1.Para o dia 31 de dezembro,ela deve retornar 365 ou 366,dependendo de o ano ser ou não bissexto.Um ano é bissexto quando é múltiplo de 400 ou também quando é múltiplo de 4 e não múltiplo de 100 .

Passo 1

O problema pede uma função que, dado um dia, um mês e um ano, devolva o “número do dia” dentro daquele ano (o dia 1 de janeiro corresponde ao dia 1, o dia 2 de janeiro ao dia 2, e assim por diante). Vamos precisar de dois ingredientes principais:
  1. Um teste para saber se o ano é bissexto.
  2. A soma dos dias de todos os meses anteriores ao mês dado, mais o dia atual.

Passo 2

Para definir se um ano é bissexto, aplicamos a regra:
– É bissexto se \text{ano}\bmod 400 = 0,
– ou se \text{ano}\bmod 4 = 0 e \text{ano}\bmod 100 \neq 0.
Em notação matemática:
\text{bissexto} \;=\; (\text{ano}\bmod 400 = 0)\;\lor\;((\text{ano}\bmod 4 = 0)\land(\text{ano}\bmod 100 \neq 0)).

Passo 3

Vamos montar um vetor com o número de dias em cada mês, assumindo fevereiro com 28 dias inicialmente, e ajustar para 29 se o ano for bissexto. Em pseudocódigo:
int diasMes[12] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
if (bissexto) {
 diasMes[1] \(=29\); // fevereiro passa a ter 29 dias
}

Passo 4

Somamos os dias de todos os meses que vieram antes do mês informado. Sejam \text{mes} o mês de 1 a 12 e \text{soma} o acumulador de dias:
int soma \(=0\);
for (int i \(=0\); i < mes-1; i\(++\)) {
 soma \(+=\) diasMes[i];
}
Aqui o laço vai de i=0 (janeiro) até i=\text{mes}-2 (mês anterior ao informado).

Passo 5

Por fim, acrescentamos o dia do mês corrente:
soma \(+=\) dia;
A variável soma agora contém exatamente o número do dia dentro do ano, contando a partir de 1\circ de janeiro.

Resposta

Um possível código em C para essa função é:
int diaDoAno(int dia, int mes, int ano) {
 int diasMes[12] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
 int bissexto = (ano%\(400==0\)) || (ano%\(4==0\) && ano%100 !\(=0\));
 if (bissexto) {
 diasMes[1] \(=29\);
 }
 int soma \(=0\);
 for (int i \(=0\); i < mes-1; i\(++\)) {
 soma \(+=\) diasMes[i];
 }
 return soma + dia;
}

Exercícios relacionados