Introduction a` Maple (suite) Rappels Il est fortement conseill´e d’utiliser la commande restart au d´ebut de chaque exercice pour lib´erer les variables de leur affectation. Pensez ` a SAUVEGARDER votre travail r´eguli`erement ! Maple est un logiciel relativement instable et votre professeur d´ecline toute responsabilit´e en cas de perte de votre travail... Prenez l’habitude de consulter l’aide grˆ ace au point d’interrogation ”?” suivi de la commande recherch´ee. 1 Listes et s´ equences. Listes et s´equences sont des outils essentiels `a l’utilisation de Maple, en particulier pour la construction de proc´ edures o` u elles sont omnipr´esentes. Une s´ equence est une collection ordonn´ee d’expressions, s´epar´ees par des virgules. Ces expressions peuvent ˆetre du mˆeme type (par exemple des nombres entiers) ou de types diff´erents (ex : une fonction suivie d’une variable, d’un r´eel et d’une matrice). > S:= x, 2, Pi+1, 3*y+1 ; S := x, 2, π + 1, 3y + 1 Cette s´equence S comporte 4 objets. Il est possible de cr´eer une s´equence avec 0 objet grˆace `a la commande NULL. Ceci se r´ev`elera utile dans les proc´edures. Il est souvent utile d’ajouter des ´el´ements `a une s´equence, ou mˆeme de concat´ener deux s´equences. Pour cela il suffit de les s´eparer par une virgule : > S:=NULL ; S := > T:=Pi,9 ; T := π, 9 > x,S,y,T ; x, y, π, 9 Lorsque la s´equence est issue d’un terme g´en´erique d´ependant d’un param`etre k, la commande seq permet de construire cette s´equence de mani`ere automatique. Notez que l’on peut imbriquer plusieurs seq (et donc plusieurs param`etres). > seq(2*k,k=1..8) ; 2, 4, 6, 8, 10, 12, 14, 16 > seq(i^2,i=-2..2) ; 4, 1, 0, 1, 4 > seq(seq(i+k,i=0..4),k=0..4) ; 0, 1, 2, 3, 4, 1, 2, 3, 4, 5, 2, 3, 4, 5, 6, 3, 4, 5, 6, 7, 4, 5, 6, 7, 8 Exercice 1 Construire les s´equences suivantes en utilisant la commande seq : 1 √ √ √ v) 0, −1, 2, − 3, 2, − 5 i) 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ii) π, 2π, 3π, 4π, 5π vi) 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1 iii) 2, 5, 8, 11, 14, 17, 20 iv) 0, 1 1 3 1 8, 4, 8, 2 vii) a, a + 1, a + 2, a + 3, b, b + 1, b + 2, b + 3 viii) 1, 2, 3, 2, 4, 6, 3, 6, 9, 4, 8, 12, 5, 10, 15 Une liste est une s´equence encadr´ee par des crochets. La diff´erence est essentielle pour Maple qui comprend la liste comme un objet unique. > L:= [1,2,3,x,y] ; L := [1, 2, 3, x, y] Pour connaˆıtre le nombre d’´el´ements d’une liste on utilise la commande nops. Dans une liste L, les ´el´ements sont num´erot´es de 1 ` a nops(L). Pour acc´ eder et modifier les ´el´ements d’une liste, on ´ecrit le nom de la liste suivi, entre crochets, du num´ero de la position de l’objet ` a extraire. > L:= [1,2,3,x,y] : > nops(L) ; 5 > L[1] ; 1 > L[nops(L)] ; y > L[2..4] ; [2, 3, x] > L[2]:=8 ; L2 := 8 > L; [1, 8, 3, x, y] Pour transformer une s´ equence en liste, il suffit d’encadrer la s´equence par des crochets. Pour transformer une liste en s´ equence, on utilise la commande op. Pour supprimer un ´ el´ ement, on utilise la commande subsop. > S:= x, 2, Pi+1, 3*y+1 ; S := x, 2, π + 1, 3y + 1 > L:=[S] ; L := [x, 2, π + 1, 3y + 1] > op(L) ; x, 2, π + 1, 3y + 1 > subsop(3=NULL,L) ; [x, 2, 3y + 1] 2 2 Programmation. Comme tous les logiciels de programmation, Maple a la capacit´e d’automatiser des tˆaches, notamment grˆ ace aux instructions fondamentales if, for, while auxquelles correspond une syntaxe sp´ecifique. 2.1 Proc´ edures. Un des outils principaux de Maple est la cr´eation de programmes ou proc´ edures utilisant ses instructions. Une proc´edure permet d’ex´ecuter plusieurs commandes ou instructions `a l’aide d’un seul programme. Une proc´edure se pr´esente sur le sch´ema suivant : > nom :=proc(arg1,arg2,...) local var1,var2,...; instruction1 ; instruction2 ; ... return resultat ; end proc ; o` u – nom est le nom de la proc´ edure ; – arg1, arg2, . . . sont les arguments de la proc´edure, dont la proc´edure aura besoin pour fonctionner (ils ˆtre modifie ´s a ` l’inte ´rieur de la proce ´dure !) ; ne peuvent pas e – var1, var2, . . . sont les variables locales que la proc´edure utilise et que l’on doit d´eclarer via la commande local ; – instruction1, instruction2, . . . sont des instructions que la proc´edure ex´ecute ; – la commande return permet de renvoyer un r´esultat en fin de proc´edure, en l’occurrence celui que l’on aura indiqu´e dans la variable resultat ; – end proc permet de terminer la proc´edure (c’est indispensable !). Notez que toute la proc´edure s’´ecrit sur la mˆeme ligne de calcul (il n’y a qu’un seul crochet > ). Pour rendre la proc´edure lisible, on d´esire aller ` a la ligne en restant sur la mˆeme ligne de calcul, pour cela il faut taper Shift+Entr´ee. Une fois la proc´edure ´ecrite, on l’utilise en tapant son nom et les arguments dont elle a besoin. Voici un premier exemple : > division:=proc(a,b) local c ; c:=evalf(a/b) ; return c ; end proc ; > division(10,13) ; Cet exemple illustre mal tout le potentiel des proc´edures car il est nettement plus rapide d’effectuer directement la division evalf(a/b) ;. Exercice 2 Recopier la proc´edure division pr´ec´edente en respectant la pr´esentation. Distinguer pr´ecis´ement le nom, les arguments, les variables locales, les instructions et le r´esultat de sortie. Exercice 3 Ecrire une proc´edure toto qui prend en argument un entier n et qui renvoie la liste des entiers de 1 ` a n. ´dure doit e ˆtre teste ´e sur plusieurs exemples ! Attention ! Toute proce 3 2.2 L’instruction conditionnelle if Voici la syntaxe ` a respecter : > if condition then instruction1 instruction2 ... else instructionA instructionB ... fi ; ; ; ; ; Si la condition est vraie, les instructions (instruction1, instruction2,. . . ) qui suivent then sont ex´ecut´ees, sinon ce sont les instructions (instructionA, instructionB,. . . ) qui suivent else. La commande fi marque la fin de l’instruction conditionnelle, l’ex´ecution du programme reprend ensuite normalement. Voici un exemple qui renvoie le maximum entre deux arguments a et b : > maximum:=proc(a,b) local c ; if a>=b then c:=a ; else c:=b ; fi ; return c ; end proc ; La condition doit obligatoirement ˆetre du type ”bool´een”, c’est-`a-dire une variable qui est vraie ou fausse. La commande evalb permet de connaˆıtre la valeur du bool´een. > u:=1 : > evalb(u>0) ; true > evalb(u>2) ; f alse Attention ! Ne confondez pas le symbole ”=” qui teste l’´egalit´e entre deux objets et le symbole d’affectation ”:=” ! Exercice 4 Ecrire une proc´edure signe qui prend en argument un nombre a et qui renvoie −1 si ce nombre est strictement n´egatif et 1 si ce nombre est strictement positif. Que se passe-t-il si a = 0 ? Lorsque l’on veut tester diff´ erentes conditions bool´ eennes, l’instruction conditionnelle if peut ˆetre raffin´ee par l’instruction elif qui peut se traduire par ”sinon si”. Voici un exemple concret : > if a<0 then b:=-1 ; elif a=0 then b:=0 ; else b:=1 ; fi ; Exercice 5 A l’aide de la commande elif, ´ecrire une proc´edure signebis qui prend en argument un nombre a et qui renvoie −1 si ce nombre est strictement n´egatif, 1 s’il est strictement positif et 0 s’il est nul. 4 2.3 La boucle for La boucle for sert ` a r´ep´eter un paquet de commandes plusieurs fois `a la suite. ` l’avance. ˆtre connu a Le nombre de passages dans la boucle doit e Voici la syntaxe ` a respecter : > for compteur from d´ ebut to fin by pas do instruction1 ; instruction2 ; ... od ; Le programme initialise le compteur ` a la valeur d´ ebut puis ex´ecute toutes les instructions (instruction1, instruction2,. . . ) de la boucle. Ensuite il augmente (il ”incr´emente”) la valeur du compteur en fonction du pas et r´eex´ecute les instructions de la boucle. Il continue ainsi tant que le compteur a une valeur inf´erieure ou ´egale ` a fin. Si la valeur du pas n’est pas pr´ecis´ee, elle vaut 1 par d´efaut. Voici un exemple qui renvoie la factorielle d’un argument entier n : > fact:=proc(n) local c,k ; c:=1 ; for k from 1 to n do c:=c*k ; od ; return c ; end proc ; Exercice 6 Ecrire une proc´edure terme qui prend en argument un entier n et qui renvoie une valeur approch´ee du terme un de la suite d´efinie par r´ecurrence par u0 = 1 et uk+1 = ln(uk + 1) Ecrire ensuite une proc´edure listetermes qui renvoie la liste des valeurs approch´ees des n premiers termes de cette suite. 2.4 La boucle while La boucle while sert ` a r´ep´eter un paquet de commandes plusieurs fois `a la suite ; le nombre de fois d´epend d’une condition ´enonc´ee en d´ebut de boucle. ` l’avance. Le nombre de passages dans la boucle n’est pas connu a Voici la syntaxe ` a respecter : > while condition do instruction1 ; instruction2 ; ... od ; Le programme teste si la condition est vraie puis ex´ecute toutes les instructions (instruction1, instruction2,. . . ) de la boucle. Il r´eex´ecute les instructions tant que la condition reste vraie. Voici un exemple qui renvoie le plus petit cube sup´erieur ou ´egal `a n : > cube:=proc(n) local c ; c:=0 ; while c^3<n do c:=c+1 ; od ; return c^3 ; end proc ; 5 Attention ! Une erreur fr´equente est d’´ecrire une condition qui reste toujours vraie. La boucle ne s’arrˆete donc jamais, ce qui entraine un bug de Maple. Exercice 7 Ecrire une proc´edure listecubes d´ependant d’un argument entier n qui renvoie la liste des cubes inf´erieurs ou ´egaux ` a n. 2.5 Remarques importantes 1. Lorsque vous programmez (quel que soit le language utilis´e) il est vital de soigner la lisibilit´ e de votre programme, en particulier en respectant l’indentation dans les instructions if, for, while. En effet, Maple se fiche de votre pr´esentation, mais pas vous (ou votre professeur) qui voudrez vous relire pour chercher vos erreurs ou peaufiner votre programme (surtout pour les longues proc´edures !). 2. Il va de soi que l’on peut imbriquer plusieurs boucles entre elles. C’est une technique `a maitriser si l’on veut construire des programmes plus complexes (cf. remarque ci-dessus). 3. Il est souvent fort utile de commencer a` r´efl´echir `a une proc´edure avec un crayon et du papier en ´ecrivant dans les grandes lignes ”l’architecture” de la proc´edure `a construire. On peut ´egalement dessiner la proc´edure sur un ”sch´ ema algorithmique” qui repr´esente clairement les boucles et les instructions de la proc´edure. 4. Les commandes if, for, while peuvent ˆetre utilis´ees hors des proc´edures. > for k from 1 to 10 do k! ; od ; Dans ce cas, tous les r´esultats interm´ediaires sont affich´es (cela peut ˆetre int´eressant). Si l’on ne d´esire pas les afficher, on peut remplacer le ”;” par un ”:” dans l’instruction principale. 5. D`es que Maple lit la commande return il quitte imm´ ediatement la proc´ edure et renvoie le r´esultat. Cette commande peut ˆetre utilis´ee ` a n’importe quel endroit de la proc´edure (mˆeme `a l’int´erieur d’une boucle). Cela peut, par exemple, ˆetre utile `a l’int´erieur d’un test if. 6. Il est parfois impossible d’exprimer une condition par une seule (in)´egalit´e. Dans ce cas, on peut exprimer la condition par plusieurs (in)´egalit´es s´epar´ees par les op´erateurs and et or, signifiant respectivement ”et” et ”ou”. > while a>0 and a<10 do ... od ; 3 Messages d’erreurs Lorsque certaines instructions sont erron´ees (cela arrivera, c’est ainsi que l’on progresse), Maple renvoie d’habitude un message d’erreur ´ecrit en rose. Les messages d’erreurs les plus fr´equents sont parmi les suivants : 1. missing operator or ; Il s’agit en g´en´eral d’un point-virgule ”;” oubli´e. 2. (in rtble/Sum) invalid arguments Une commande est mal utilis´ee. Elle ne re¸coit pas le bon nombre de variables, ou celles-ci ne sont pas du bon type. 6 3. invalid subscript selector L’op´eration de s´election d’un ´el´ement (d’une liste) est impossible. En g´en´eral c’est une boucle mal initialis´ee qui demande ` a Maple de calculer des objets comme L[0] ou L[-1]. 4. attempting to assign to ... which is protected Certain noms d’objets sont prot´eg´es (par exemple ”D”, ”max”, ”sum”, ”diff”, etc). Si vous tentez de les modifier, ce message apparaˆıt. Dans le mˆeme genre d’erreurs on a aussi ”illegal use of an object as a name”. 5. reserved word ...unexpected Maple a lu une commande qu’il ne s’attendait pas `a lire `a cet endroit. Il s’agit le plus souvent d’une instruction if, for, while erron´ee, par exemple un fi ou od manquant. 6. illegal use of a formal parameter Les arguments d’une proc´edure ne peuvent pas ˆetre modifi´es. Pour ´eviter ce message, il suffit de passer par une variable auxiliaire. 4 Exercices Exercice 8 Ecrire une proc´edure somme prenant en arguments deux entiers a et b et qui calcule la somme des carr´es de tous les nombres entiers compris entre a et b inclus. A l’aide de votre proc´edure, v´erifiez la formule suivante sur plusieurs exemples : n X k=1 k2 = n(n + 1)(2n + 1) 6 Exercice 9 Ecrire une proc´edure insertion qui prend en arguments une liste (non vide) L, un entier p, un nombre a, et qui renvoie une liste correspondant ` a L apr`es insertion du nombre a en p`eme position. Exercice 10 Ecrire une proc´edure fibo prenant en argument un entier n ≥ 2 qui calcule le terme un de la suite de Fibonacci d´efinie par u0 = 1, u1 = 1 et uk+2 = uk+1 + uk Exercice 11 Ecrire une proc´edure maxliste prenant en argument une liste L qui renvoie l’indice du plus grand ´el´ement de la liste. Si plusieurs indices conviennent, la proc´edure renverra le plus petit. Exercice 12 Ecrire une proc´edure termeliste prenant en arguments une liste L et un nombre a qui renvoie une liste contenant les positions du nombre a dans la liste L et une liste vide si a n’apparaˆıt pas dans L. Exercice 13 Sachant que ex = lim n X xk , ´ecrire une proc´edure erreur qui prend en arguments deux r´eels n x X xk x et et qui renvoie le plus petit entier n tel que e − < . k! n→∞ k=0 k! k=0 7
© Copyright 2025 ExpyDoc