Desenvolva um programa que realize
(entrada) sorteios de um número inteiro pertencente ao intervalo de 1 a 100. Seu programa deve ler o valor (valor) a ser sorteado, e em seguida realizar
sorteios. Ele deve apresentar a média entre o maior e o menor número sorteado. O caso especial deve ser tratado através de mensagem de erro (valor inserido de valor ser negativo). (3)
Passo 1
Aqui está o que o enunciado pede e quais dados ele fornece (vou listar ponto a ponto para ficar claro):
- O programa deve realizar
sorteios, onde é uma entrada do usuário. - Cada sorteio gera um número inteiro no intervalo de
a (inclusivo). - O programa deve ler o valor inteiro que indica quantos sorteios serão feitos — isto é, ler
. - Depois de realizar os
sorteios, o programa deve apresentar a média aritmética entre o maior e o menor número sorteado. - Há um caso especial: se o valor inserido (isto é,
) for negativo, deve ser mostrada uma mensagem de erro. - Não há mais especificações sobre formato de saída, então uma saída clara em texto é suficiente (por exemplo, imprimir a média).
Observação importante: se
não há nenhum sorteio para obter maior e menor; isso gera ambiguidade prática (não dá para calcular máximo/minimo). O enunciado só exige tratar o caso negativo explicitamente, mas na prática é melhor tratar também
para evitar erro de execução. Vou explicar e implementar esse tratamento extra.
Passo 2
Escolhendo a abordagem e os conceitos básicos (sem usar jargão complicado):
- Como precisamos de números aleatórios no intervalo
a , vamos usar a função que gera inteiros uniformes nesse intervalo, por exemplo em Python: . Isso devolve um inteiro tal que . - Precisamos acompanhar o menor e o maior número sorteado enquanto os sorteios acontecem. Em vez de guardar todos os números, é eficiente atualizar apenas duas variáveis:
e . A cada sorteio : - se
então atualizar ; - se
então atualizar .
- se
- Para iniciar
e podemos: - fazer o primeiro sorteio e atribuir esse valor tanto a
quanto a , e só depois repetir os sorteios; - ou iniciar
com um valor muito alto (por exemplo ) e com um valor muito baixo (por exemplo ) e comparar sempre. A primeira alternativa (usar o primeiro sorteio para inicializar) evita pensar em extremos e é simples.
- fazer o primeiro sorteio e atribuir esse valor tanto a
- Fórmula da média entre o maior e o menor: se
é o menor e é o maior, a média pedida é
- Validação de entrada: se
imprimir uma mensagem de erro conforme pedido. Também vou tratar imprimindo uma mensagem que indique que nenhum sorteio foi realizado (para evitar divisão/uso de min/max inexistentes).
Passo 3
Pseudocódigo passo a passo (para fixar a lógica antes do código real):
- Ler
(converter para inteiro). - Se
então: - imprimir a mensagem de erro (por exemplo: “Erro: valor negativo”) e terminar.
- Se
então: - imprimir uma mensagem como “Erro: nenhum sorteio realizado” e terminar (tratamento prático).
- Fazer o primeiro sorteio
com valor aleatório em . - Atribuir
e . - Para
de até (ou seja, repetir mais vezes): - sortear
inteiro aleatório em ; - se
então ; - se
então .
- sortear
- Calcular a média
. - Imprimir
(em formato numérico, por exemplo com ponto decimal se necessário).
Explicação do porquê isso funciona:
- Ao inicializar
e com o primeiro sorteio, garante-se que existem valores válidos para comparar com os sorteios seguintes. As atualizações garantem que, ao final, será o menor de todos os sorteios e será o maior. - A média entre dois números é simplesmente a soma dividida por
, o que resulta em um número real se a soma for ímpar (por exemplo ).
Passo 4
Vou exemplificar com um exemplo numérico pequeno para ficar claro:
- Suponha
. Os quatro sorteios deram (por exemplo): . - Primeiro sorteio
então , . - Segundo sorteio
: então . - Terceiro sorteio
: não altera nem . - Quarto sorteio
: então . - No final temos
e . A média pedida é
- Resultado a imprimir:
.
Passo 5
Detalhes de implementação e boas práticas (para você aplicar na prova/entregar):
- Em Python usar
e . - Ler entrada sem prompt (para ser compatível com corretores automáticos) usando
. - Tratar exceções de conversão pode ser opcional, mas para uma versão de prova basta assumir que a entrada será um inteiro.
- Para saída, é suficiente imprimir a média com
. Se quiser formatar com 1 ou 2 casas decimais, usar ou , mas não é obrigatório.
Resposta
import random
import sys
# Ler número de sorteios (n)
try:
n = int(input().strip())
except Exception:
print("Erro: entrada inválida")
sys.exit()
# Caso especial: valor negativo
if n < 0:
print("Erro: valor negativo")
sys.exit()
# Tratamento prático para n == 0 (nenhum sorteio possível)
if n == 0:
print("Erro: nenhum sorteio realizado")
sys.exit()
# Primeiro sorteio para inicializar min e max
x = random.randint(1, 100)
min_val = x
max_val = x
# Realizar os restantes n-1 sorteios
for _ in range(n - 1):
x = random.randint(1, 100)
if x < min_val:
min_val = x
if x > max_val:
max_val = x
# Calcular e imprimir a média entre o menor e o maior sorteado
media = (min_val + max_val) / 2
print(media)