Durante uma análise ambiental, um engenheiro precisa calcular um índice de qualidade da água com base em três parâmetros coletados em campo (oxigênio dissolvido, pH e turbidez), cada um com um peso diferente de importância.
Desenvolva um programa que receba os valores dos parâmetros e seus respectivos pesos e calcule o índice final utilizando média ponderada.

Passo 1

O que o enunciado pede:
  • Desenvolver um programa que receba os valores de três parâmetros de qualidade da água (oxigênio dissolvido, pH e turbidez) e os respectivos pesos, e calcule o índice final usando média ponderada.
Informações que temos (entradas esperadas):
  • Três valores medidos:
    • valor do oxigênio dissolvido (vou chamar de x_1);
    • valor do pH (vou chamar de x_2);
    • valor da turbidez (vou chamar de x_3).
  • Três pesos associados a esses parâmetros:
    • peso do oxigênio dissolvido (vou chamar de w_1);
    • peso do pH (vou chamar de w_2);
    • peso da turbidez (vou chamar de w_3).
O que o programa deve entregar (saída):
  • O índice final da qualidade da água calculado pela média ponderada dos três parâmetros.
Restrições/validações que o programa deve cuidar:
  • Os pesos não podem somar zero (pois haveria divisão por zero).
  • Idealmente os pesos são números não-negativos (pesos negativos não fazem sentido prático aqui).
  • As entradas devem ser números (floats).

Passo 2

Conceito matemático que vamos usar (aula rápida e prática):
  • A média ponderada de um conjunto de valores \{x_i\} com pesos \{w_i\} é dada por
\bar{x}=\frac{\sum_{i} w_i x_i}{\sum_{i} w_i}.
  • No nosso caso, com três parâmetros, a fórmula fica
\text{Índice}=\frac{w_1 x_1 + w_2 x_2 + w_3 x_3}{w_1 + w_2 + w_3}.Í
  • Aqui:
    • x_1 é o valor do oxigênio dissolvido,
    • x_2 é o valor do pH,
    • x_3 é o valor da turbidez,
    • w_1,w_2,w_3 são os pesos correspondentes que medem a importância relativa de cada parâmetro.
Por que dividir pela soma dos pesos?
  • A soma \sum w_i normaliza o resultado: se todos os pesos fossem multiplicados por um mesmo fator, o índice não mudaria. É isso que garante que o índice fique na escala apropriada.
Exemplo numérico manual (para fixar):
  • Suponha \,x_1=6, x_2=7, x_3=5 e w_1=0,5, w_2=0,3, w_3=0,2.
  • Calcula-se o numerador: 0,5\cdot6 + 0,3\cdot7 + 0,2\cdot5 = 3 + 2,1 + 1 = 6,1.
  • Soma dos pesos: 0,5 + 0,3 + 0,2 = 1.
  • Índice: \text{Índice}=6,1/1 = 6,1Í.

Passo 3

Escolha de implementação (motivo e estratégia):
  • Vou implementar em Python porque é simples, claro e muito usado em Engenharia para scripts rápidos.
  • Estratégia do programa:
    1. Ler os três valores x_1,x_2,x_3 do usuário.
    2. Ler os três pesos w_1,w_2,w_3 do usuário.
    3. Validar que todos são números e que w_1+w_2+w_3 \neq 0 e que os pesos não são negativos (avisar o usuário se houver problema).
    4. Calcular o numerador N=w_1 x_1 + w_2 x_2 + w_3 x_3.
    5. Calcular o denominador D=w_1+w_2+w_3.
    6. Calcular \text{Índice}=N/DÍ e exibir formatado (por exemplo com duas casas decimais).
  • Observação: se preferir, pode normalizar os pesos para que somem 1 (dividindo cada peso por D) e depois fazer \sum (\text{peso normalizado})\cdot x_i; isso é matematicamente equivalente.

Passo 4

Programa em Python — código comentado e explicado passo a passo.
Código (copiar/colar e executar em um interpretador Python 3):
def ler_float(mensagem):
    while True:
        try:
            s = input(mensagem)
            # substitui vírgula por ponto para aceitar entradas como 0,5
            s = s.replace(',', '.')
            return float(s)
        except ValueError:
            print("Entrada inválida. Digite um número (ex: 6, 7.5).")

def calcular_indice_ponderado(x1, x2, x3, w1, w2, w3):
    numerador = w1 * x1 + w2 * x2 + w3 * x3
    denominador = w1 + w2 + w3
    if denominador == 0:
        raise ZeroDivisionError("A soma dos pesos é zero. Não é possível calcular a média ponderada.")
    return numerador / denominador

def main():
    print("Cálculo de índice de qualidade da água por média ponderada")
    # Ler valores dos parâmetros
    x1 = ler_float("Valor do oxigênio dissolvido (x1): ")
    x2 = ler_float("Valor do pH (x2): ")
    x3 = ler_float("Valor da turbidez (x3): ")

    # Ler pesos
    w1 = ler_float("Peso do oxigênio dissolvido (w1): ")
    w2 = ler_float("Peso do pH (w2): ")
    w3 = ler_float("Peso da turbidez (w3): ")

    # Validações simples
    if w1 < 0 or w2 < 0 or w3 < 0:
        print("Aviso: um ou mais pesos são negativos. Normalmente espera-se pesos não-negativos.")
    soma_pesos = w1 + w2 + w3
    if soma_pesos == 0:
        print("Erro: a soma dos pesos é zero. O cálculo não pode ser realizado.")
        return

    indice = calcular_indice_ponderado(x1, x2, x3, w1, w2, w3)
    # Exibir resultado com duas casas decimais
    print(f"Índice ponderado da qualidade da água: {indice:.2f}")

if __name__ == "__main__":
    main()
Explicação das partes do código (passo a passo):
  • ler_float(mensagem): função auxiliar que lê uma linha do usuário e tenta converter para float. Substitui vírgula por ponto para facilitar entradas no formato brasileiro (ex: 0,5). Em loop até o usuário digitar um número válido.
  • calcular_indice_ponderado(...): função que aplica a fórmula \text{Índice}=\frac{w_1 x_1 + w_2 x_2 + w_3 x_3}{w_1 + w_2 + w_3}.ÍVerifica se o denominador é zero e lança erro apropriado caso seja.
  • main(): função principal que:
    • lê os três valores e os três pesos,
    • faz validações básicas (pesos negativos, soma dos pesos igual a zero),
    • chama calcular_indice_ponderado e exibe o resultado com duas casas decimais.
  • O bloco if __name__ == "__main__": permite executar o script diretamente.

Passo 5

Exemplos de uso (para treinar e validar que entendeu):
Exemplo 1 (o mesmo que usamos na aula):
  • Entradas:
    • x_1=6, x_2=7, x_3=5
    • w_1=0,5, w_2=0,3, w_3=0,2
  • Cálculo:
    • numerador =0,5\cdot6 + 0,3\cdot7 + 0,2\cdot5 = 6,1
    • denominador =1
    • índice =6,1
  • O programa imprime: Índice ponderado da qualidade da água: 6.10
Exemplo 2:
  • Entradas:
    • x_1=8, x_2=6,5, x_3=3
    • w_1=3, w_2=1, w_3=1
  • Cálculo:
    • numerador =3\cdot8 + 1\cdot6,5 + 1\cdot3 = 24 + 6,5 + 3 = 33,5
    • denominador =5
    • índice =33,5/5 = 6,7
  • O programa imprime: Índice ponderado da qualidade da água: 6.70

Passo 6

Dicas práticas para prova/uso rápido:
  • Se lhe derem pesos percentuais, transforme-os para frações (por exemplo 30\% vira 0,3) ou simplesmente use os números percentuais: a fórmula funciona com qualquer escala de pesos (contanto que a soma não seja zero).
  • Se os pesos já somarem 1, a fórmula simplifica para \text{Índice}=\sum w_i x_iÍ.
  • Em prova, calcule numerador e denominador separadamente, simplifique se possível (por exemplo, se os pesos tiverem fator comum, divida tudo por esse fator antes da conta).
  • Sempre verifique se a soma dos pesos é zero antes de dividir.

Resposta

def ler_float(mensagem):
    while True:
        try:
            s = input(mensagem)
            s = s.replace(',', '.')
            return float(s)
        except ValueError:
            print("Entrada inválida. Digite um número (ex: 6, 7.5).")

def calcular_indice_ponderado(x1, x2, x3, w1, w2, w3):
    numerador = w1 * x1 + w2 * x2 + w3 * x3
    denominador = w1 + w2 + w3
    if denominador == 0:
        raise ZeroDivisionError("A soma dos pesos é zero. Não é possível calcular a média ponderada.")
    return numerador / denominador

def main():
    print("Cálculo de índice de qualidade da água por média ponderada")
    x1 = ler_float("Valor do oxigênio dissolvido (x1): ")
    x2 = ler_float("Valor do pH (x2): ")
    x3 = ler_float("Valor da turbidez (x3): ")

    w1 = ler_float("Peso do oxigênio dissolvido (w1): ")
    w2 = ler_float("Peso do pH (w2): ")
    w3 = ler_float("Peso da turbidez (w3): ")

    if w1 < 0 or w2 < 0 or w3 < 0:
        print("Aviso: um ou mais pesos são negativos. Normalmente espera-se pesos não-negativos.")
    soma_pesos = w1 + w2 + w3
    if soma_pesos == 0:
        print("Erro: a soma dos pesos é zero. O cálculo não pode ser realizado.")
        return

    indice = calcular_indice_ponderado(x1, x2, x3, w1, w2, w3)
    print(f"Índice ponderado da qualidade da água: {indice:.2f}")

if __name__ == "__main__":
    main()

Exercícios relacionados