Difference between revisions of "C: Problema da idade em dias"

From AdonaiMedrado.Pro.Br
Jump to: navigation, search
(Dificuldade única)
 
(2 intermediate revisions by the same user not shown)
Line 1: Line 1:
=== Dificuldade única ===
+
== Dificuldade única ==
  
 
Faça um programa, utilizando a linguagem C, capaz de informar a idade em dias com base na data de nascimento de um ser.
 
Faça um programa, utilizando a linguagem C, capaz de informar a idade em dias com base na data de nascimento de um ser.
Line 18: Line 18:
 
struct tm *agora = localtime(&agora_t);
 
struct tm *agora = localtime(&agora_t);
 
int dia = agora->tm_mday;
 
int dia = agora->tm_mday;
int mes = agora->tm_mon;
+
int mes = agora->tm_mon + 1;
int ano = agora->tm_year;
+
int ano = agora->tm_year + 1900;
 
</code>
 
</code>
 +
 +
=== Exemplo 1 ===
 +
 +
==== Entrada ====
 +
21
 +
9
 +
1981
 +
 +
==== Saída ====
 +
10006
 +
 +
(Considerando dia 12/02/2009)
 +
 +
 +
=== Exemplo 2 ===
 +
 +
==== Entrada ====
 +
31
 +
7
 +
1981
 +
 +
==== Saída ====
 +
10058
 +
 +
(Considerando dia 12/02/2009)
 +
 +
=== Exemplo 3 ===
 +
 +
==== Entrada ====
 +
1
 +
3
 +
2004
 +
 +
==== Saída ====
 +
1809
 +
 +
(Considerando dia 12/02/2009)
 +
 +
=== Outros exemplos ===
 +
Você pode gerar mais casos de teste para a data atual em: http://www.peterrussell.com/age.php

Latest revision as of 12:31, 12 February 2009

Dificuldade única

Faça um programa, utilizando a linguagem C, capaz de informar a idade em dias com base na data de nascimento de um ser.

Para resolver este problema você precisa saber que:

  • Setembro, abril, junho e novembro têm 30 dias, todos os outros meses tem 31 exceto fevereiro que tem 28, exceto nos anos bissextos nos quais ele tem 29.
  • Todo ano par divisível por 4 é um ano bissexto (1992 = 4*468 então 1992 será um ano bissexto, mas 1990 não é um ano bissexto).
  • A regra acima não é válida para anos de virada de século. Estes anos devem ser divisíveis por 400 para serem anos bissextos, todos os outro não são. Assim, o ano 1700, 1800, 1900 e 2100 não são bissextos, mas 2000 é bissexto.

Não é permitido o uso de funções de data da linguagem, exceto as necessárias para obter a data atual.

O programa deverá ler um dado por linha correspondente ao dia, mês e ano de nascimento (inteiros positivos válidos para seus respectivos valores). A saída será constituída de uma única linha com a quantidade de dias que o ser viveu.

Na linguagem C, pode-se obter o dia, mês e ano corrente através do código a seguir (necessário a inclusão de time.h):

time_t agora_t = time(NULL);
struct tm *agora = localtime(&agora_t);
int dia = agora->tm_mday;
int mes = agora->tm_mon + 1;
int ano = agora->tm_year + 1900;

Exemplo 1

Entrada

21
9
1981

Saída

10006

(Considerando dia 12/02/2009)


Exemplo 2

Entrada

31
7
1981

Saída

10058

(Considerando dia 12/02/2009)

Exemplo 3

Entrada

1
3
2004

Saída

1809

(Considerando dia 12/02/2009)

Outros exemplos

Você pode gerar mais casos de teste para a data atual em: http://www.peterrussell.com/age.php