Exercice 1 =========== Programme principal : int main() { int a, b ; a = 42 ; b = f(a) ; printf("%d %d\n", a, b) ; return 0 ; } 1) cas de la fonction f1 : int f1 (int x) { return x+1; } cette fonction ne modifie aucune variable et renvoie x+1. L'affichage produit pour les variables a et b après l'appel sera donc : 42 43 2) cas de la fonction f2 : int f2 (int x) { x = x+1 ; return x ; } cette fonction incrémente son paramètre "donné" x et renvoie sa nouvelle valeur. Le paramètre effectif a n'est donc pas modifié. L'affichage produit pour les variables a et b après l'appel sera donc : 42 43 3) cas de la fonction f3 : int f3 (int x) { int *p ; p = &x ; x = x+1 ; return *p ; } cette fonction déclare un pointeur p sur son paramètre "donné" x, incrémente ce paramètre, et renvoie la valeur pointée par p. Le paramètre effectif a n'est donc pas modifié. L'affichage produit pour les variables a et b après l'appel sera donc : 42 43 4) cas de la fonction f4 : int f4 (int x) { int *p ; p = &x ; *p = *p+1 ; return x ; } cette fonction déclare un pointeur p sur son paramètre "donné" x, incrémente la valeur pointée par p (donc la valeur de x) et renvoie la (nouvelle) valeur de x. Le paramètre effectif a n'est donc pas modifié. L'affichage produit pour les variables a et b après l'appel sera donc : 42 43 Exercice 2 =========== Element : un type ne contenant pas plus de 256 valeurs Taille : la constante entiere 255 Ensemble: le type tableau sur [0,Taille] de booleens Q1. Donnez une traduction de ce lexique en langage C lorsque {\tt Element} est le type {\tt char}. On rappelle que les booléens sont représentés par des entiers en C. #define Taille 256 typedef char Element ; typedef Element Ensemble[Taille] ; Q2. Peut-on adapter ce lexique pour représenter des ensembles dont les éléments seraient des jours de la semaine, c'est à dire des valeurs allant de {\tt Lundi}, {\tt Mardi}, \dots à {\tt Dimanche} ? Si oui, comment, si non pourquoi \dots #define Taille 8 // (le nombre de jours de la semaine) typedef enum {lundi, mardi, mercredi, ..., dimanche} Element ; typedef Element Ensemble[Taille] ; Q3. void inserer (Ensemble E, Element x) { // E est ici un pointeur sur un tableau, donc permet un passage par donnée-résultat E[x] = 1 ; // ou toute autre valeur différente de 0 ... } Q4. Union : action (le resultat E : un Ensemble E, la donnee E1 : un Ensemble, la donnee E2 : un Ensemble) ; void Union (Ensemble E, Ensemble E1, Ensemble E2) { // E est ici un pointeur sur un tableau, donc permet un passage par résultat int i ; for (i=0; i booleen ; { renvoie vrai si et seulement si E1 est inclus dans E2 } \end{verbatim} une premiere version, basée sur un schéma de recherche : (on recherche un element de E1 non present dans E2, ce qui signifie que E1 non inclus dans E2) int estInclus (Ensemble E1, Ensemble E2) { int i, inclus ; inclus = 1 ; i=0; while (i