Page d'accueil
Travaux dirigés
<< TD précédent
TD suivant >>
TD 3.1:
Corrigé TD 3.1
Écrire une procédure
second_degré(a,b,c)
qui résout l'équation du second degré à
coefficients réels:
en distinguant 3 cas selon le signe du discriminant.
TD 3.2:
Corrigé TD 3.2
Écrire une procédure
somme(n)
calculant
récursivement
la somme des entiers de
0
à
n
, pour
n
entier naturel donné.
TD 3.3:
Corrigé TD 3.3
Écrire une procédure
renverser(n)
, qui , étant donné un entier naturel
n
ne comportant pas de
0 dans son écriture décimale , rend pour résultat l'écriture renversée de cet entier .
Prévoir un message d'erreur si l'entier comporte le chiffre 0.
Exemple:
>
renverser(122564);
>
renverser(120325);
Error, (in renverser) le chiffre 0 n'est pas autorisé.
TD 3.4:
Corrigé TD 3.4
Écrire un module
segment
permettant de modéliser un segment du plan, défini par ses deux
points extrémités.Ce module comportera des variables locales exportées rendant comme
résultat la première et la seconde extrémité du segment, sa longueur, et son milieu.
On pourra utiliser le module défini par la procédure
pnt
de l'exercice corrigé
3.2
.
Corrigé du Travail dirigé 3:
TD 3.1:
Énoncé TD 3.1
>
second_degre:=proc(a,b,c)
local delta;
if a=0 then
error "a doit être non nul"
else
delta:=b^2-4*a*c;
if delta<0 then print(`pas de solution`)
elif delta=0 then print(`racine double `,x=-b/(2*a))
else print(`2 racines distinctes `, x=(-b-sqrt(delta))/(2*a),x=(-b+sqrt(delta))/(2*a))
end if;
end if;
end proc;
>
second_degre(0,2,4);
Error, (in second_degre) a doit être non nul
>
second_degre(1,7,2);
>
second_degre(4,4,1);
>
second_degre(1,1,4);
TD 3.2:
Énoncé TD 3.2
La récursivité est fondée sur la formule: somme(
n
)=
n
+somme(
n-1
) pour
et
somme(0)=0.
>
somme:=proc(n::nonnegint)
if n=0 then 0 else n+somme(n-1) end if;
end proc;
>
somme(20);
TD 3.3:
Énoncé TD 3.3
>
renverser:=proc(n::posint)
local a,i,L,n1,n2;
n2:=0;n1:=n;
L:=floor(ln(n)/ln(10))+1; # longueur du nombre n
for i from L-1 to 0 by -1 do
a:=floor(n1/(10^i));
if a=0 then error "le chiffre 0 n'est pas autorisé" else
n2:=n2+10^(L-1-i)*a;
n1:=n1-a*10^i;
end if
end do;
n2
end proc;
>
renverser(122564);
>
renverser(120325);
Error, (in renverser) le chiffre 0 n'est pas autorisé
TD 3.4:
Énoncé TD 3.4
On utilise la procédure
pnt
de l'exercice corrigé
3.2
:
>
pnt:=proc(x,y)
module()
export abscisse,ordonnee;
abscisse:=()->x;
ordonnee:=()->y;
end module
end proc;
>
segment:=proc(p1,p2)
module()
export point1,point2,longueur,milieu;
point1:=()->p1;
point2:=()->p2;
longueur:=()->sqrt((p1:-abscisse()-p2:-abscisse())^2+(p1:-ordonnee()-p2:-ordonnee())^2);
milieu:=()->pnt((p1:-abscisse()+p2:-abscisse())/2,(p1:-ordonnee()+p2:-ordonnee())/2);
end module
end proc;
Etude d'un exemple:
>
A:=pnt(a,b):B:=pnt(c,d):
>
S:=segment(A,B);
>
S:-point1(),S:-point2();
>
S:-longueur();
>
M:=S:-milieu();
>
M:-abscisse(),M:-ordonnee();
|