Introdução
Neste laboratório, você aprenderá a avaliar expressões polinomiais em programação C. O laboratório cobre os seguintes passos: leitura dos coeficientes do polinómio e da variável x a partir da entrada do utilizador, e utilização do método de Horner para avaliar eficientemente a expressão polinomial. No final deste laboratório, terá uma melhor compreensão de como trabalhar com expressões algébricas em C e implementar um algoritmo eficaz de avaliação polinomial.
Ler Coeficientes e a Variável x
Neste passo, aprenderá a ler os coeficientes do polinómio e a variável x a partir da entrada do utilizador num programa C. Esta é a primeira parte da implementação de um algoritmo de avaliação polinomial.
Primeiro, crie um novo ficheiro C para o programa de avaliação polinomial:
cd ~/project
nano polynomial_eval.c
Agora, adicione o seguinte código para ler os coeficientes e a variável x:
#include <stdio.h>
#define MAX_DEGREE 10
int main() {
int grau;
double coeficientes[MAX_DEGREE + 1];
double x;
// Ler o grau do polinómio
printf("Introduza o grau do polinómio (0-10): ");
scanf("%d", &grau);
// Ler os coeficientes
printf("Introduza os coeficientes do grau mais alto até ao termo constante:\n");
for (int i = grau; i >= 0; i--) {
printf("Coeficiente para x^%d: ", i);
scanf("%lf", &coeficientes[i]);
}
// Ler o valor de x
printf("Introduza o valor de x: ");
scanf("%lf", &x);
return 0;
}
Exemplo de saída:
Introduza o grau do polinómio (0-10): 3
Introduza os coeficientes do grau mais alto até ao termo constante:
Coeficiente para x^3: 2
Coeficiente para x^2: -3
Coeficiente para x^1: 0
Coeficiente para x^0: 5
Introduza o valor de x: 2
Vamos decompor o código:
- Definimos um grau máximo para o polinómio para evitar estouro de buffer
grauarmazena o grau do polinómio- O array
coeficientesarmazena os coeficientes do grau mais alto até ao termo constante xarmazena o valor em que avaliaremos o polinómio- Usamos
scanf()para ler as entradas do utilizador para o grau, os coeficientes e o valor de x
Compile e execute o programa para testar a entrada:
gcc polynomial_eval.c -o polynomial_eval
./polynomial_eval
Utilizar o Método de Horner para Avaliação
Neste passo, implementará o método de Horner para avaliar eficientemente expressões polinomiais. O método de Horner reduz o número de multiplicações necessárias para calcular valores polinomiais.
Abra o ficheiro C anterior e modifique-o para incluir a avaliação pelo método de Horner:
cd ~/project
nano polynomial_eval.c
Atualize o código com a implementação do método de Horner:
#include <stdio.h>
#define MAX_DEGREE 10
double hornerMethod(int grau, double coeficientes[], double x) {
double resultado = coeficientes[grau];
for (int i = grau - 1; i >= 0; i--) {
resultado = resultado * x + coeficientes[i];
}
return resultado;
}
int main() {
int grau;
double coeficientes[MAX_DEGREE + 1];
double x, resultado;
// O código de entrada anterior permanece o mesmo
printf("Introduza o grau do polinómio (0-10): ");
scanf("%d", &grau);
printf("Introduza os coeficientes do grau mais alto até ao termo constante:\n");
for (int i = grau; i >= 0; i--) {
printf("Coeficiente para x^%d: ", i);
scanf("%lf", &coeficientes[i]);
}
printf("Introduza o valor de x: ");
scanf("%lf", &x);
// Avaliar o polinómio usando o método de Horner
resultado = hornerMethod(grau, coeficientes, x);
printf("Valor do polinómio em x = %.2f é: %.2f\n", x, resultado);
return 0;
}
Compile e execute o programa atualizado:
gcc polynomial_eval.c -o polynomial_eval
./polynomial_eval
Exemplo de saída:
Introduza o grau do polinómio (0-10): 3
Introduza os coeficientes do grau mais alto até ao termo constante:
Coeficiente para x^3: 2
Coeficiente para x^2: -3
Coeficiente para x^1: 0
Coeficiente para x^0: 5
Introduza o valor de x: 2
Valor do polinómio em x = 2.00 é: 11.00
Vamos decompor o método de Horner:
- A função
hornerMethod()recebe o grau, os coeficientes e x como parâmetros - Começa com o coeficiente do grau mais alto
- Iterativamente multiplica o resultado atual por x e adiciona o próximo coeficiente
- Reduz a complexidade computacional de O(n²) para O(n)
O método avalia eficientemente polinómios como 2x³ - 3x² + 0x + 5 em x = 2.
Imprimir o Resultado
Neste passo final, irá melhorar o programa de avaliação polinomial adicionando saída formatada e tratamento de erros para melhorar a experiência do utilizador.
Abra o ficheiro C anterior e atualize-o com a impressão de resultados melhorada:
cd ~/project
nano polynomial_eval.c
Atualize o código com a impressão de resultados formatada e validação de entrada:
#include <stdio.h>
#define MAX_DEGREE 10
double hornerMethod(int degree, double coefficients[], double x) {
double result = coefficients[degree];
for (int i = degree - 1; i >= 0; i--) {
result = result * x + coefficients[i];
}
return result;
}
void printPolynomial(int degree, double coefficients[]) {
printf("Polinómio: ");
for (int i = degree; i >= 0; i--) {
if (coefficients[i] != 0) {
if (i == degree) {
printf("%.2fx^%d ", coefficients[i], i);
} else if (i > 1) {
printf("%+.2fx^%d ", coefficients[i], i);
} else if (i == 1) {
printf("%+.2fx ", coefficients[i]);
} else {
printf("%+.2f", coefficients[i]);
}
}
}
printf("\n");
}
int main() {
int degree;
double coefficients[MAX_DEGREE + 1];
double x, result;
// Validação de entrada
do {
printf("Introduza o grau do polinómio (0-10): ");
scanf("%d", °ree);
} while (degree < 0 || degree > MAX_DEGREE);
printf("Introduza os coeficientes do grau mais alto até ao termo constante:\n");
for (int i = degree; i >= 0; i--) {
printf("Coeficiente para x^%d: ", i);
scanf("%lf", &coefficients[i]);
}
printf("Introduza o valor de x: ");
scanf("%lf", &x);
// Imprimir detalhes do polinómio
printPolynomial(degree, coefficients);
// Avaliar o polinómio usando o método de Horner
result = hornerMethod(degree, coefficients, x);
// Saída de resultado formatada
printf("Avaliação do Polinómio:\n");
printf("P(x) = f(%.2f) = %.2f\n", x, result);
return 0;
}
Compile e execute o programa atualizado:
gcc polynomial_eval.c -o polynomial_eval
./polynomial_eval
Exemplo de saída:
Introduza o grau do polinómio (0-10): 3
Introduza os coeficientes do grau mais alto até ao termo constante:
Coeficiente para x^3: 2
Coeficiente para x^2: -3
Coeficiente para x^1: 0
Coeficiente para x^0: 5
Introduza o valor de x: 2
Polinómio: 2.00x^3 -3.00x^2 +5.00
Avaliação do Polinómio:
P(x) = f(2.00) = 11.00
Melhorias chave:
- Adicionada a função
printPolynomial()para exibir o polinómio - Implementada validação de entrada para o grau do polinómio
- Saída de resultado melhorada com saída formatada
- Mostra tanto o polinómio como o seu valor avaliado.
Resumo
Neste laboratório, aprendeu primeiro a ler os coeficientes polinomiais e a variável x a partir da entrada do utilizador num programa em C. Isto envolveu definir um grau máximo para o polinómio, criar um array para armazenar os coeficientes e utilizar scanf() para ler as entradas do utilizador. Em seguida, implementou o método de Horner para avaliar eficientemente expressões polinomiais, o que reduz o número de multiplicações necessárias para calcular os valores polinomiais. Seguindo estes passos, pode implementar um algoritmo de avaliação polinomial robusto em C.



