• Aucun résultat trouvé

Corrig´e de la Composition d’Informatique Les Principes des Langages de Programmation (INF 321) Promotion 2007

N/A
N/A
Protected

Academic year: 2022

Partager "Corrig´e de la Composition d’Informatique Les Principes des Langages de Programmation (INF 321) Promotion 2007"

Copied!
2
0
0

Texte intégral

(1)

Corrig´ e de la Composition d’Informatique

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

Sujet propos´e par Gilles Dowek 7 juillet 2008

Exercice 1

static List succ (List l) {

if (l == null) return new List(1,null);

if (l.hd == 9) return new List (0,succ(l.tl));

return new List (l.hd+1,l.tl);}

static List add (List l1, List l2, int c) { int d1,d2,s;

List m1,m2;

if ((l1 == null) && (l2 == null) && (c == 0)) return null;

if (l1 == null) {d1 = 0; m1 = null;} else {d1 = l1.hd; m1 = l1.tl;}

if (l2 == null) {d2 = 0; m2 = null;} else {d2 = l2.hd; m2 = l2.tl;}

s = d1 + d2 + c;

return new List (s%10, add(m1,m2,s/10));}

Exercice 2

oui. non. Par r´ecurrence sur la longueur du mot. On distingue les cas o`u le mot est vide, de la forme(nw)n et de la formeww’.

class Word { boolean or;

int ty;

Word tl;

Word (boolean x, int y, Word z) {or = x; ty = y; tl = z;}}

static boolean bienforme (Word w, Pile p) { if (w == null) return p.empty();

if (w.or) {p.push (w.ty); return bienforme(w.tl,p);}

if (p.empty ()) return false;

if (p.top () == w.ty) {p.pop();return bienforme(w.tl,p);}

return false;}

(2)

Exercice 3

static void croissante (int p, int m, List l, int n, int k) { if (n >= p) {List.printList(l);System.out.println();}

else {croissante (p,m,new List(k,l),n+1,k);

if (k < m) croissante (p,m,l,n,k+1);}

SoitL(p,m)le nombre de listes croissantes depentiers compris entre0etm. Une m´ethode, parmi d’autres, consiste `a remarquer que les L(p+1,m+1) listes croissantes de p+1 entiers compris entre0etm+1se partitionnent entre celles qui commencent par0et qui sont en nombre L(p,m+1)et celles qui commencent par un autre nombre et qui sont en nombreL(p+1,m). On en d´eduitL(p+1,m+1) = L(p+1,m) + L(p,m+1)et on conclut par une simple r´ecurrence.

Exercice 4

1

2 3

1

3

1

2

0 0

false,true, elle ne termine pas.3,2, une infinit´e.

static boolean parcours2 (Arbre a,ListArbre l) { if (a == null) return false;

if (ListArbre.mem (a,l)) return false;

return (a.val == 0) || parcours2(a.gauche, new ListArbre(a,l)) ||

parcours2(a.droite, new ListArbre(a,l));}

Exercice 5

00000000

111111110000000000000000011111111111111111 000000000 111111 11100000000000000001111111111111111 x

1 2

y

2

Références

Documents relatifs

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..

[r]

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

2.b) Ecrire la s´ ´ emantique d´ enotationnelle [[expr]] des expressions arithm´ etiques a ∈ AExpr, par r´ ecurrence structurelle sur AExpr. Si e est une expression d´ efinie,

a l’affichage V , la valeur de la m´ emoire M , et l’op´ eration courante dans {p, m, t, n}; E est un bool´ een indiquant si l’on est dans le mode programme (apr` es avoir tap´