4. El\303\251ments de programmation Les mots if (si), then (alors) et else (sinon) sont les trois instructions fondamentales en programmation. La commande elif (sinon si) est une contraction de "else if". 1. L'instruction conditionnelle if Syntaxe : if condition 1 then instruction 1; elif condition 2 then instruction 2; else instruction 3 end; Exemple : affichage du maximum de deux nombres r\303\251els a et b. a:=15;b:=5; if a>=b then print(`max(a,b)`=a) else print(`max(a,b)`=b) end; Exemple : r\303\251solution de l'\303\251quation du premier degr\303\251 ax+b=0. restart; a:=7;b:=3; if a<>0 then print(`Une solution : x `=-b/a) elif b=0 then print(`Tout x est solution`) else print(`Pas de solution`) end; 2. Les boucles for (pour) et while (tant que) Dans une boucle for, un bloc d'instructions est ex\303\251cut\303\251 pour des indices compris entre des valeurs fix\303\251es par le programmeur. Le nombre d'it\303\251rations de la boucle est donc connu \303\240 l'avance. Syntaxe : for i from valeur_d\303\251but to valeur_fin by pas do instruction end; for i from 1 to 10 do evalf(sin(i)) end; for k from -10 to 0 by 2 do print((k)^`3`=k^3) end; Dans une boucle while, un bloc d'instructions est ex\303\251cut\303\251 tant qu'une condition fix\303\251e par programmeur reste vraie. Le nombre d'it\303\251rations de la boucle n'est pas connu \303\240 l'avance. Syntaxe : while condition vraie do instruction end; Ex\303\251cute une suite d'instructions, tant que la condition est vraie. Exemple : donner le premier nombre premier sup\303\251rieur \303\240 44^44. n:=44^44; m:=n:while not(isprime(m)) do m:=m+1 end: print(`le premier nombre premier sup\303\251rieur \303\240 n est`= m); print(`\303\251cart avec n`= m-n); 3. Les proc\303\251dures Maple permet de d\303\251finir de nouvelles fonctions calculant un r\303\251sultat \303\240 partir d'arguments, c'est ce que l'on appelle des proc\303\251dures. Syntaxe : Nom:=proc(arguments) local variables (cette ligne est optionnelle) global variables (cette ligne est optionnelle) instruction 1; instruction 2;... return resultat end; Une variable locale est une variable qui n'est reconnue qu'\303\240 l'int\303\251rieur de la proc\303\251dure, contrairement \303\240 une variable globale accessible en dehors de la proc\303\251dure. Remarque : quand on ex\303\251cute une proc\303\251dure, c'est le r\303\251sultat de la derni\303\250re instruction qui est affich\303\251. Exemple : une suite g\303\251om\303\251trique. proced:=proc(a,n) local u,k; u:=1; for k from 1 to n do u:=a*u end; return u end; seq(proced(2,n),n=0..10); Exemple : les suites de Fibonacci LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYrLUklbXN1YkdGJDYlLUkjbWlHRiQ2JVEidUYnLyUnaXRhbGljR1EldHJ1ZUYnLyUsbWF0aHZhcmlhbnRHUSdpdGFsaWNGJy1GIzYnLUYjNiktRi82JVEibkYnRjJGNS1JI21vR0YkNi1RIitGJy9GNlEnbm9ybWFsRicvJSZmZW5jZUdRJmZhbHNlRicvJSpzZXBhcmF0b3JHRkcvJSlzdHJldGNoeUdGRy8lKnN5bW1ldHJpY0dGRy8lKGxhcmdlb3BHRkcvJS5tb3ZhYmxlbGltaXRzR0ZHLyUnYWNjZW50R0ZHLyUnbHNwYWNlR1EsMC4yMjIyMjIyZW1GJy8lJ3JzcGFjZUdGVi1JI21uR0YkNiRRIjJGJ0ZDLyUrZm9yZWdyb3VuZEdRKlswLDAsMjU1XUYnLyUpcmVhZG9ubHlHRjQvJTBmb250X3N0eWxlX25hbWVHUSoyRH5PdXRwdXRGJ0ZDRmduRmpuRlxvRkMvJS9zdWJzY3JpcHRzaGlmdEdRIjBGJy1GQDYtUSI9RidGQ0ZFRkhGSkZMRk5GUEZSL0ZVUSwwLjI3Nzc3NzhlbUYnL0ZYRmZvLUYsNiUtRi82JVEjYXVGJ0YyRjUtRiM2Jy1GIzYpRjxGPy1GWjYkUSIxRidGQ0ZnbkZqbkZcb0ZDRmduRmpuRlxvRkNGX29GPy1GLDYlLUYvNiVRI2J1RidGMkY1LUYjNidGPEZnbkZqbkZcb0ZDRl9vRmduRmpuRlxvRkM=. restart; proced:=proc(a,b,u0,u1,n) local u,k; u:=u0,u1; for k from 1 to n do u:=u[2],b*u[1]+a*u[2] end; return u[1] end; seq(proced(1,1,0,1,n),n=0..20); # c'est la suite u_0=0,u_1=1,u_(n+2)=u_(n+1)+u_n v:=n->(((1+sqrt(5))/2)^n-((1-sqrt(5))/2)^n)/sqrt(5); simplify(v(100)-proced(1,1,0,1,100)); V\303\251rification : on compare LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYoLUklbXN1YkdGJDYlLUkjbWlHRiQ2JVEidUYnLyUnaXRhbGljR1EldHJ1ZUYnLyUsbWF0aHZhcmlhbnRHUSdpdGFsaWNGJy1GIzYnLUYvNiVRIm5GJ0YyRjUvJStmb3JlZ3JvdW5kR1EqWzAsMCwyNTVdRicvJSlyZWFkb25seUdGNC8lMGZvbnRfc3R5bGVfbmFtZUdRKjJEfk91dHB1dEYnL0Y2USdub3JtYWxGJy8lL3N1YnNjcmlwdHNoaWZ0R1EiMEYnLUYvNiNRIUYnRj1GQEZCRkU= et LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYnLUklbXN1YkdGJDYlLUkjbWlHRiQ2JVEidkYnLyUnaXRhbGljR1EldHJ1ZUYnLyUsbWF0aHZhcmlhbnRHUSdpdGFsaWNGJy1GIzYnLUYvNiVRIm5GJ0YyRjUvJStmb3JlZ3JvdW5kR1EqWzAsMCwyNTVdRicvJSlyZWFkb25seUdGNC8lMGZvbnRfc3R5bGVfbmFtZUdRKjJEfk91dHB1dEYnL0Y2USdub3JtYWxGJy8lL3N1YnNjcmlwdHNoaWZ0R1EiMEYnRj1GQEZCRkU=. n:=0;N:=100:while simplify(v(n)-proced(1,1,0,1,n))=0 and n<N do n:=n+1 end: if n=N then print(`l'\303\251galit\303\251 u=v est vraie jusqu'\303\240 l'entier` =N) else print(`l'\303\251galit\303\251 u=v est fausse`) end; Exemple : les flocons de Von Koch. restart; Von_Koch:=proc(n,xa,ya,xb,yb) local x1,y1,x2,y2,x3,y3; if n=0 then [xa,ya],[xb,yb] else x1:=evalf((2*xa+xb)/3);y1:=evalf((2*ya+yb)/3); x3:=evalf((xa+2*xb)/3);y3:=evalf((ya+2*yb)/3); x2:=evalf(1/2*(x1+x3-sqrt(3)*(y3-y1))); y2:=evalf(1/2*(y1+y3+sqrt(3)*(x3-x1))); Von_Koch(n-1,xa,ya,x1,y1),Von_Koch(n-1,x1,y1,x2,y2), Von_Koch(n-1,x2,y2,x3,y3),Von_Koch(n-1,x3,y3,xb,yb) end; end; for k from 0 to 5 do 'k'=k;plot([Von_Koch(k,0,0,1,0)],axes=none,scaling=constrained) end; plot({seq([Von_Koch(k,0,0,1,1)],k=0..5)},axes=none,scaling=constrained,color=black); Exemple : les ensembles de Sierpinski. restart;with(plots): sierpinski:=proc(x,y,a,n,p) local b; b:=1/(2*evalf(sum(cos(2*q*Pi/n),q=0..floor(n/4)))); if p=0 then polygonplot([seq([x+a*cos(k*2*Pi/n-(n+2)*Pi/(2*n)), y+a*sin(k*2*Pi/n-(n+2)*Pi/(2*n))],k=1..n)]) else seq(sierpinski(x+(1-b)*a*cos(k*2*Pi/n-(n+2)*Pi/(2*n)), y+(1-b)*a*sin(k*2*Pi/n-(n+2)*Pi/(2*n)),a*b,n,p-1),k=1..n) end; end; for k from 0 to 5 do display(sierpinski(0,0,1,3,k),axes=none,scaling=constrained) end; for k from 0 to 4 do display(sierpinski(0,0,1,5,k),axes=none,scaling=constrained) end;