3 (1.5). Implemente uma função em C que receba a data de nascimento e a data atual, e retorne a idade da pessoa em anos.
**** A funçāo deve considerar se a pessoa já fez aniversário no ano atual.
int calcular_idade(int dia_nasc, int mes_nasc, int ano_nasc, int dia_atual, int mes_atual, int ano_atual)
Passo 1
O enunciado pede para implementar uma função em C que receba a data de nascimento e a data atual, e retorne a idade da pessoa em anos. Os dados fornecidos (os parâmetros da função) são:
-
: dia de nascimento (inteiro) -
: mês de nascimento (inteiro) -
: ano de nascimento (inteiro) -
: dia do dia atual (inteiro) -
: mês do dia atual (inteiro) -
: ano do dia atual (inteiro)
A função deve considerar se a pessoa já fez aniversário no ano atual: se já fez, a idade é
; se ainda não fez, a idade é um ano a menos. A assinatura exigida é:
Passo 2
Ideia geral do método (explicada sem código ainda): primeiro calculamos a diferença entre os anos:
Depois precisamos verificar se, no ano atual, o aniversário já aconteceu. Para isso comparamos o mês atual com o mês de nascimento e, se os meses forem iguais, comparamos o dia atual com o dia de nascimento. Se o mês atual for menor que o mês de nascimento, ou se os meses forem iguais e o dia atual for menor que o dia de nascimento, então o aniversário ainda não ocorreu e devemos subtrair 1 de
.
Passo 3
Por que esse método funciona — explicação detalhada e didática:
- A diferença dos anos dá quantos anos se passaram desde o ano de nascimento até o ano atual, ignorando meses e dias.
- Exemplo mental: nasceu em
2000 e o ano atual é 2025 . A diferença de anos é 25 . Mas se a pessoa nasceu em junho e hoje é maio, ela ainda não completou os 25 anos — falta o mês do aniversário. Então precisamos checar mês/dia para corrigir. - Regra de decisão (em palavras): “Se ainda não chegou o aniversário neste ano, subtraio 1; caso contrário, mantenho a diferença de anos.”
Passo 4
Como comparar mês e dia passo a passo (para que você consiga fazer na prova):
- Compare
com : - Se
então o aniversário ainda não ocorreu neste ano. - Se
então o aniversário já ocorreu neste ano. - Se
então precisamos comparar dias.
- Se
- Quando os meses são iguais, compare
com : - Se
então a pessoa ainda não fez aniversário. - Caso contrário (
) ela já fez aniversário (no dia igual conta como já ter feito).
- Se
Passo 5
Exemplos numéricos ilustrativos (faça-os mentalmente na prova para checar):
- Exemplo A: nasceu em
e hoje é . -
. -
, mas → ainda não fez aniversário → idade final = .
-
- Exemplo B: nasceu em
e hoje é . -
. -
e → já fez aniversário → idade final = .
-
- Exemplo C (mês diferente): nasceu
e hoje é . -
. -
→ já fez aniversário → idade final = .
-
Passo 6
Possíveis casos-limite e observações rápidas:
- Datas inválidas (por exemplo nascimento depois da data atual) não estão explicitamente tratadas aqui porque o enunciado foi considerado bem formulado. Em provas normalmente assumimos que a data de nascimento é anterior ou igual à data atual.
- Aniversário em 29/02: com o método descrito (comparar mês e dia literalmente), em anos não bissextos uma pessoa nascida em
não terá em fevereiro; isso fará com que a função considere que o aniversário ainda não ocorreu até . Se a sua prova exige outra convenção (por exemplo considerar 28/02 como aniversário em anos não bissextos), isso teria que ser especificado. Aqui seguiremos a comparação direta mês/dia.
Passo 7
Implementação em C (código compacto e claro). Vou usar exatamente a assinatura pedida e aplicar a lógica explicada:
int calcular_idade(int dia_nasc, int mes_nasc, int ano_nasc, int dia_atual, int mes_atual, int ano_atual) {
int idade = ano_atual - ano_nasc;
if (mes_atual < mes_nasc || (mes_atual == mes_nasc && dia_atual < dia_nasc)) {
idade = idade - 1;
}
return idade;
}
Resposta
int calcular_idade(int dia_nasc, int mes_nasc, int ano_nasc, int dia_atual, int mes_atual, int ano_atual) {
int idade = ano_atual - ano_nasc;
if (mes_atual < mes_nasc || (mes_atual == mes_nasc && dia_atual < dia_nasc)) {
idade = idade - 1;
}
return idade;
}