(1 ponto) Faça um programa que receba um número inteiro de segundos e escreva em forma de anos (de 360 dias), meses (de 30 dias), dias ( 24 horas), horas ( 60 minutos), minutos ( 60 segundos) e segundos, sendo uma informação por linha, sempre com os nomes no plural
Passo 1
O que o problema pede e o que é dado:
- Dado: um número inteiro de segundos (chamarei de
). - Pedido: escrever, uma informação por linha, a decomposição de
nas seguintes unidades (sempre com os nomes no plural): - anos (ano considerado com
dias); - meses (mês considerado com
dias); - dias (
horas); - horas (
minutos); - minutos (
segundos); - segundos.
- anos (ano considerado com
Ou seja, a saída deve ter exatamente 6 linhas, na ordem indicada, cada linha com algo como: "
anos", "
meses", …, sempre usando o plural.
Passo 2
Entender as conversões e calcular quantos segundos existem em cada unidade básica.
Vamos calcular quantos segundos tem cada unidade, começando do minuto para cima:
- Um minuto tem
segundos. Denotar . - Uma hora tem
minutos, logo
- Um dia tem
horas, logo
- Um mês (definido no enunciado como 30 dias) tem
- Um ano (definido no enunciado como 360 dias) tem
Esses valores fixos são os “tijolos” que vamos usar para dividir
.
Passo 3
Explicar a técnica matemática usada: divisão inteira e resto (módulo).
Para decompor
em unidades maiores primeiro (anos), usamos:
Depois usamos o resto
para extrair meses:
E repetimos o mesmo para dias, horas, minutos e finalmente os segundos restantes:
Aqui,
significa “parte inteira” de
(divisão inteira), e
é o resto da divisão inteira. Esses são exatamente as operações feitas por
// (divisão inteira) e % (módulo) em muitas linguagens, como Python.Passo 4
Tradução disso para um algoritmo passo a passo (pseudocódigo mental):
- Ler inteiro
. - Definir constantes
como no Passo 2. - Calcular
. - Atualizar
(agora vira o resto). - Calcular
. - Atualizar
. - Calcular
. - Atualizar
. - Calcular
. - Atualizar
. - Calcular
. - Calcular
. - Imprimir as 6 linhas:
- "
anos" - "
meses" - "
dias" - "
horas" - "
minutos" - "
segundos"
- "
Observação: o enunciado pede sempre os nomes no plural, então imprimimos “1 anos” se o valor for
; não fazemos singularização.
Passo 5
Um exemplo numérico para fixar (faça como na prova: calcula na mão um exemplo pequeno).
Suponha
segundos. Usando as constantes:
-
. Resto . -
. Resto . -
. Resto . -
. Resto . -
. -
.
Resultado que o programa deve imprimir:
0 anos
0 meses
1 dias
3 horas
46 minutos
40 segundos
0 anos
0 meses
1 dias
3 horas
46 minutos
40 segundos
Esse tipo de cálculo é exatamente o que o programa fará automaticamente.
Passo 6
Dicas práticas para a prova e cuidados:
- Use sempre divisão inteira e módulo na ordem de unidades decrescentes (maior para menor).
- Declare as constantes de segundos por unidade para evitar erro de conta de cabeça.
- Não tente decompor, por exemplo, em anos usando valores aproximados (como 365 dias) porque o enunciado já fixou 360 dias.
- Assuma que
é um inteiro não-negativo (seja cuidadoso: se houver possibilidade de entrada negativa, o enunciado deveria dizer; normalmente, em provas, assume-se não-negativo). - Em linguagens como C, Java, Python a operação
//(ou/com tipo inteiro) e%fazem o trabalho; em C/C++ e Java use/para divisão inteira quando os operandos são inteiros.
Passo 7
Implementação em Python (concreta, pronta para rodar). O código lê um inteiro da entrada padrão e imprime exatamente 6 linhas no formato pedido (sempre com nomes no plural).
Resposta
s = int(input())
s_min = 60
s_hora = 60 * s_min
s_dia = 24 * s_hora
s_mes = 30 * s_dia
s_ano = 360 * s_dia
anos = s // s_ano
s = s % s_ano
meses = s // s_mes
s = s % s_mes
dias = s // s_dia
s = s % s_dia
horas = s // s_hora
s = s % s_hora
minutos = s // s_min
segundos = s % s_min
print(f"{anos} anos")
print(f"{meses} meses")
print(f"{dias} dias")
print(f"{horas} horas")
print(f"{minutos} minutos")
print(f"{segundos} segundos")