( 0.5 ) Anacleto tem 1.5 m e cresce 2 cm por ano, enquanto Adailton tem 1.10 m e cresce 3 cm por ano. Construa um programa em Python que calcule e imprima a altura de cada um ano a ano e quantos anos serão necessários para que Adailton seja maior que Anacleto.
Passo 1
O enunciado pede duas coisas:
- Construir um programa em Python que calcule e imprima a altura de cada um ano a ano.
- Determinar e imprimir quantos anos serão necessários para que Adailton seja maior que Anacleto.
Informações dadas (vou listar tudo que podemos usar diretamente):
- Altura atual de Anacleto:
m. - Altura atual de Adailton:
m. - Crescimento anual de Anacleto:
cm por ano. - Crescimento anual de Adailton:
cm por ano.
Observação importante (dados para o programa): as unidades estão m e cm; para evitar confusão convém usar a mesma unidade ao calcular ano a ano.
Passo 2
Primeiro conceito que precisamos dominar (e que vou aplicar no programa): consistência de unidades. Não podemos somar diretamente metros com centímetros sem converter. Uma estratégia simples é trabalhar tudo em centímetros (inteiros), evitando floats desnecessários.
Como converter:
-
m = cm. - Portanto,
m = cm. - E
m = cm.
Vamos definir:
- Anacleto inicial em cm:
cm. - Adailton inicial em cm:
cm. - Incrementos por ano:
cm/ano e cm/ano.
Explicação didática: trabalhar em centímetros facilita atualizar as alturas com somas inteiras a cada ano; só na impressão podemos converter de volta para metros (dividindo por 100) para ficar mais legível.
Passo 3
Agora a lógica passo a passo do algoritmo (o que o programa precisa fazer):
- Inicializar as variáveis de altura em cm:
, . - Inicializar um contador de anos:
. - Imprimir o estado do ano
(alturas atuais). - Enquanto Adailton não for maior que Anacleto (isto é, enquanto
):
a. Incrementarem 1.
b. Atualizar alturas:, .
c. Imprimir o estado do ano. - Quando o laço terminar,
será o número de anos necessários para que Adailton passe a ser maior que Anacleto.
Por que escolhi esse método e não só a conta direta? O enunciado pede que se imprima a altura ano a ano; isso implica um laço que mostre cada ano. Mesmo assim, vamos também fazer a conta algébrica curta para confirmar o resultado rapidamente (e para você aprender essa técnica).
Passo 4
Pequena aula de matemática rápida (atalho algébrico):
Queremos o menor inteiro tal que
Queremos o menor
Subtraindo
dos dois lados e subtraindo
:
Portanto o menor inteiro que satisfaz é
. Isso significa que, teoricamente, após
anos Adailton será maior que Anacleto. Observe que em
eles ficam com a mesma altura (empate), pois
Essa conta é útil para checar o programa e para responder rápido numa prova, mas como o problema também pede imprimir ano a ano, seguimos com o laço.
Passo 5
Aqui está o programa em Python que implementa a lógica descrita. Ele imprime ano a ano as alturas (em metros, com duas casas decimais) e, ao final, informa quantos anos foram necessários para que Adailton fique maior que Anacleto.
# Programa: alturas ano a ano até Adailton > Anacleto
# alturas em centímetros para evitar floats desnecessários
anacleto_cm = 150 # 1,5 m = 150 cm
adailton_cm = 110 # 1,10 m = 110 cm
crescimento_anacleto = 2 # cm por ano
crescimento_adailton = 3 # cm por ano
ano = 0
# imprime cabeçalho
print(f"Ano\tAnacleto (m)\tAdailton (m)")
# imprime estado inicial (ano 0)
print(f"{ano}\t{anacleto_cm/100:.2f}\t\t{adailton_cm/100:.2f}")
# enquanto Adailton não for maior (<=), continua
while adailton_cm <= anacleto_cm:
ano += 1
anacleto_cm += crescimento_anacleto
adailton_cm += crescimento_adailton
print(f"{ano}\t{anacleto_cm/100:.2f}\t\t{adailton_cm/100:.2f}")
print()
print(f"Anos necessários para que Adailton seja maior que Anacleto: {ano}")
Dica prática para a prova: copie esse padrão de laço quando precisar simular evoluções ano a ano. Inicialize, imprima estado inicial (opcional), e repita atualizar+imprimir até a condição ser satisfeita.
Passo 6
Vamos rodar mentalmente (ou seguir a saída do programa) para ver alguns anos e confirmar o resultado algébrico. Vou mostrar os primeiros anos, depois pulo para os últimos para economizar espaço:
Estado inicial (ano
):
- Ano
: Anacleto = cm = m; Adailton = cm = m.
Após
ano:
- Ano
: Anacleto = cm = m; Adailton = cm = m.
Após
anos:
- Ano
: Anacleto = cm = m; Adailton = cm = m.
…
Pulo para perto do empate:
- Ano
: Anacleto = cm = m; Adailton = cm = m (Adailton ainda menor). - Ano
: Anacleto = cm = m; Adailton = cm = m (empate). - Ano
: Anacleto = cm = m; Adailton = cm = m (Adailton passa a ser maior).
Isso confirma o cálculo algébrico: é preciso esperar
anos para que Adailton seja maior que Anacleto. O programa imprime exatamente a sequência ano a ano e termina quando encontra o ano onde Adailton fica maior.
Passo 7
Resumo final, encorajamento e dica de prova:
- Resultado algébrico e por simulação concordam: serão necessários
, anos para Adailton passar Anacleto. - Na prova, se pedirem apenas o número de anos, a conta algébrica é rápida. Se pedirem a evolução ano a ano (ou pedirem um programa), use a técnica do laço ano a ano que mostrei.
- Você consegue! Se ficar sem tempo na prova, faça a conta algébrica primeiro para garantir a resposta numérica e, se der tempo, apresente a simulação.
Resposta
# Programa: alturas ano a ano até Adailton > Anacleto
# alturas em centímetros para evitar floats desnecessários
anacleto_cm = 150 # 1,5 m = 150 cm
adailton_cm = 110 # 1,10 m = 110 cm
crescimento_anacleto = 2 # cm por ano
crescimento_adailton = 3 # cm por ano
ano = 0
# imprime cabeçalho
print(f"Ano\tAnacleto (m)\tAdailton (m)")
# imprime estado inicial (ano 0)
print(f"{ano}\t{anacleto_cm/100:.2f}\t\t{adailton_cm/100:.2f}")
# enquanto Adailton não for maior (<=), continua
while adailton_cm <= anacleto_cm:
ano += 1
anacleto_cm += crescimento_anacleto
adailton_cm += crescimento_adailton
print(f"{ano}\t{anacleto_cm/100:.2f}\t\t{adailton_cm/100:.2f}")
print()
print(f"Anos necessários para que Adailton seja maior que Anacleto: {ano}")