Examen I20 janvier 1997 Université Bordeaux 1 Session de Janvier 1997
Département de Formation Premier Cycle

Module I20 Epreuve de J.Bétréma
GM MIP, MIP(E), IUP-MIAGE
Date : 20 Janvier 1997 Durée : 1h30
Tous documents interdits.

Les 3 exercices sont indépendants. Donner des réponses simples et précises : les fonctions C demandées sont très courtes (quelques lignes) ; veiller particulièrement à spécifier correctement leurs paramètres.

  1. Soit la suite récurrente définie par :






    u0
    =
    5
    un+1
    =
    un + 1
    un
     , n 0

    Ecrire une fonction C qui calcule le nème terme de cette suite.

  2. On suppose disponibles une constante MAX et le type matrice :
      typedef int matrice [MAX][MAX];
    

    Ecrire une fonction C qui, pour un entier n donné, remplit une matrice avec la table des puissances ab  mod n, où a et b varient entre 0 et n-1.

    Note : on rappelle que x % n désigne, en C, le reste de la division de l'entier x par n.

  3. On suppose qu'un polynôme
    P(X) = p0 + p1 X + + pn Xn
    est représenté, comme en cours, par le tableau de ses coefficients p0, p1, pn, complété par des zéros. On suppose disponibles une constante MAX, le type polynome :
      typedef double polynome [MAX];
    
    et la fonction int degre (polynome p) qui calcule le degré d'un polynôme.

    1. Ecrire, en langage C, la fonction qui, à un réel a et à un polynôme P, associe le polynôme (X-a) P(X) .

      Note : cette fonction peut (et doit) être écrite directement, sans utiliser la fonction (vue en cours) qui effectue le produit de deux polynômes quelconques.

    2. En déduire la fonction qui, à partir d'un tableau de n réels a1, an, calcule le polynôme (X-a1) (X-an) .

    3. Ecrire la fonction qui calcule le quotient et le reste de la division de P(X) par X-a (utiliser l'algorithme qui permet d'effectuer cette opération à la main).

Corrigé

  1. double suite (int n) {
      double u = 5;
      int i;
      
      for (i = 0; i < n; i++)
        u = u + 1/u;
      return u;
    }
    

  2. void puissances (matrice m, int n) {
      int a, b;
      
      for (a = 0; a < n; a++) {
        m[a][0] = 1;
        for (b = 1; b < n; b++)
          m[a][b] = (a * m[a][b-1]) % n;
      }
    }
    

  3. void ProduitFacteur (polynome p, double a) {
      int i, n = degre (p);
      
      if (n + 1 >= MAX)
        n--;
      for (i = n + 1; i > 0; i--)
        p[i] = p[i-1] - a*p[i];
      p[0] = -a*p[0];
    }
    
    void ProduitFacteurs (polynome p, double *a, int n) {
      int i;
      
      p[0] = 1;
      for (i = 1; i < MAX; i++)
        p[i] = 0;
      for (i = 0; i < n; i++)
        ProduitFacteur (p, a[i]);
    }
    
    double QuotientFacteur (polynome p, polynome q, double a) {
      double r;
      int i, n = degre (p);
      
      for (i = n; i < MAX; i++)
        q[i] = 0;
      r = p[n];
      for (i = n-1; i >= 0; i--) {
        q[i] = r;
        r = p[i] + a * q[i];
      }
      return r;
    }
    


File translated from TEX by TTH, version 1.96.
On 2 Nov 1999, 14:22.