Utilize a função calculaTensao(float corrente, float resistencia) criada na questão anterior para um conjunto de 20 resistores em um circuito elétrico, cujas resistências e correntes são digitadas por um usuário, para escrever um programa em C que calcule as tensões nestes 20 resistores. Utilize vetores. (3,0)

Passo 1

O que o enunciado pede e quais são os dados fornecidos:
  • Escrever um programa em C que calcule as tensões em 20 resistores.
  • As resistências e as correntes para cada resistor serão digitadas pelo usuário.
  • Deve-se utilizar vetores (arrays) para armazenar os valores.
  • Deve-se utilizar a função já criada anteriormente: \text{calculaTensao}(\,\text{float corrente},\\ \text{float resistencia}\,).
O pedido final é: implementar um programa que leia 20 valores de corrente e 20 valores de resistência, use a função \text{calculaTensao} para obter cada tensão e mostre as tensões calculadas.

Passo 2

Conceito físico e fórmula que vamos usar (a “mágica” por trás da função):
  • A lei de Ohm relaciona tensão, corrente e resistência por
V = I \cdot R
onde:
  • V é a tensão (volts),
  • I é a corrente (amperes),
  • R é a resistência (ohms).
Explicação do que a função faz:
  • A função \text{calculaTensao} recebe dois parâmetros do tipo \text{float}: a corrente e a resistência, e retorna a tensão calculada como V=I\cdot R.
  • Protótipo da função (representado em notação C dentro de fórmula para seguir as regras de notação matemática do enunciado):
\text{float calculaTensao(float corrente, float resistencia)}
  • No programa, vamos chamar essa função para cada par \bigl(I_i,R_i\bigr) e guardar o resultado em um vetor de tensões.

Passo 3

Estrutura do programa (passo a passo lógico — como organizar o código):
  1. Definir uma constante N=20 para o número de resistores.
  2. Declarar três vetores (arrays) do tipo \text{float}:
    • correntes[N] para armazenar as correntes I_0,\dots,I_{N-1},
    • resistencias[N] para armazenar as resistências R_0,\dots,R_{N-1},
    • tensoes[N] para armazenar as tensões V_0,\dots,V_{N-1}.
  3. Ler do usuário, em um laço de i de 0 até N-1:
    • Primeiro a corrente I_i (ou ler pares corrente/resistência — tanto faz, desde que a leitura seja consistente).
    • Em seguida a resistência R_i.
    • Verificar o retorno de \text{scanf} para ter certeza de que a leitura foi bem-sucedida.
  4. Para cada i, chamar tensoes[i] = \text{calculaTensao}(correntes[i], resistencias[i]);.
  5. Exibir as tensões com uma formatação adequada (por exemplo, três casas decimais).
  6. Tratar casos especiais (opcional): resistência negativa é fisicamente estranha — pode apenas aceitar o valor e calcular, ou emitir um aviso; aqui vamos apenas calcular e, se desejar, imprimir um aviso para resistências negativas.
Observações práticas:
  • Em C os vetores indexam de 0 a N-1.
  • Usar \text{float} para economia de memória e porque a função já usa \text{float}.
  • Usar \text{printf} com o especificador \text{"\% .3f"} (por exemplo \text{"\% .3f"}) para imprimir floats com três casas decimais.

Passo 4

Detalhes de implementação (explicando o que cada parte do código faz, sem mostrar o código final completo aqui):
  • Incluir o cabeçalho padrão:
    • \#include <stdio.h>
  • Declarar/definir a função \text{calculaTensao}. Se a função já existir em outro arquivo objeto, basta declarar o protótipo; para tornar o programa autocontido, definir a função como: \text{float calculaTensao(float corrente, float resistencia)}\{ \text{return corrente * resistencia;} \}
  • No \text{main}:
    • Declarar \text{const int N = 20;}
    • Declarar os vetores: \text{float correntes[N], resistencias[N], tensoes[N];}
    • Fazer um laço \text{for (int i = 0; i < N; ++i)} para ler os valores: usar \text{scanf("%f", &correntes[i])} e \text{scanf("%f", &resistencias[i])}, checando se \text{scanf} retornou 1.
    • Depois de ler um par, calcular \text{tensoes[i] = calculaTensao(correntes[i], resistencias[i]);}.
    • Ao final, outro laço para imprimir todas as tensões com \text{printf("Resistor %d: tensão = %.3f V\n", i+1, tensoes[i]);}ã.
Boas práticas e pequenos cuidados:
  • Checar o valor de retorno de \text{scanf} ajuda a detectar entradas inválidas.
  • Usar mensagens claras ao pedir entrada, por exemplo: “Digite a corrente (A) para o resistor 1:”.
  • Usar \text{fflush(stdout)} antes de \text{scanf} em alguns ambientes interativos pode ser útil, mas não é necessário na maioria dos casos.
  • Compilar com \text{gcc -Wall -o programa programa.c} ajuda a detectar avisos.

Passo 5

Explicação rápida de exemplo numérico para entender o que o programa fará:
  • Se o usuário digitar para um resistor I = 0,250 (isto é, \,0{,}250 A) e R = 1000{,}0 (isto é, \,1000{,}0\\ \Omega), então a função retorna
V = I \cdot R = 0{,}250 \times 1000{,}0 = 250{,}0\\ \text{V}.
  • O programa repetirá esse cálculo para os 20 resistores e mostrará os resultados.

Resposta

#include <stdio.h>
float calculaTensao(float corrente, float resistencia) {
return corrente * resistencia;
}
int main(void) {
const int N = 20;
float correntes[N];
float resistencias[N];
float tensoes[N];
printf("Calculo de tensoes em %d resistores usando V = I * R\n", N);

for (int i = 0; i < N; ++i) {
    printf("Resistor %d:\n", i + 1);

    printf("  Digite a corrente (A): ");
    if (scanf("%f", &correntes[i]) != 1) {
        fprintf(stderr, "Erro na leitura da corrente. Encerrando.\n");
        return 1;
    }

    printf("  Digite a resistencia (Ohm): ");
    if (scanf("%f", &resistencias[i]) != 1) {
        fprintf(stderr, "Erro na leitura da resistencia. Encerrando.\n");
        return 1;
    }

    tensoes[i] = calculaTensao(correntes[i], resistencias[i]);
}

printf("\nTensoes calculadas:\n");
for (int i = 0; i < N; ++i) {
    printf("Resistor %2d: tensao = %.3f V (I = %.3f A, R = %.3f Ohm)\n",
           i + 1, tensoes[i], correntes[i], resistencias[i]);
}

return 0;
}

Exercícios relacionados