• Aucun résultat trouvé

Corrig´ e de la Composition d’Informatique

N/A
N/A
Protected

Academic year: 2022

Partager "Corrig´ e de la Composition d’Informatique"

Copied!
4
0
0

Texte intégral

(1)

Corrig´ e de la Composition d’Informatique

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

Sujet propos´e par Gilles Dowek 11 juillet 2006

Exercice 1

1.

static boolean membre (int x, List l) { if (l == null) return false;

if (x == l.hd) return true;

return membre(x,l.tl);}

2.

static List supprime (int x, List l) { if (l == null) return l;

if (x == l.hd) return l.tl;

return new List (l.hd, supprime(x,l.tl));}

3.

static int communs (List l1, List l2) { if (l1 == null) return 0;

if (membre(l1.hd,l2)) return 1 + communs(l1.tl,supprime(l1.hd,l2));

return communs(l1.tl,supprime(l1.hd,l2));}

4.n2. Il faut commencer par trier les deux listes.

static int communs1 (List l1, List l2) { if (l1 == null) return 0;

if (l2 == null) return 0;

if (l1.hd == l2.hd) return 1 + communs1 (l1.tl,l2.tl);

if (l1.hd < l2.hd) return communs1 (l1.tl,l2);

return communs1 (l1,l2.tl);}

static int communs (List l1, List l2) { return(communs1(tri(l1),tri(l2)));}

(2)

Exercice 2

1. On ajoute l’´el´ement en tˆete de la liste l2. Temps constant.

2. On lit le premier ´el´ement de la liste l1et on le retire. Temps constant.

3. On retourne la liste l2qui devient la nouvelle listel1, puis on lit le premier ´el´ement de cette liste et on le retire. La complexit´e est proportionnelle `am.

4. La nouvelle liste l1a la longueur m - 1, les m - 1prochains acc`es au premier ´el´ement de la file se feront en temps constant. La complexit´e moyenne de cesmacc`es au premier ´el´ement de la liste est donc(c m + d (m - 1))/m. L’acc`es au premier ´el´ement de la liste se fait donc en temps constant en moyenne.

Exercice 3

1.e = [r1/a],

m = [r2/r1, (0,r3,r4)/r2, (2,r4,r2)/r3, (1,r2,r3)/r4]

2.

a

0

2 1

3.2.

Exercice 4

1.

static void paires1 (int v, List l) { if (l != null) {

System.out.println(v + " " + l.hd);

paires1(v,l.tl);}}

static void paires (List l) { if (l != null) {

paires1(l.hd, l.tl);

paires (l.tl);}}

2.

2

(3)

static void operations (int x, int y) { System.out.println (x + y);

if (x >= y) System.out.println (x - y);

if (y >= x) System.out.println (y - x);

System.out.println (x * y);

if (y != 0 && x % y == 0) System.out.println (x / y);

if (x != 0 && y % x == 0) System.out.println (y / x);}

static void paires1 (int v, List l) { if (l != null) {

operations(v,l.hd);

paires1(v,l.tl);}}

static void paires (List l) { if (l != null) {

paires1(l.hd, l.tl);

paires (l.tl);}}

3.

static void resultat (int x, List r) { System.out.println(x);

tous (new List(x,r));}

static void operations (int x, int y, List r) { resultat (x + y, r);

if (x >= y) resultat (x - y, r);

if (y >= x) resultat (y - x, r);

resultat (x * y, r);

if (y != 0 && x % y == 0) resultat (x / y,r);

if (x != 0 && y % x == 0) resultat (y / x,r);}

static void paires1 (int v, List l, List r) { if (l != null) {

operations(v,l.hd,List.revappend(l.tl,r));

paires1(v,l.tl,new List (l.hd,r));}}

static void paires (List l, List r) { if (l != null) {

paires1(l.hd, l.tl,r);

paires (l.tl,new List(l.hd,r));}}

static void tous (List l) { paires (l,null);}

3

(4)

Exercice 5

1. Σ(throw ;,e,m) = (exception, w)

2. Σ(x := t,e,m) = (normal, m + (v/e(x)))o`uv = Θ(t,e,m) 3. Si Σ(p1,e,m) = (normal, m’)alors Σ(p1 p2,e,m) = Σ(p2,e,m’)

Et si Σ(p1,e,m) = (exception, m’)alors Σ(p1 p2,e,m) = (exception, m’) 4. Si Σ(p1,e,m) = (normal, m’)alors Σ(try p1 handle p2,e,m) = (normal, m’)

Et si Σ(p1,e,m) = (exception, m’)alors Σ(try p1 handle p2,e,m) = Σ(p2,e,m’)

Exercice 6

Parce qu’en C la valeur d’un terme de typestruct Listest un couple et non une r´ef´erence associ´ee `a un couple dans la m´emoire, comme c’est le cas en Java.

4

Références

Documents relatifs

L'avantage de la méthode boothroyd est complètement prédictive rapide et qu'elle peut être adaptée à différents matériaux, et nous avons conclu avec se modèle

• premièrement c’est avoir une idée approfondie sur l’application de l’approche théorique dans le milieu professionnel ce qui nous permettra de comprendre et de maîtriser

Utiliser une poulie et un poids m pour ´ etudier le d´ eplacement d’un chariot de masse M ayant une acc´ el´ eration non nulle.. La figure 2 d´ ecrit la trajectoire

Cet ´ ecart peut s’expliquer en partie par le fait que la masse du fil (qui n’a pas ´ et´ e prise en compte) n’est pas n´ egligeable par rapport ` a la masse

[r]

(2) En d´ eduire la fonction supprime qui prend en arguments une liste L et un nombre n et supprime le premier ´ el´ ement de la liste ´ egal ` a n.. Cette fonction renverra True si

(2) En d´ eduire la fonction supprime qui prend en arguments une liste L et un nombre n et supprime le premier ´ el´ ement de la liste ´ egal ` a n... Avec la fonction random

Observons que chaque classe est non vide ; que deux classes sont disjointes ou confondues ; et que la r´eunion de toutes les classes est E.. Dans cette situation, nous dirons que