I - Avant de ommener
Quelquesrappelsavantdetravailler.Commenezhaquenouvelexerieparun
restart;
pour désaeter toutes les variables éventuellement utilisées dans un alul
préédent.
Sivousavez lané unalul quia l'airde ne pas vouloir seterminer, liquezsur
l'ineSTOP quin'estativequelorsqu'unalulestenours.
Chaunedevosentréesdébuteaprèsunprompt>,setermineparun; a
ouun : b
puisappuyez surla touhe Entrée . Sivous voulezpasserà laligne sansvalider
laligne préédente,tapez Shift* + Entrée .Pourrevenirplushaut, utilisezla
sourisoulesèhesdedéplaement.
II - Listes et séquenes
a. Listes
Les listessont un type de variable partiulier que peut manipulerMAPLE. Une
listese présente souslaforme d'une suite d'objetsséparés pardes virgules entre
rohets:
> L:=[1,2,a ,g, maman,ln(5) ,3/2, x >3
*
x+2,[7,9℄℄
Cettesuite est ORDONNÉE. Ses élémentssont don numérotés.On peut en ex-
traireunélémentpartiulier:
> L[5℄
oubientouslesélémentsdelaliste:
op(L)
oubienunesous-liste:
> L[3..6℄;
Onpeutonnaîtrelatailled'uneliste:
> nops(L );
Onpeutajouterunélémentàuneliste:
> L:=[op(L) ,nouveau℄
Onpeutonaténer deuxlistes:
> L1:=[1,2,3,4℄;
> L2:=[ a ,b, ℄;
> L:=[op(L1 ),op(L2 )℄
Lalistevidesenote:
> V:=[℄;
> nops(V );
Onpeuteetuerdesopérationssurunelistear'estuntypedevariableomme
unautre:
> S:= L1+[op(L2 ),d ℄;
> P:=3
* L1 ;
a. sivousvoulezquelerésultatsoitahé.
b. sivousvoulezqueMAPLEexéutesansaher.
b. Lesséquenes
Ellesressemblentauxlistesmaissanslesrohets.Ladiérenemajeureestpour-
tantqu'onnepeutpasréerdesséquenesdeséquenesalorsqu'onpeutréerdes
listesdelistes.
Plusaessoirement,onpeutmodierunélémentd'une listeà l'aide d'uneae-
tationmaisen'estpaspossiblepouruneséquene:
> S:= a,b ,, d,e ,f ;
> S[3℄;
> S[3℄:=4;
> L:=[ S℄;
> L[3℄:=4;
> L;
Engénéral,ellesserventàfabriquerdeslistes...
> S1:=10,20,30,40,50,6 0;
> S2:=seq(10
*
k ,k =3..10);
> S3:=10
*
k $ k =2..9;
> S4:= m $ 5;
III - Tests
a. Expressions booléennes
Une algèbrede Booleest un ensemble ontenantdeux élémentset muni de deux
loisdeompositioninterneETetOU.
En informatique, un booléen est un type de variable à deux états : true et
falsesurMAPLE.
Lesopérateurslogiquessontandet or.Ilyaaussinotquidonnelanégation.
Par exemple:
> (3>2) and (2=5);
> (3>2) or (2=5);
> (3>2) and not (2=5) ;
Onpeuttesterl'ordreetl'égalitéavedesopérateursrelationnels:<, <=, >, >=,
=, <>.
Quanduneexpressionneontientpasand,orounot,ilfaututiliserevalbouis:
> evalb(3>2);
type denombre
Onnepeutomparerquedesnombresdetypenumeri(i.e.integer,float
etfration) :
> evalb(3>2.);
> evalb(3>7/2);
> evalb(sqrt(2) >1) ;
> evalb(sqrt(2.) >1) ;
b. if...then...else
On utiliselavaleurd'untestpourexéuteruneinstrutiononditionnelledontla
syntaxeest:
if onditionthen instrution1elseinstrution2;
Parexemple:
> if (3>2) then print(' bonjour' ) else print('salut') fi;
> if (3<2) then print(' bonjour' ) else print('salut') fi;
Onpeutériredesinstrutionsonditionnellesenasade:
if ondition1theninstrution1elif ondition2theninstrution2elseinstrution3;
Parexemple:
> a:=1; b:=1; :=1;
> if (b^24
* a
*
>0)
then print(`2 solutions réelles`)
elif ( b^24
* a
* =0)
then print(`1 solution réelle`)
else print(`2 solutions omplexes onjuguées`)
fi;
IV - Proédures
Uneproédureestunefontionàlasyntaxepréisedépendantdeladonnéed'une
séried'argumentset d'uneséried'instrutions.
Lasyntaxegénéraleest:
> nom :=pro(argument1:: type1,argument2:: type2 ,...)
loal var1 , var2 ,... ;
instrutions
end:
Lesprinipauxtypessontfloat,integer,negint,nonnegint,fration,list,et.
Consultezl'aide:?type;
Les variables loales sont elles introduites dans la proédure et dont les noms
serontdésaetésà landelaproédure.
Par exemple:
> Table :=pro( n:: posint)
loal T,k ;
T:=[seq(n
*
k, k=1..10)℄;
printf("La table de %a est %a ",n ,T)
end:
Vous pourrez regarderla syntaxede printf. L'usagedes %a indiquequ'onva les
remplaerdans l'ordre parles variablesformellesqui sont listéesaprès lesguille-
mets.Pouravoirdesnombresottantsonutilise%f.
Par exemple,pourobtenirlatablede5ontape:
> Table (5) ;
On a souventbesoin durésultat d'une proédureet la petite phrasepour faire
jolipeutêtregênante.
Onpréférerauneproéduredeetteforme:
> Table :=pro( n:: posint)
loal k;
RETURN([seq( n
*
k,k =1..10)℄)
end:
Onpeutainsiaherledeuxièmeélémentdelatablede5:
> Table (5) [2℄;
QuedonneTable(5)?
Onpeututiliserunestrutureonditionnelle:
> parite:=pro(n::integer)
if (irem(n,2) =0)
then RETURN(` pair `)
else RETURN(` impair`)
fi
end:
Àvotreavis,querenvoieirem(a,b)?
V - Programmation impérative
C'estletypedeprogrammationleplusrépandu.Onagitdiretementsurlamémoire
de l'ordinateur pour essayer de l'éonomiserà l'aide d'aetations. Nous verrons
queelapeutposerertainsproblèmes.
a. Boules itératives
On veuteetuer uneationunertainnombredefois;onutiliseuneinstrution
dutype:
for var from debut to fin by inrement do
instrutions;
od;
Parexemple:
> Somme :=pro( n:: posint)
loal S,k ;
S:=0;
for k from 1 to n by 1 do
S:= S+2
* k1;
od;
RETURN( S)
end:
Onpeutarrêterl'itérationdèsqu'uneonditionaétéréalisée(etsepasserduto):
> Produit:=pro( n:: posint)
loal P,k ;
P:=1;
for k from 1 while P<n do
P:= P
* k ;
print(k ,P) ;
od;
end:
Expliquez....
Onpeutmêmesepasserdufor:
> quoquo:=pro(a ::nonnegint, b:: posint)
loal q;
q:=1;
while q
*
b<= a do
q:= q+1;
od;
RETURN(q1) ;
end:
Expliquez...
VI - Programmation réursive
On réédes proéduresqui s'appellentelles-mêmes,unpeu selon leprinipe des
suitesdéniesparunerelationu
n+1
=f(u
n
)mais demanièreplusgénérale.
Reprenonsunexempleduparagraphepréédent:
> Somme_r:=pro( n:: posint)
if n =1 then 1
else Somme_r(n1) +2
* n 1;
fi;
end:
Ilfautonnaîtreunassimpleet unmoyendesimplierunasompliqué...
Onpeutobtenir lesrésultats intermédiairesave l'optionremember et endeman-
dantlequatrièmeopérandedelaproédure:
> Somme_r:=pro(n ::posint)
option remember;
if n =1 then 1
else Somme_r( n1) +2
* n1;
fi;
end:
Puis:
Somme_r(9) ;
op(4,eval(Somme_r));
Cette option est malgré tout plus intéressante dans le as de réursions mul-
tiples : les aluls intermédiairesétant stokés, ils n'ont pas à être realulés et
elagagnedutemps.
Parexemple,pourlasuitedeFibonaiu
n+2
=u
n+1 +u
n aveu
0
=u
1
=1 :
> fibo :=pro(n ::nonnegint)
option remember;
if n=0 then RETURN(1) ;
elif n =1 then RETURN(1) ;
else RETURN( fibo (n 1) +fibo(n2) ) ;
fi
end:
Sans l'option remember, fibo(30) prend pas mal de temps mais est instantané
quandonl'ajoute:à nepasoublier...
VII - Exeries
L Exerie1 Partieentière
Trouverunalgorithmeréursifpuisunalgorithmeimpératifdéterminantlapartie
entièred'unentier.
dansleasréursif,onsesouviendraquelapartieentièred'unnombreapparte-
nantà[0;1[estnulle,que[x℄=1+[x-1℄et que[x℄=-1+[x+1℄;
dans le asimpératif,onpartira de zéroet onse promènerasurl'axe des réels
enfaisantdespasdelongueur1.
L Exerie2 Caluls desommes
Donner des proédures impératives et réursives prenant omme argument une
fontionfunentiern
0
etunentiernet quialule n
X
k=n0 f(k).
L Exerie3 Maximum
Donnerdes proéduresimpérativeset réursivesdonnantlemaximumd'une liste
denombresréelsquelonques.
L Exerie4 Têteetqueue
La tête d'une liste est son premier élément. La queue d'une liste est la sous-
liste réée en lui oupant la tête. Donnez deux proédures tete(liste) et
queue(liste).
L Exerie5 Testderoissane
Donner des proédures impérativeset réursivesdéterminantsi une liste donnée
estroissante.Onpourraéventuellementutilisertete etqueue.
L Exerie6 Dihotomie
Pour résoudreuneéquationdu typef(x)=0,on reherhegraphiquementunin-
tervalle[a;b℄oùlafontionsemblehangerdesigne.
Onnoteensuitemlemilieudusegment[a;b℄.Onévaluelesignedef(m).
Si'estlemêmequeeluidef(a)onremplaeaparmetonreommene.Sinon,
'estbqu'onremplaeet onreommenejusqu'àobtenirlapréisionvoulue.
Donneruneproédureréursivepuisuneproédureimpérativeprenantommear-
gumentsunefontion f, les bornes del'intervalled'étude a et bet unepréision
dealuleps.
L Exerie7 Méthodedespartiesproportionnelles
Ilpeutêtreparfoispluseaedeneplusonsidérerlemilieude[a;b℄maisl'abs-
issede l'intersetiondela droitepassantparles points(a;f(a))et (b;f(b)) ave
l'axe desabsisses.Modiezlégèrementvosproédurespréédentesetomparez.
L Exerie8 AlgorithmedeHéron
Hérond'Alexandrieatrouvéuneméthodepermettantdedétermineruneapproxi-
mationdelarainearrée d'unnombrepositifvingt sièlesavantl'apparitiondes
ordinateurs.
Six
n
estuneapproximationstritementpositivepardéfautde p
a,alorsa/x
n est
uneapproximationparexèsde p
a (pourquoi?)et vie-versa.
Lamoyennearithmétiquedeesdeuxapproximationsest 1
2 x
n +
a
x
n
etonstitue
unemeilleureapproximationquelesdeuxpréédentes.
On peut montrer 'est uneapproximation par exès(en développant(x
n -
p
a) 2
parexemple).
Onobtientnaturellementunalgorithme...Donnezuneversionréursivepuisimpé-
rativeprenantenargumentlenombredontonherhelarainearrée,unepremière
approximationx
0
et unepréisioneps.
L Exerie9 Calulde300déimales de
Posonse
n
=1+ 1
1!
+ 1
2!
++ 1
n!
Alorsonaaussi
e
n
=1+1+ 1
2
1+ 1
3
1+ 1
4
1
n-1
1+ 1
n
Un exerielassiquemontreque e-e
n 6
n+2
n+1 1
(n+1)!
.
Ainsi,pourn=167,onobtiendra300bonnesdéimalesaumoins:trouvez-les!
L Exerie10 Méthodedesretangles
Trouvezuneversionréursiveet uneversionimpératived'unalgorithmealulant
uneapproximationd'uneintégraleparlaméthodedesretanglesétantdonnéf,les
bornesaet betdx