LO22 Examen Final P2009 Durée 2h Aucun document autorisé
Questions de cours :
1. Quelle est la différence entre la fonction system() et les fonctions de la famille exec*() ?
2. En particulier, sur laquelle des propriétés d’un fichier se base l’outil GU make pour recompiler un programme?
3. A quoi sert la fonction signal() ?
4. Soit l’instruction suivante : P = &X ;
Préciser à quoi sont équivalentes les expressions suivantes :
a. Y = *P+1 b. *P = *P+10 c. *P += 2 d. ++*P e. (*P)++
f. *P++
5. Placé devant une variable, quelle est l’utilité de l’attribut « register » ?
6. Répondre à la question suivante en entourant une des réponses.
a. Un pointeur sur fonction existe car les pointeurs sont des variables puissantes b. Un pointeur sur fonction ne sert à rien
c. Un pointeur sur fonction sert à faire appel à cette fonction en tant que paramètre de fonction
d. Un pointeur sur fonction sert à modifier la fonction
7. Soit P un pointeur sur un tableau A :
short A[] = {12, 23, 34, 45, 56, 67, 78, 89, 90} ; short *P ;
P = A ;
Quelles valeurs ou adresses fournissent ces expressions :
a. *P+2 b. *(P+2) c. &P+1 d. &A[4] – 3 e. A+3 f. &A[7] – P g. P+(*P – 10) h. *(P+*(P+8) – A[7])
Exercice 1
Ecrivez un programme permettant de trier un ensemble de lignes de texte selon un ordre lexicographique croissant. Votre programme devra soit trier le contenu du fichier dont le nom est passé en paramètre sur la ligne de commande, soit trier le texte présent sur l’entrée standard. Votre programme devra afficher les lignes de texte triées sur sa sortie-standard.
Exercice 2
La fonction map est une fonction permettant d’appliquer une opération sur tous les éléments d’un tableau. Par exemple, si vous avez le tableau d’entiers contenant {0,3,6,13,-45} et que vous lui appliquez la fonction map avec une opération d’incrémentation d’une unité (n=n+1), vous obtiendrez comme résultat le tableau {1,4,7,14,-44} dans lequel chaque élément du tableau a été incrémenté de 1. Si vous appliquer l'opération (n=n*n) sur le même tableau initial, alors vous devrez obtenir le tableau résultat {0,9,36,169,1936}.
a) Proposez un prototype pour la fonction map. Vous ne devez pas limiter vos investigations aux seuls opérateurs d’incrémentation et de mise au carré présentés dans l’exemple ci-dessus. Votre fonction map doit pouvoir supporter n'importe quelle opération définie par l'utilisateur sans avoir besoin de recompiler la fonction map.
b) Ecrivez le code de la fonction map.