Ir ao conteúdo
  • Cadastre-se

C++ Como faço para calcular a idade da pessoa


Josuke
Ir à solução Resolvido por Ansi C,

Posts recomendados

Como eu faço parar arrumar o meu codigo, eu preciso calcular a idade da pessoa em dias, a partir do nascimento e a data atual, também tenho que considerar os anos bissextos a partir dessas duas datas 

Codigo ↓

while(d<0 || m<0 || a<0)
           {if(d>31||d<1){
            printf("Preencha os dados sobre a data de seu nascimento:\n");    
      
            goto ;}
            if((m==4 || m==6 || m==9 || m==11) && (d>30||d<1)){
            printf("\nFavor escolher um numero de 1 a 30. \n\n");
            goto ;}
            if(((bissexto==1)&&(m==2))&&((d<1)||(d>29))){
            printf("\nFavor escolher um numero de 1 a 29. \n\n");
            goto ;}
            if(((bissexto==0)&&(m==2))&&((d<1)||(d>28))){
            printf("\nFavor escolher um numero de 1 a 28. \n\n");
            goto ;}           
       if (m>12||m<1){
       printf("Informe o mes de nascimento (ex. 11): m = ");

       scanf("%d", &m);

       }
   }while (m>12||m<1);

    if(a>2100||a<1900){
       printf("Informe o ano de nascimento (ex.1984): a = ");
  
}
            }while (a>2100||a<1900);
            if ((a % 4 == 0) && ((a%400==0)||(a % 100 != 0))){
            printf("Ano Bissexto! \n\n");
            bissexto = 1;}

       scanf("%d", &a);
       printf("Insira o mes: \n\n");
       scanf("%d", &m);
       if((m==4 || m==6 || m==9 || m==11) && (d>30||d<1))
  printf("\nData de nascimento informada = %d/%d/%d", d, m, a);

printf("\nData atual informada = %d/%d/%d\n", dh, mh, ah);

i = d + m*30 + a*365;

h = dh + mh*30 + ah*365;
id=h-i;

ida = ah-a;

mi= 12-m+mh+ida*12;

{
    if(m>mh)
        printf("\nIdade = %d",ida-1);
 
   else
        printf("\nIdade em anos = %d anos", ida);

}
printf("\nIdade em meses = %d meses", id/30);
//12-m+(m-mh)+(ida*12)
printf("\nIdade hoje = %d dias", id);

{
             

 

 

  • Obrigado 1
Link para o comentário
Compartilhar em outros sites

Consegui arrumar um pouco o codigo, porém ainda não sei como eu posso fazer para incluir os numeros binarios

sei que devo acrescentar +1 nos dias, quando a%4==0, porém ainda não consigo chegar, sempre da erro algo...
 

printf("\n Digite o dia de nascimento. por exemplo (29):");
 	scanf("%d",&d);
 	printf("\n Digite o mes de nascimento. EX(11):");
 	scanf("%d",&m);
 	printf("\n Digite o ano de nascimento. EX(1997):");
 	scanf("%d",&a);
 	printf("\n Digite o dia de atual. por exemplo (31):");
 	scanf("%d",&dh);
 	printf("\n Digite o mes de atual. EX(12):");
 	scanf("%d",&mh);
 	printf("\n Digite o ano atual. EX(2017):");
 	scanf("%d",&ah);

  printf("\nData de nascimento informada = %d/%d/%d", d, m, a);

printf("\nData atual informada = %d/%d/%d\n", dh, mh, ah);





  
o = d + m*30 + a*365;

h = dh + mh*30 + ah*365;
id=h-o;

ida = ah-a;

mi= 12-m+mh+ida*12;

{
    if(m>mh)
        printf("\nIdade = %d",ida-1);
 
   else
        printf("\nIdade em anos = %d anos", ida);


printf("\nIdade em meses = %d meses", id/30);

printf("\nIdade hoje = %d dias", id);
}

 

  • Obrigado 1
Link para o comentário
Compartilhar em outros sites

@JosukeCerto!

a%4==0  daqui todos os anos divisíveis inteiros por 4 são bissextos, então você só precisa determinar quantos 4s há no intervalo do ano de   nascimento   até   atual.

 

Ex.: (2018 – 2000) ÷ 4= (18) ÷ 4= 4(2÷4), ou seja, tem 41/2 anos bissextos que equivalem a 4 dias a mais na conta.

 

Quadro

+-----------------------+
| 1. ano bissexto: 2004 |
| 2. ano bissexto: 2008 |
| 3. ano bissexto: 2012 |
| 4. ano bissexto: 2016 |
+-----------------------+

 

Algo mais sobre os bissextos? Pode falar Ok.

Obrigado!

 

Update: Quadro

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

1 hora atrás, AnsiC disse:

@JosukeCerto!

a%4==0  daqui todos os anos divisíveis inteiros por 4 são bissextos, então você só precisa determinar quantos 4s há no intervalo do ano de   nascimento   até   atual.

 

Ex.: (2018 – 2000) ÷ 4= (18) ÷ 4= 4(2÷4), ou seja, tem 41/2 anos bissextos que equivalem a 4 dias a mais na conta.

 

Quadro


+-----------------------+
| 1. ano bissexto: 2004 |
| 2. ano bissexto: 2008 |
| 3. ano bissexto: 2012 |
| 4. ano bissexto: 2016 |
+-----------------------+

 

Algo mais sobre os bissextos? Pode falar Ok.

Obrigado!

 

Update: Quadro

@AnsiC Eu tentei fazer o código com o a % 4 == 0, mas não consigo colocar para rodar, tenho que colocar um if e acrescentar 1 a variável dia se for bissexto, mas não consigo chegar, apesar de eu colocar a variavel e o if, os dias do bissexto não são acrescentados

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

@Josuke Você que um loop para determinar.

Experimento esse código

    unsigned a, b, q;
    a= 2000; /*  nascimento */
    b= 2018; /*  atualidade */
    q= 0000; /*  quantidade */
    
    /*  para incluir o ano 'b' adicione 1 a 'b'     */
    /*  para não incluir o ano 'a' adicione 1 a 'a' */
    while(b --> a){
      if(b % 4)continue; /*  Se modulus != 0 continua */
      printf("%u, ", b); /*  Exibir o ano bissexto */
      ++q; /* 'q': adicionar +1 */
    }
    if(q)puts("\b\b.");
    printf("Total de dia(s) extra(s): %u\n\n", q);

 

Update: De if else, Para if continue.

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

4 horas atrás, AnsiC disse:

@Josuke Você que um loop para determinar.

Experimento esse código


    unsigned a, b, q;
    a= 2000; /*  nascimento */
    b= 2018; /*  atualidade */
    q= 0000; /*  quantidade */
    
    /*  para incluir o ano 'b' adicione 1 a 'b'     */
    /*  para não incluir o ano 'a' adicione 1 a 'a' */
    while(b --> a){
      if(b % 4)continue; /*  Se modulus != 0 continua */
      printf("%u, ", b); /*  Exibir o ano bissexto */
      ++q; /* 'q': adicionar +1 */
    }
    if(q)puts("\b\b.");
    printf("Total de dia(s) extra(s): %u\n\n", q);

 

Update: De if else, Para if continue.

Obrigado pelo codigo, usei o seu como base, porém assim que eu coloco a data alguns vão certo, outros faltam 1 ou 2 dias, e por ai vai..
 

  	printf("\n Digite o dia de nascimento. EX(29):");
 	scanf("%d",&d);
 	printf("\n Digite o mes de nascimento. EX(11):");
 	scanf("%d",&m);
 	printf("\n Digite o ano de nascimento. EX(1997):");
 	scanf("%d",&a);
 	printf("\n Digite o dia de atual. por exemplo EX(31):");
 	scanf("%d",&dh);
 	printf("\n Digite o mes de atual. EX(12):");
 	scanf("%d",&mh);
 	printf("\n Digite o ano atual. EX(2017):");
 	scanf("%d",&ah);

  printf("\nData de nascimento informada = %d/%d/%d", d, m, a);

printf("\nData atual informada = %d/%d/%d\n", dh, mh, ah);







o = d + m*30 + a*365;
h = dh + mh*30 + ah*365;
id=h-o;

ida = ah-a;

mi= 12-m+mh+ida*12;

for (cont=a; cont<=ah;cont++)
{ if (cont % 4 == 0)
 	++bi;

}
for (cont=a; cont<=ah;cont++)
{ if (cont % 400 == 0)
 	++bi;

}
for (cont<=a; cont<=ah;cont++)
{ if (cont % 100 != 0)
 	bi++;

}
    if(m>mh)
        printf("\nIdade = %d",ida-1);
 
   else
        printf("\nIdade em anos = %d anos", ida);


printf("\nIdade em meses = %d meses", id/30);

printf("\nIdade em dias = %d dias\n\n", id+bi);

 

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

  • Solução

@Josuke É tudo deve ser em uma expressão única e em um só loop.

((cont % 400 == 0) || (cont % 4 == 0 && cont % 100 != 0)) entendeu.

 

 

39 minutos atrás, Josuke disse:

outros faltam 1 ou 2 dias, e por ai vai..

Nos diga também quais são os valores de entrada que está usando, e quais são os valores de saída corretos.

 

Estou sentindo um pontinha de dificuldade em te ajudar porque cada vez você aprece com um coisa nova. Até então era somente um modulus agora é 3 e usados de maneira que nunca vi antes. Você por acaso está sendo orientado por outro post é isso?

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...