Você foi contratado por uma empresa de logística para desenvolver um programa que ajude a categorizar pacotes conforme os códigos de transporte. Cada pacote possui um código numérico, e esses códigos precisam ser verificados para identificar se atendem a critérios específicos. A empresa utiliza os seguintes critérios:
- Códigos múltiplos de 3 são enviados por transporte terrestre.
- Códigos múltiplos de 5 são enviados por transporte marítimo.
- Outros códigos são enviados por transporte aéreo.
No entanto, alguns códigos podem ser múltiplos de 3 e por 5 simultaneamente, ou seja, podem ser enviados por mais de um tipo de transporte. Nesse caso, dê prioridade ao transporte terrestre.
Implemente um programa que leia uma sequência arbitrária de números inteiros, representando os códigos dos pacotes, até que seja digitado o código 0 . Para cada código, com exceção do 0 , verifique se ele é múltiplo de 3,5 ou de nenhum deles, e identifique o meio de transporte a ser utilizado. Ao final, o programa deve imprimir como resultado:
- A quantidade total de pacotes enviados por transporte terrestre.
- A quantidade total de pacotes enviados por transporte marítimo.
- A quantidade total de pacotes enviados por transporte aéreo.
Sua resposta deve conter as mensagens exatamente como definidas nos exemplos de execução.
Exemplo de Execução 1:
Digite um código: 10
Digite um código: 21
Digite um código: 7
Digite um código: 9
Digite um código: 0
Enviados por transporte terrestre: 2
Enviados por transporte marítimo: 1
Enviados por transporte aéreo: 1
Exemplo de Execução 2:
Digite um código: 11
Digite um código: 2
Digite um código: 1
Digite um código: 0
Enviados por transporte terrestre: 0
Enviados por transporte marítimo: 0
Enviados por transporte aéreo: 3
Digite um código: 10
Digite um código: 21
Digite um código: 7
Digite um código: 9
Digite um código: 0
Enviados por transporte terrestre: 2
Enviados por transporte marítimo: 1
Enviados por transporte aéreo: 1
Digite um código: 11
Digite um código: 2
Digite um código: 1
Digite um código: 0
Enviados por transporte terrestre: 0
Enviados por transporte marítimo: 0
Enviados por transporte aéreo: 3
Passo 1
O que o problema pede (em partes claras):
- Ler uma sequência de inteiros fornecidos pelo usuário, um por vez, até que o usuário digite o código
. O é apenas o sinal para parar; ele não deve ser contado como pacote. - Para cada código lido (exceto o
), determinar o meio de transporte: - se for múltiplo de
: transporte terrestre; - senão, se for múltiplo de
: transporte marítimo; - senão: transporte aéreo.
- se for múltiplo de
- Se um código for múltiplo de
e de ao mesmo tempo (por exemplo ), deve prevalecer transporte terrestre. - Ao final, imprimir três números: a quantidade total de pacotes enviados por transporte terrestre, por transporte marítimo e por transporte aéreo, com as mensagens exatamente como nos exemplos:
- “Enviados por transporte terrestre: X”
- “Enviados por transporte marítimo: Y”
- “Enviados por transporte aéreo: Z”
Informações relevantes dadas pelo enunciado:
- Entrada: sequência de inteiros, termina quando o inteiro for
. - Critérios de classificação por múltiplos de
e e prioridade ao múltiplo de . - Mensagens de saída devem coincidir exatamente com os exemplos.
Passo 2
Conceitos matemáticos e de programação que usaremos (explicados devagar e com exemplos):
- Divisibilidade / múltiplo: dizer que um inteiro
é múltiplo de significa que existe um inteiro tal que . Em termos operacionais (o que usamos no programa) verificamos se Aqui é a operação resto da divisão inteira. - Operação resto (módulo): para inteiros,
é o resto da divisão de por . Se esse resto for , então é múltiplo de . - Exemplo:
então é múltiplo de . - Exemplo:
então é múltiplo de . - Exemplo:
então não é múltiplo de .
- Exemplo:
- Estrutura de repetição com sentinela: usaremos um laço que lê valores até encontrar um valor especial (sentinela) que indica parar. Aqui a sentinela é
. - Contadores: manteremos três variáveis que acumulam quantos pacotes caem em cada categoria. Inicialmente cada contador vale
. - Ordem das verificações (prioridade): como pacotes múltiplos de
e de simultaneamente devem ser classificados como terrestre, testamos primeiro a condição "múltiplo de ". Se fizéssemos as verificações na ordem oposta (testar múltiplo de antes), um número como seria classificado como marítimo por engano. Portanto, a sequência deve ser: testar , senão testar , senão classificar como aéreo.
Passo 3
Algoritmo passo a passo (conceito, sem código-fonte definitivo):
- Inicialize três contadores:
(terrestre) = , (marítimo) = , (aéreo) = . - Repita:
- Peça ao usuário para digitar um código.
- Leia um inteiro
. - Se
, pare o laço (não processe o ). - Senão, se
então incremente em . - Senão, se
então incremente em . - Senão, incremente
em .
- Depois de sair do laço, imprima:
- "Enviados por transporte terrestre: " seguido do valor de
- "Enviados por transporte marítimo: " seguido do valor de
- "Enviados por transporte aéreo: " seguido do valor de
- "Enviados por transporte terrestre: " seguido do valor de
Observação sobre sinais e negativos: a definição de múltiplo vale também para inteiros negativos. Por exemplo,
(ou equivalentemente
é múltiplo de
), então este
cairia em terrestre. Em linguagens de programação comuns (por exemplo Python), a verificação
funciona corretamente para negativos no sentido de identificar múltiplos.
Passo 4
Raciocínio sobre por que usar if-elif-else (explicação prática):
- Se tivéssemos apenas testes independentes (como dois if separados), para um número como
ambos e seriam verdadeiros e poderíamos acabar contando duas categorias ao mesmo tempo. O problema exige apenas uma categoria por pacote, com prioridade para terrestre. Então, usamos: - primeiro um teste "se múltiplo de
" (se verdadeiro, conta como terrestre e pula o resto), - senão, testamos "múltiplo de
" (se verdadeiro, conta marítimo), - senão, conta aéreo.
- primeiro um teste "se múltiplo de
- Em pseudocódigo:
ler n se n = 0 então parar senão se n % 3 == 0 então ter = ter + 1 senão se n % 5 == 0 então mar = mar + 1 senão aer = aer + 1
Passo 5
Simulação manual do primeiro exemplo para fixar (vou mostrar como os contadores evoluem; peguei os números do exemplo de execução):
- Entrada
: (não múltiplo de ), (múltiplo de ) → incrementa . Contadores agora . - Entrada
: → terrestre (prioridade). Contadores: . - Entrada
: não múltiplo de nem de → aéreo. Contadores: . - Entrada
: → terrestre. Contadores: . - Entrada
: parar e imprimir: - Enviados por transporte terrestre:
- Enviados por transporte marítimo:
- Enviados por transporte aéreo:
- Enviados por transporte terrestre:
Isso coincide com o Exemplo de Execução 1.
Passo 6
Dicas de implementação e cuidados (para a prova ou para quando programar):
- Certifique-se de converter a entrada para inteiro antes de aplicar o operador módulo.
- Não conte o
; use-o apenas como condição de parada. - Garanta que as mensagens impressas coincidam exatamente (acentuação, maiúsculas/minúsculas e pontuação), porque o enunciado pede isso.
- A ordem dos testes é importante para respeitar a prioridade.
- Complexidade e recursos: o algoritmo usa
memória extra (apenas três contadores) e tempo linear no número de entradas lidas (cada entrada é classificada em tempo constante).
Passo 7
Motivação rápida e encorajamento
- Você já tem todas as ferramentas: saber o que é múltiplo (módulo), saber usar um laço até sentinela e contar ocorrências. Vai dar certo — implemente isso calmamente e teste com os exemplos. Se errar, verifique a ordem dos testes (prioridade do múltiplo de
) e se o está sendo contado acidentalmente.
Resposta
ter = 0
mar = 0
aer = 0
while True:
n = int(input("Digite um código: "))
if n == 0:
break
if n % 3 == 0:
ter += 1
elif n % 5 == 0:
mar += 1
else:
aer += 1
print("Enviados por transporte terrestre: {}".format(ter))
print("Enviados por transporte marítimo: {}".format(mar))
print("Enviados por transporte aéreo: {}".format(aer))