Ir ao conteúdo

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


Ir à solução Resolvido por Ansi C,

Posts recomendados

Postado

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
Postado

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
Postado
1 hora atrás, AnsiC disse:

Como assim da algo errado. Algo o quê? O programa parabéns funciona é isso.

Na verdade o que eu preciso fazer, é acrescentar o ano bissexto no codigo, porém não estou conseguindo

  • Curtir 1
Postado

@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
Postado
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
Postado

@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
Postado
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
  • Solução
Postado

@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

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...

LANÇAMENTO!

eletronica2025-popup.jpg


CLIQUE AQUI E BAIXE AGORA MESMO!