Fonctions :
Fonctions à une
seule variables :
>f :=xàx^2+x+1 ;
>f(2) ;
>f(sqrt(2)) ;
>f:= xàif x>0 then x^(1/3) else 3*x^2 fi;
« f:=x->piecewise(x>3,x^2,x-5); »
définit une fonction f telle que f(x)=x2 pour x supérieur à 3, et f(x)=x-5 sinon.
Attention : avant d'évaluer cette fonction il vous faudra taper « readlib(piecewise): ».
Pour définir la
fonction f
de deux variables telle que f(x,y) = x2
+ y2
- 3 ,il suffit de taper « f:=(x,y)->x^2+y^2-3; ».
On peut alors taper, par exemple, « f(2,5); »
Comment
effectuer des répétitions ?
La boucle FOR :
* Essayez : for
k from 1 to 3 do print(k,k^2);od; On aurait pu utiliser une
écriture plus classique :
|
for k from 1 to 3 |
Pour cela il
suffit de taper « Majuscule+Entrée » au lieu de « Entrée »
à la fin de chaque ligne.
En tapant « Entrée » à la dernière ligne, toutes les
autres seront exécutées (c'est l'entrée de « od; »
qui provoque l'exécution du « for »). Essayez
maintenant cela :
|
for k from 1 by .5 to 3 |
* Deux autres syntaxes différentes : ![]()
for var
from debut
by int![]()
to fin
while condition
do ... od; ou :
for var in expression
while condition
do ... od;
Exemple :
r:=2.0;
for i from 2 to 50 by 2 do r:=r*i*i/(i+1)/(i-1) od; Si « from »
ou « by » n'apparaît pas, le champ correspond
ant vaut 1.
Exemple de boucle
« for »
avec « in » : Comment calculer le maximum
d'une liste d'entiers ?
m:=-infinity;
L:=[2,-1,4,5,7,-9]; for x in L do m:=max(x,m); od;
Boucle « do...od; »
seule : c'est une boucle infinie. Pour en sortir il faut utiliser
l'instruction « break ».
i:=0;
do
i:=i+1;
if
i>=10 then break fi;
od;
* On peut parfois avantageusement remplacer une
boucle « for » par des instructions « seq »
(séquence) :
seq(i^2,i=1..10);
seq(x,i=1..5);
convert([seq(i^2,i=1..10)],`+`);
On peut aussi
utiliser l'opérateur « $ » pour itérer :
x$5; f(i)$i=1..6;
Syntaxe : if cond
then ...
elif cond then ...
else
...
fi;
Les parties entre crochets («
» et
«
»
sont optionnelles.
« cond »
désigne les conditions. Exemple :
voici une procédure qui affiche le nombre de jours dans un mois désigné par son
numéro (1 pour janvier,
2 pour février,
3 pour mars,
etc...).
|
if n>12 or n<0
then print (`impossible`) |
Exercices :
1)
Définir la fonction f(x)=x3-y3
si x#y et f(x)=3x2 sinon.
2)
Afficher les entiers de 27 à 152.
3)
Écrire les fonctions suivantes :
1. hypotenuse (longueur,largeur)
2. perimetreDuCercle (rayon)
3. barycentre (x1,coef1,x2,coef2)
4. sommeDesPremiersEntiers (n)
4)
Afficher les entiers de 27 à 52
en ligne.
Solutions
for i from 27 to 152 do i; od;
hypotenuse:=(l,r)->sqrt(l*l+r*r);perimetreDuCercle:=r->Pi*2*r;barycentre:=(x1,coef1,x2,coef2)->(x1*coef1+x2*coef2)/(coef1+coef2);sommeDesPremiersEntiers:=n->n*(n+1)/2; # n premiers entiers NON NULS
s:=NULL:for i from 27 to 52 do s:=s,i: od:s;