• Aucun résultat trouvé

Composition d’Informatique Les Principes des Langages de Programmation (INF 321) Promotion 2009

N/A
N/A
Protected

Academic year: 2022

Partager "Composition d’Informatique Les Principes des Langages de Programmation (INF 321) Promotion 2009"

Copied!
3
0
0

Texte intégral

(1)

Composition d’Informatique

Les Principes des Langages de Programmation (INF 321) Promotion 2009

Sujet propos´e par Gilles Dowek 13 juillet 2010

Les exercices qui suivent sont ind´ependants et peuvent ˆetre trait´es dans n’importe quel ordre.

On attachera une grande importance `a la clart´e, `a la pr´ecision et `a la concision de la r´edaction.

Exercice 1 (5 points)

On repr´esente des ensemble finis d’entiers par des listes de bool´eens : la liste l repr´esente l’ensemble des entiers n tels que le n`eme ´el´ement de la listel soit ´egal `a true. On se donne, pour cela, la classe des listes de bool´eens

class List { boolean hd;

List tl;

List (boolean h, List t) {hd = h; tl = t;}}

1. Quel est l’ensemble repr´esent´e par la listetrue,true,false,true? 2. Et par la liste true,true,false,true,false?

3. ´Ecrire une fonction qui prend en argument deux listes de bool´eens repr´esentant deux ensemblesAetB et calcule une liste repr´esentant l’intersection de ces deux ensembles.

4. ´Ecrire une fonction qui prend en argument deux listes de bool´eens repr´esentant deux ensemblesAetB et calcule une liste repr´esentant la r´eunion de ces deux ensembles.

5. ´Ecrire une fonction qui prend en argument deux listes de bool´eens repr´esentant deux ensembles A et B et retourne un bool´een indiquant si l’ensemble A est un sous-ensemble de l’ensemble Bou non.

Exercice 2 (4 points)

On reprend le type des listes bool´eens de l’exercice pr´ec´edent.

1. Que calcule la m´ethode suivante ? static int longueur (List l) { if (l == null) return 0;

return 1 + longueur(l.tl);}

2. Transformer cette m´ethode en une m´ethode dynamique.

3. Quelle est l’unique liste `a laquelle la m´ethode statique peut s’appliquer mais pas la m´ethode dynamique ?

(2)

Exercice 3 (3 points)

On consid`ere la classe des arbres class Arbre {

int val;

Arbre gauche ; Arbre droite;

Arbre (Arbre x, int y, Arbre z) {gauche = x; val = y; droite = z;}

1. Que calcule la m´ethode suivante ? static int produit (Arbre a) { int n, p;

if (a == null) return 1;

n = produit(a.gauche);

p = produit(a.droite);

return a.val * n * p;}

2. Comment transformer cette m´ethode de mani`ere `a interrompre le calcul quand un 0 est rencontr´e ?

Exercice 4 (6 points)

On consid`ere la fonction static int f (int x) { int n = 0;

while (x <= 100 || n > 0) {

if (x <= 100) {x = x + 11; n = n + 1;}

else {x = x - 10; n = n - 1;}}

return x;}

1. Montrer que quand appelle la fonction f avec un argument sup´erieur `a 100, la fonction fretourne ce mˆeme argument.

On suppose dans le reste de l’exercice que l’argument de la fonction est inf´erieur ou ´egal `a 100.

2. Soit s = [x = a, n = b]un ´etat tel que – b >= 0

– a - 10 b <= 101.

On suppose, en outre, que la condition d’ex´ecution du corps de la boucle est v´erifi´ee c’est-`a-dire que

– a <= 100oub > 0.

On ex´ecute le corps de la boucle

if (x <= 100) {x = x + 11; n = n + 1;}

else {x = x - 10; n = n - 1;}

2

(3)

dans l’´etat sce qui produit un ´etat s’ = [x = a’, n = b’]. Montrer que – b’ >= 0

– a’ - 10 b’ <= 101.

En d´eduire que dans tous les ´etats s = [x = a, n = b]produits au cours de l’ex´ecution de la boucle, on ab >= 0 eta - 10 b <= 101.

3. En d´eduire que dans tous les ´etatss = [x = a, n = b]produits au cours de l’ex´ecution de la boucle, on a2a - 21b <= 202.

4. On ex´ecute le corps de la boucle

if (x <= 100) {x = x + 11; n = n + 1;}

else {x = x - 10; n = n - 1;}

dans l’´etat sce qui produit un ´etat s’ = [x = a’, n = b’].

Montrer que2a’ - 21b’ = (2a - 21 b) + 1.

En d´eduire que la boucle termine.

5. Soits = [x = a, n = b] l’´etat produit par l’ex´ecution de cette boucle. Montrer que a = 101.

6. Simplifier l’expression de la fonction f.

Exercice 5 (2 points)

1. En Java, qu’affiche le programme suivant ? class Sing {

int x;

Sing (int a) {x = a;}}

class Prog {

static void reset (Sing p) {p.x = 0;}

public static void main (String [] args) { Sing p = new Sing (1);

reset(p);

System.out.println(p.x);}}

2. En C, qu’affiche le programme suivant ? struct Sing {int x;};

void reset (struct Sing p) {p.x = 0;}

int main () {

struct Sing p = {1};

reset(p);

printf("%d\n",p.x);

return 0;}

3

Références

Documents relatifs

´ Ecrire une fonction qui prend en argument une liste d’entiers et qui indique le nombre de z´ eros par lequel cette liste commence.. Exercice 2

Un tel entier sera donc repr´ esent´ e par une variable X de type List qui d´ ecrit dans l’ordre, les digits en base N.. Comment d´ eclarer la variable N dans la

• (2.c) ´ Ecrire le code de la m´ ethode dynamique et r´ ecursive Eval de la classe AExpr prenant en argument une feuille C, et permettant d’´ evaluer l’expression sur laquelle

Pour donner une partie de la s´ emantique de la calculatrice programmable, on doit changer un peu la repr´ esentation de l’´ etat courant de la calculatrice: c’est maintenant

Sujet propos´ e par Gilles Dowek 9 juillet 2007..

Une m´ ethode, parmi d’autres, consiste ` a remarquer que les L(p+1,m+1) listes croissantes de p+1 entiers compris entre 0 et m+1 se partitionnent entre celles qui commencent par 0

[r]

Sujet propos´e par Gilles Dowek 13 juillet 2010..