Jean-Jacques BOURDIN

Overview

Ch I) Let's try!

    I.A) Functions

    I.B) Main Street

    I.C) Conditions

    I.D) Recursivity

    I.E) Convergence

    I.F) Tail Recursive

 

 


TP 1


Premier programme

#include <stdio.h>
int carre (int n) {
  return n * n;
}
int main () {
  printf("le carre de %d est %d\n", 3, carre(3));
  return 0;
}

qui donne
Blanc14.local: gcc exo23.1.c Blanc14.local: a.out le carre de 3 est 9 Blanc14.local:

Second programme donné

  • /* which one is bigger? */
    int maxi2 (int a, int b) {
        if ( a < b ) {
           return b;
        }
        else {
           return a;
        }
    }
    int main () {
      printf("le carre de %d est %d\n", 3, carre(3));
      printf("le plus grand de %d et %d est %d\n", 5, 3, maxi2(5,3));
      printf("le plus grand de %d et %d est %d\n", 3, 5, maxi2(3,5));
      printf("le plus grand de %d et %d est %d\n", 5, 5, maxi2(5,5));
      return 0;
    }
    

    qui donne :
    Blanc14.local: gcc exo23.2.c
    Blanc14.local: a.out
    le plus grand de 5 et 3 est 5
    le plus grand de 3 et 5 est 5
    le plus grand de 5 et 5 est 5
    Blanc14.local: 
    

    Premier groupe d'exercices

    Vous devez écrire :

    1. la fonction qui trouve le plus grand parmi trois nombres entiers ;
    2. la fonction qui trouve le plus grand parmi quatre nombres entiers ;
    3. la fonction qui trouve le plus petit parmi cinq nombres entiers ;
    4. la fonction qui trouve le second plus grand parmi trois nombres entiers ;
    5. la fonction qui trouve le second plus grand parmi quatre nombres entiers ;
      sec4(7,3,2,9)==7
    6. la fonction qui trouve le second plus grand parmi cinq nombres entiers ;

     

        I.D) Recursivity

    Be careful
    Every time one wants to use the recursivity, one has to follow the following steps:

    1. Find an example with an easy to find result.
    2. Find a general rule, recursive.
    3. Verify that the general rule tends to the easy solution.

    Attention :

    Toute formulation récursive doit suivre les étapes suivantes :
    1. Trouver un cas particulier dont la valeur est donnée.
    2. rouver une règle générale qui donne une solution à partir d'elle-même.
    3. Vérifier que cette règle générale rapproche du cas particulier.

    Exemple récursif

    Example: a function to compute the sum of the first numbers to n.
    Une fonction qui calcule la somme des premiers entiers jusqu'à n :
    som(n) = 0 + 1 + 2 + 3 + ... + (n-1) + n
    #include <stdio.h>
    int som (int n) {
       if ( n < 1 ) {
          return 0;
       }
       else {
          return n + som (n-1);
       }
    }
    int main () {
      printf("la somme des entiers jusqu'à %d est %d\n", 4, som(4));
      printf("la somme des entiers jusqu'à %d est %d\n", 5, som(5));
      printf("la somme des entiers jusqu'à %d est %d\n", 6, som(6));
    }
    

    qui donne :
    Blanc14.local: gcc exo23.1.c
    Blanc14.local: a.out
    la somme des entiers jusqu'à 4 est 10
    la somme des entiers jusqu'à 5 est 15
    la somme des entiers jusqu'à 6 est 21
    Blanc14.local: 

    Second groupe d'exercices

    Vous devez écrire :

    1. Somme des carrés des n premiers entiers
    2. Somme des cubes des n premiers entiers
    3. Somme des puissance quatre des n premiers entiers
    4. Produit des n premiers entiers
    5. Produit des carrés des n premiers entiers
    6. Produit des cubes des n premiers entiers
    7. Produit des puissances quatre des n premiers entiers
    8. Exponentiation (x puissance n)
    9. Somme des puissances p des n premiers entiers
      sompn(2,4) = 0^4 + 1^4 + 2^4 = 17
    10. Additions par incrémentations successives
      On suppose ne savoir faire des additions que de +1 ou -1.
      L'addition de deux valeurs add(a+b) peut être ramenée à l'addition de a+1 et celle de b-1 n'est-ce pas ?
      Écrivez la fonction récursive qui fait ainsi l'addition de deux valeurs.
    11. Soustractions de deux valeurs
      Ici encore avec uniquement des +1 et -1.
    12. Multiplication russe
      Il s'agit de faire la multiplication par additions successives.
    13. Division entière et récursive
    14. Reste de la Division entière
    15. Plus grand diviseur commun de deux entiers
    16. Plus petit multiple commun de deux entiers
    17. Pour trouver l'entier x supérieur ou égale à la racine carrée d'un nombre a, il suffit de passer en revue tous les entiers jusqu'à avoir dépassé la racine.
      Faites la fonction C correspondante.
    18. Vous venez de trouver un nombre x supérieur ou égal à la racine carrée d'un autre nombre a. Vous savez donc que x et x-1 encadrent la racine. Faire une fonction qui renvoie celle de ces deux valeurs qui est la plus proche de la racine.

     

  • Of course you'll need also the main function to test all these functions.
  • Avec, bien sûr, une fonction main qui appelle et affiche les résultats des précédentes.
  • Note that you're not allowed to use not already presented functions or tools.
  • Attention, ce qui n'a pas encore été vu ne doit pas être utilisé.
  • Tout programme non testé est réputé faux.
  • If you didn't try it, it didn't work.

  • Dernière mise à jour le 23/1/2023 12h00