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:
  • \text{dia\_nasc}: dia de nascimento (inteiro)
  • \text{mes\_nasc}: mês de nascimento (inteiro)
  • \text{ano\_nasc}: ano de nascimento (inteiro)
  • \text{dia\_atual}: dia do dia atual (inteiro)
  • \text{mes\_atual}: mês do dia atual (inteiro)
  • \text{ano\_atual}: 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 é \text{ano\_atual} - \text{ano\_nasc}; se ainda não fez, a idade é um ano a menos. A assinatura exigida é:
\text{int calcular\_idade(int dia\_nasc, int mes\_nasc, int ano\_nasc, int dia\_atual, int mes\_atual, int ano\_atual)}

Passo 2

Ideia geral do método (explicada sem código ainda): primeiro calculamos a diferença entre os anos:
\text{idade\_preliminar} = \text{ano\_atual} - \text{ano\_nasc}.
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 \text{idade\_preliminar}.

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):
  1. Compare \text{mes\_atual} com \text{mes\_nasc}:
    • Se \text{mes\_atual} < \text{mes\_nasc} então o aniversário ainda não ocorreu neste ano.
    • Se \text{mes\_atual} > \text{mes\_nasc} então o aniversário já ocorreu neste ano.
    • Se \text{mes\_atual} = \text{mes\_nasc} então precisamos comparar dias.
  2. Quando os meses são iguais, compare \text{dia\_atual} com \text{dia\_nasc}:
    • Se \text{dia\_atual} < \text{dia\_nasc} então a pessoa ainda não fez aniversário.
    • Caso contrário ( \text{dia\_atual} \ge \text{dia\_nasc}) ela já fez aniversário (no dia igual conta como já ter feito).

Passo 5

Exemplos numéricos ilustrativos (faça-os mentalmente na prova para checar):
  • Exemplo A: nasceu em \text{15/06/2000} e hoje é \text{14/06/2025}.
    • \text{idade\_preliminar} = 2025 - 2000 = 25.
    • \text{mes\_atual} = 6 = \text{mes\_nasc}, mas \text{dia\_atual} = 14 < \text{dia\_nasc} = 15 → ainda não fez aniversário → idade final = 25 - 1 = 24.
  • Exemplo B: nasceu em \text{15/06/2000} e hoje é \text{15/06/2025}.
    • \text{idade\_preliminar} = 25.
    • \text{mes\_atual} = \text{mes\_nasc} e \text{dia\_atual} = \text{dia\_nasc} → já fez aniversário → idade final = 25.
  • Exemplo C (mês diferente): nasceu \text{10/03/1990} e hoje é \text{20/11/2024}.
    • \text{idade\_preliminar} = 2024 - 1990 = 34.
    • \text{mes\_atual} = 11 > \text{mes\_nasc} = 3 → já fez aniversário → idade final = 34.

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 \text{29/02} não terá \text{dia\_atual} = 29 em fevereiro; isso fará com que a função considere que o aniversário ainda não ocorreu até \text{01/03}. 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;
}

Exercícios relacionados