exo123.mw

> restart;

> Exercice 1

Question a

> ens:=proc(E,f)
local n,i,s;

n:=nops(E);s:=NULL;

for i from 1 to n do

if f[i]=1 then s:=s,E[i]; fi;

od;

{s};

end:

> ens([a,b,c,d,e,f],[1,1,0,0,0,1]);

{f, a, b}

>

Question b

> ens2:=proc(E,l)
local n,s;

n:=nops(l);

s:={seq(E[l[k]],k=1..n)};

end:

> ens2([a,b,c,d,e,f],[1,3,4,5]);

{a, c, e, d}

>

Question c

> ens3:=proc(E,l,k)
local i,n,s;

n:=nops(l);s:=NULL;

for i from 1 to n do if l[i]=k then s:=s,E[i]; fi; od;

{s};

end:

> ens3([a,b,c,d],[3,2,2,1],2);

{b, c}

>

Question d

> colle:=(d,z)->[d,op(z)]:

> colle(a,[u_1,u_2,u_3]);

[a, u_1, u_2, u_3]

Question e

> map2(colle,1,{[0,1],[1,0]});

{[1, 0, 1], [1, 1, 0]}

>

Exercice 2

Question a

> parties:=proc(n) options remember;
local gauche,droite,p;

if n=0 then p:={[]} else
on construit les parties de E à n éléments à partir de celles E'= E privé du premier élément noté 0
      gauche:=map2(colle,0,parties(n-1));
gauche contient toutes les parties E' vues comme des parties de E
      droite:=map2(colle,1,parties(n-1));
droite contient toutes les parties de E' aux quelles on ajoute l'élément 0
      p:={op(gauche),op(droite)};
on fusionne ces deux ensembles de parties
fi;

end:        

> parties(3);

{[1, 0, 1], [1, 1, 0], [0, 0, 1], [0, 1, 0], [0, 0, 0], [0, 1, 1], [1, 0, 0], [1, 1, 1]}

Question b

> map2(ens,[a,b,c,d],parties(4));

{{a, d}, {a, c}, {a}, {a, c, d}, {a, b}, {a, b, c, d}, {b, c}, {b, d}, {d}, {c}, {c, d}, {b}, {b, c, d}, {a, b, d}, {a, b, c}, {}}

>

Exercice 3

Question a

> combinaison:=proc(n,k) options remember;
local gauche,droite,combi;

if is(n<0) or is(k<0) or is(k>n) then combi:={};
dans ce cas le problème n'a pas de solution
elif n=0 or k=0 then combi:={[]};
 dans ce cas seule l'ensemble vide convient
taiter le cas n=k est inutile car on le cas k>n ou n<0 ou k<0 suffit à compenser cette absence
On considère
E'=E privé du dernier element noté n
else gauche:=combinaison(n-1,k);
gauche contient les combinaisons à k éléments de E', vues comme des combinaisons de E
    droite:=combinaison(n-1,k-1);
droite contient les combianisons à k-1 éléments de E'
    droite:=map2(colle,n,droite);
on ajoute aux combinaisons de droite, l'élémént n
    combi:={op(gauche),op(droite)};
on fusionne les ensembles de combinaisons droite et gauche
fi;

combi;

end:

> combinaison(4,2);

{[2, 1], [3, 1], [3, 2], [4, 1], [4, 2], [4, 3]}

>

Question b

> map2(ens2,[a,b,c,d,e],combinaison(5,3));

{{a, b, e}, {b, c, e}, {a, c, e}, {b, e, d}, {c, e, d}, {a, e, d}, {a, c, d}, {b, c, d}, {a, b, d}, {a, b, c}}

>

>