1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 | #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" ); } |
- Sunday
- April 13th, 2025
- Ajouter un cours