**** éléments de correction td7bis-LT-RICM2 **** **** syntaxe abstraite et sémantique**** ****Laurent Mounier et Laure Gonnord **** Exercice 1 ---------- * instruction "switch" en C : switch (E) { case E1 : I1 case E2 : I2 ... default: I } Informellement, cette instruction est "correcte" ssi : - E, E1, E2, ... sont des expressions correctes, et de même type - I, I1, I2, ... sont des instructions correctes. * instruction "case" en Ada : case E is when E1 => I1 when E2 => I2 ... when En => In } Informellement, cette instruction est "correcte" ssi : - E, E1, E2, ... sont des expressions correctes, de même type, et d'un type énuméré - I, I1, I2, ... In sont des instructions correctes. Exercice 2 ---------- * pour les programmes "un.c" et "un.adb", rien de particulier à remarquer. La seule difference c'est la valeur initiale de a avant son initialisation. en C : mandelbrot{62} un -4196220 -4196219 43 en ADA : mandelbrot{3} un 0 1 43 * Les programmes "trois.c" et "trois.adb" illustrent la différence entre les modes de passage des paramètres en C et en Ada lorsque l'on souhaite modifier la valeur d'un paramètre (en passant son adresse en C, et en utilisant le mode "in out" en Ada). en C : les paramètres *x et *y désignent la même adresse a, donc chaque affichage de *x et et de *y produit le même résultat. La valeur finale de a correspond au résultat de la dernière affectation de *y. mandelbrot{82} trois 43 43 44 44 44 en ADA : les paramètres x et y désignent des adresses différentes lors de l'exécution de F, l'exécution de cette fonction se déroule donc comme attendu. Par contre le problème est de savoir qui, entre x et y, fournira la valeur de retour pour a. Il semble ici que ce soit y. mandelbrot{10} trois 42 43 44 43 43 * Pour les programmes "quatre.c" et "quatre.ada", le problème est identique. en C : les paramètres *x, *y et *z désignent la même adresse, qui sera aussi la valeur finale de a. mandelbrot{86} quatre 45 45 45 45 en Ada : les paramètres x, y et z désignent des adresses différentes. C'est z qui fournit la valeur de retour. mandelbrot{30} quatre 45 43 44 44 ****