Exercice langage C : Suites et Fonctions mathématiques

ExerciceC-id2833


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
78
79
80
81
Exercice 1
 
#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");        
}