#include
/* le polynôme P(X) = X^5 - X^4 + 2X^3 - 2X^2 + 3X - 3 */
float a[] = { 1, -1, 2, -2, 3, -3 };
/* le degré de P (la taille de a est n + 1) */
int n = 5;
float x, xp, p;
int i;
int main() {
for(;;) {
printf("x ? ");
scanf("%f", &x);
if (x == 0 && xp == 0)
break;
xp = x;
p = a[0];
for (i = 1; i <= n; i++)
p = p * x + a[i];
printf("P(%f) = %f\n", x, p);
}
}
C'est le très classique schéma de Hörner, qui permet d'évaluer un polynôme de degré n en ne faisant que n multiplications.
Afin de tester l'algorithme pour diverses valeurs de x nous l'avons entouré d'une boucle, mais nous n'avons pas de raison d'affirmer que telle valeur de x est invalide et marque la fin. Nous avons fait la convention suivante : si vous donnez la valeur 0 deux fois de suite (ou en premier) cela arrête le programme. Oui, c'est alambiqué ; vous avez une meilleure idée ?
Exercice 2
#include
#define NL 5
#define NC 5
float A[NL][NC] = {
{ 21, 9, 16, 4, 25 },
{ 22, 15, 17, 15, 26 },
{ 23, 7, 18, 3, 27 },
{ 24, 15, 19, 15, 28 },
{ 24, 8, 20, 12, 29 } };
int tMin[NC], nMin, p, i, j, k;
float vMin;
int main() {
for (p = 0; p < NL; p++) {
/* calcul de l'ensemble des indices des minima de la ligne p */
nMin = 1;
tMin[0] = 0;
vMin = A[p][0];
for (j = 1; j < NC; j++)
if (A[p][j] == vMin)
tMin[nMin++] = j;
else if (A[p][j] < vMin) {
nMin = 1;
tMin[0] = j;
vMin = A[p][j];
}
/* de ces indices lesquels sont-ils maxima de leur colonne? */
for (j = 0; j < nMin; j++) {
k = tMin[j];
for (i = 0; i < NL; i++)
if (A[i][k] > vMin)
break;
if (i >= NL)
printf("(%d,%d) ", p, k);
}
}
printf("\n");
}