EPREUVE GU : SM4 PM , UE : 412 IP INFO

Exercice 1
Donnez le résultat des suites d'instructions Maple :

> x:=sqrt(7);x:=4*x^2+3;

[Maple Math]

[Maple Math]

> solve(x^2-6*x+8);

[Maple Math]

> op(1,op(2,x*y+z*t));

[Maple Math]

> L1:=[[1,2],8];L2:=[[1,3],[5,[4,7]],9];[op(L1),op(1,L2),op(3..nops(L2),L2)];

[Maple Math]

[Maple Math]

[Maple Math]

Exercice 2

Soit la procédure

> mystere1:=proc(x,y)
local c,ytmp;
c:=0;
ytmp:=0;
while ytmp<=y do
ytmp:=ytmp+x;
c:=c+1
od;
RETURN(c)
end;

[Maple Math]
[Maple Math]

Donner le résultat de mystere1(3,13). On expliquera le déroulement de la procédure.

> mystere1(3,13);

[Maple Math]

A l'intérieur de la procédure x=3 et y=13. Au début c=0 et ytmp=0. Puis on entre dans la boucle tant que.

1 - ytmp<=y donc ytmp=3 et c=1

2 - ytmp<=y donc ytmp=7 et c=2

3 - ytmp<=y donc ytmp=10 et c=3

4 - ytmp<=y donc ytmp=13 et c=4

5 - ytmp<=y donc ytmp=16 et c=5

5 - ytmp>y donc on sort de la boucle.

La procédure retourne la valeur de c soit 5

Pour deux paramètres entiers x et y quelconques, que calcule la procédure mystere1 ?

La procédure mystere1 calcule la partie entière de y/x plus 1.

Exercice 3

Soit la procédure

> mystere2:=proc(x)
if x<3 then 0
else RETURN(mystere2(floor(x/3))+1)
fi
end;

[Maple Math]

Donner le résultat de mystere2(11). On expliquera le déroulement de la procédure.

> mystere2(11);

[Maple Math]

Cette procédure est récursive.
Appel 1 : x=11 donc x>=3 donc la fonction s'appelle avec la valeur floor(x/3) soit 3.

Appel 2 : x=3 donc x>=3 donc la fonction s'appelle avec la valeur floor(x/3) soit 1.

Appel 3 : x=1 donc x<33 donc on retourne 0

donc on retourne 0+1 soit 1
donc on retourne 1+1 soit 2.

L'option trace permet de voir cette exécution.

> mystere2:=proc(x)
option trace;
if x<3 then 0
else RETURN(mystere2(floor(x/3))+1)
fi
end;

[Maple Math]

> mystere2(11);

{--> enter mystere2, args = 11

{--> enter mystere2, args = 3

{--> enter mystere2, args = 1

[Maple Math]

<-- exit mystere2 (now in mystere2) = 0}

<-- exit mystere2 (now in mystere2) = 1}

<-- exit mystere2 (now at top level) = 2}

[Maple Math]

Pour un paramètre entier x quelconque, que calcule la procédure mystere2 ?

La procédure mystere2 calcule l'exposant de la plus grande puissance de 3 inférieure à x.

Exercice 4

Soit le polynôme

[Maple Math]

Ecrire une procédure calculef qui a pour résultat la valeur de ce polynôme pour une valeur de x donnée.

> calculef:=proc(x)
RETURN(x^4-3*x^3+11*x-8)
end:

> calculef(5);

[Maple Math]

Ecrire une procédure remplitT qui remplit un tableau T de dimension n de manière à ce que
T[i]=f(i)

> remplitT:=proc(n)
local T,i;
T:=array(1..n);
for i from 1 to n do
T[i]:=calculef(i)
od:
RETURN(copy(T))
end:

Pour mieux comprendre voici une exécution

> k:=10;

[Maple Math]

> hT:=remplitT(k);

[Maple Math]

Ecrire une procédure remplitU qui remplit un tableau U de dimension n de manière à ce que

[Maple Math]

> remplitU:=proc(T,n)
local U,i;
U:=array(1..n);
U[1]:=T[1];
for i from 2 to n do
U[i]:=U[i-1]+T[i]
od:
RETURN(copy(U))
end:

Pour mieux comprendre voici une exécution

> hU:=remplitU(hT,k);

[Maple Math]

Ecrire une procédure carre qui teste si un nombre est le carré d'un nombre entier.

> carre:=proc(x)
if x>0 then RETURN(evalb(floor(sqrt(x))^2=x))
else false
fi
end:

> carre(4);

[Maple Math]

> carre(5);

[Maple Math]

> carre(-1);

[Maple Math]

Ecrire une procédure chercheCarreT qui retourne la liste des indices i compris entre 1 et n tels que T[i] est le carré d'un nombre entier.

> chercheCarreT:=proc(T,n)
local liste,i;
liste:=NULL;
for i from 1 to n do
if carre(T[i]) then
liste:=liste,i
fi
od:
RETURN([liste])
end:

> chercheCarreT(hT,k);

[Maple Math]