Faça um programa que leia a altura e o sexo (codificado em 1=masculino e 2=feminino) de um grupo de 10 pessoas lidas do teclado.
Calcule e escreva:
a) Média da altura do grupo
b) Média da altura dos homens
c) Média da altura das mulheres
d) Maior altura do grupo
e) Menor altura do grupo

Passo 1

O enunciado pede que a gente leia a altura e o sexo (codificado com 1= masculino e 2= feminino) de um grupo de 10 pessoas e, a partir desses dados, calcule e escreva:
a) Média da altura do grupo
b) Média da altura dos homens
c) Média da altura das mulheres
d) Maior altura do grupo
e) Menor altura do grupo
Informações relevantes dadas pelo enunciado:
  • Número de pessoas lidas: \,10.
  • Para cada pessoa temos dois dados: a altura (um número real) e o sexo (um inteiro 1 ou 2).
  • Precisamos calcular médias, máximo e mínimo a partir dessas leituras.

Passo 2

Definindo as variáveis que vamos usar (explicação didática):
  • \text{soma\_total}: soma de todas as alturas lidas (serve para a média do grupo). Inicialmente \,0.
  • \text{conta\_total}: número de pessoas lidas. Vai valer \,10 ao final (mas podemos incrementar enquanto lemos).
  • \text{soma\_homens}: soma das alturas das pessoas com sexo 1. Inicialmente \,0.
  • \text{conta\_homens}: quantidade de homens (sexo 1). Inicialmente \,0.
  • \text{soma\_mulheres}: soma das alturas das pessoas com sexo 2. Inicialmente \,0.
  • \text{conta\_mulheres}: quantidade de mulheres (sexo 2). Inicialmente \,0.
  • \text{maior}: guarda a maior altura lida.
  • \text{menor}: guarda a menor altura lida.
Por que essas variáveis? Porque para calcular médias você precisa da soma e da contagem: a média é a divisão da soma pela contagem. Para máximo e mínimo, conforme você vai lendo valores, você compara o valor lido com o atual maior e menor e atualiza se necessário.

Passo 3

Como inicializar \text{maior} e \text{menor} de forma segura:
Opções comuns:
  • Inicializar \text{maior} com um valor muito pequeno (por exemplo -\infty) e \text{menor} com um valor muito grande ( +\infty). Em código prático, às vezes usamos os valores lidos da primeira pessoa para inicializar ambos — assim evitamos problemas.
    Estratégia que vou adotar (simples e robusta): ler a primeira pessoa fora do laço, usar sua altura para inicializar \text{maior} e \text{menor}, contar conforme o sexo, somar nas variáveis apropriadas; depois fazer um laço para ler as restantes (10-1) pessoas. Isso evita usar constantes extremas.

Passo 4

Explicação passo-a-passo do processamento para cada pessoa lida:
  1. Ler a altura (um número real). Chamaremos de \,h.
  2. Ler o sexo (inteiro 1 ou 2). Chamaremos de \,s.
  3. Atualizar \text{soma\_total} \leftarrow \text{soma\_total} + h.
  4. Incrementar \text{conta\_total} (na prática, como sabemos que são 10 pessoas, podemos apenas controlar um laço que itera 10 vezes).
  5. Se s = 1 então \text{soma\_homens} \leftarrow \text{soma\_homens} + h e \text{conta\_homens} \leftarrow \text{conta\_homens} + 1.
  6. Se s = 2 então \text{soma\_mulheres} \leftarrow \text{soma\_mulheres} + h e \text{conta\_mulheres} \leftarrow \text{conta\_mulheres} + 1.
  7. Atualizar máximo: se h > \text{maior} então \text{maior} \leftarrow h.
  8. Atualizar mínimo: se h < \text{menor} então \text{menor} \leftarrow h.

Passo 5

Fórmulas para as médias (aula rápida):
  • Média da altura do grupo:
\text{média\_grupo} = \frac{\text{soma\_total}}{\text{conta\_total}}é
onde \text{soma\_total} é a soma de todas as alturas e \text{conta\_total} é o número total de pessoas (aqui \,10).
  • Média da altura dos homens (se houver pelo menos um homem):
\text{média\_homens} = \frac{\text{soma\_homens}}{\text{conta\_homens}}é
Se \text{conta\_homens} = 0 então a média dos homens é indefinida — no programa devemos tratar esse caso (por exemplo, informar que não há homens).
  • Média da altura das mulheres (se houver pelo menos uma mulher):
\text{média\_mulheres} = \frac{\text{soma\_mulheres}}{\text{conta\_mulheres}}é
Se \text{conta\_mulheres} = 0 então a média das mulheres é indefinida — tratar também.
Observação prática: evite divisão por zero checando a contagem antes de dividir.

Passo 6

Validação de entrada (dica prática para a prova e para o programa):
  • Ao ler o sexo, se o valor não for \,1 nem \,2, podemos:
    • pedir novamente (loop de validação), ou
    • considerar inválido e pular / registrar como inválido.
      Para a prova, o mais simples e aceitável é assumir que o usuário digitará corretamente 1 ou 2 (o enunciado costuma assumir entradas válidas). Aqui vou escrever um programa que pede repetidamente até o usuário digitar 1 ou 2 — isso torna o programa mais robusto.

Passo 7

Exemplo numérico pequeno (para fixar a ideia):
Suponha que temos 3 leituras (apenas para entender a fórmula):
  • Altura 1: 1{,}70, sexo 1 (homem)
  • Altura 2: 1{,}60, sexo 2 (mulher)
  • Altura 3: 1{,}80, sexo 1 (homem)
Cálculos:
  • \text{soma\_total} = 1{,}70 + 1{,}60 + 1{,}80 = 5{,}10
  • \text{conta\_total} = 3
  • \text{média\_grupo} = \dfrac{5{,}10}{3} = 1{,}70é
  • Homens: \text{soma\_homens} = 1{,}70 + 1{,}80 = 3{,}50, \text{conta\_homens} = 2, \text{média\_homens} = \dfrac{3{,}50}{2} = 1{,}75é
  • Mulheres: \text{soma\_mulheres} = 1{,}60, \text{conta\_mulheres} = 1, \text{média\_mulheres} = 1{,}60é
  • \text{maior} = 1{,}80, \text{menor} = 1{,}60
Esse pequeno exemplo mostra na prática como as somas e contagens viram médias, máximo e mínimo.

Passo 8

Decisões de saída (o que o programa deve imprimir):
  • Imprimir a média da altura do grupo com duas casas decimais.
  • Imprimir a média dos homens com duas casas decimais, ou uma mensagem como “Não há homens” caso não exista nenhum.
  • Imprimir a média das mulheres com duas casas decimais, ou “Não há mulheres” caso não exista nenhuma.
  • Imprimir a maior e a menor altura do grupo com duas casas decimais.
Formato sugerido (exemplo de apresentação):
Média da altura do grupo: 1,72
Média da altura dos homens: 1,75 (ou “Não há homens”)
Média da altura das mulheres: 1,68 (ou “Não há mulheres”)
Maior altura do grupo: 1,95
Menor altura do grupo: 1,50

Passo 9

Resumo do algoritmo (para decorar e usar na prova):
  1. Inicializar somas e contadores com zero. Ler a primeira pessoa e usar sua altura para inicializar maior e menor. Atualizar somas/contadores conforme o sexo.
  2. Para as próximas (10-1) leituras: ler altura e sexo, validar o sexo, atualizar somas, contadores, e atualizar maior e menor.
  3. Após ler as 10 pessoas, calcular médias com as fórmulas:
\text{média} = \frac{\text{soma}}{\text{conta}}é
checando se \text{conta} \neq 0.
4. Escrever os resultados no formato pedido.

Resposta

# Programa em Python que lê altura e sexo de 10 pessoas e calcula as estatísticas pedidas

def leia_sexo_valido():
    while True:
        try:
            s = int(input("Sexo (1=masculino, 2=feminino): ").strip())
            if s == 1 or s == 2:
                return s
            else:
                print("Entrada inválida. Digite 1 para masculino ou 2 para feminino.")
        except ValueError:
            print("Entrada inválida. Digite 1 ou 2.")

# Inicializações
soma_total = 0.0
conta_total = 0
soma_homens = 0.0
conta_homens = 0
soma_mulheres = 0.0
conta_mulheres = 0

# Ler a primeira pessoa para inicializar maior e menor
print("Pessoa 1:")
while True:
    try:
        h = float(input("Altura (em metros): ").strip())
        break
    except ValueError:
        print("Altura inválida. Digite um número (ex: 1.75).")
s = leia_sexo_valido()

soma_total += h
conta_total += 1
if s == 1:
    soma_homens += h
    conta_homens += 1
else:
    soma_mulheres += h
    conta_mulheres += 1

maior = h
menor = h

# Ler as próximas 9 pessoas
for i in range(2, 11):  # pessoas 2 até 10
    print(f"Pessoa {i}:")
    while True:
        try:
            h = float(input("Altura (em metros): ").strip())
            break
        except ValueError:
            print("Altura inválida. Digite um número (ex: 1.75).")
    s = leia_sexo_valido()

    soma_total += h
    conta_total += 1
    if s == 1:
        soma_homens += h
        conta_homens += 1
    else:
        soma_mulheres += h
        conta_mulheres += 1

    if h > maior:
        maior = h
    if h < menor:
        menor = h

# Cálculo das médias (com checagem para divisão por zero)
media_grupo = soma_total / conta_total  # conta_total = 10

if conta_homens > 0:
    media_homens = soma_homens / conta_homens
else:
    media_homens = None  # indicador de inexistência

if conta_mulheres > 0:
    media_mulheres = soma_mulheres / conta_mulheres
else:
    media_mulheres = None

# Impressão dos resultados
print()
print(f"Média da altura do grupo: {media_grupo:.2f}")
if media_homens is not None:
    print(f"Média da altura dos homens: {media_homens:.2f}")
else:
    print("Média da altura dos homens: Não há homens")

if media_mulheres is not None:
    print(f"Média da altura das mulheres: {media_mulheres:.2f}")
else:
    print("Média da altura das mulheres: Não há mulheres")

print(f"Maior altura do grupo: {maior:.2f}")
print(f"Menor altura do grupo: {menor:.2f}")

Exercícios relacionados