MAPLE/MATHS/TD 1 LES STRUCTURES DE CONTRÔLE ET LES
Transcription
MAPLE/MATHS/TD 1 LES STRUCTURES DE CONTRÔLE ET LES
MAPLE/MATHS/TD 1 LES STRUCTURES DE CONTRÔLE ET LES PROCEDURES Structure if .. then: la structure : if (condition1) then (instruction 1) elif (condition2) then (instruction2) elif (condition3) then (instruction3) ... else (instructionN) fi; effectue un test selon certaines conditions: elif signifie ’’else, if ’’ . La dernière instruction à exécuter doit être précédée de else . Exemple 1 : résolution de l’équation du premier degré ax+b = 0 . a:=7:b:=3: if a<>0 then x:=-b/a elif b=0 then print(’Tout x est solution’) else print(’Pas de solution’) fi; Structure for .. to: for (variable) from (initiale) to (finale) by (pas) do ... od; Exécute une boucle pour une variable allant d’une valeur initiale à une valeur finale,avec un pas donné. from , by peuvent être omises ou écrites dans un ordre quelconque. Si l’on omet from , initiale vaut 1. Si l’on omet by , pas vaut 1. Exemple 2 : calcul de la somme des 100 premiers entiers naturels somme:=0: for k from 0 to 100 do somme:=somme+k end do: somme; Exemple 3 : calcul de la somme des entiers impairs inférieurs à 100 Ici, on omet from donc la première valeur de k est 1. La dernière valeur prise par k sera 99. somme:=0: for k to 100 by 2 do somme:=somme+k od: somme ; Structure while .. do: while condition do ... od; Exécute une suite d’instructions, tant que la condition est vraie. Exemple 4 : calcul de la somme des 100 premiers entiers naturels somme:=0:k:=-1: while k<100 do k:=k+1:somme:=somme+k od: somme; Les procédures : Un programme MAPLE peut être organisé en sous-programmes appelées procédures . lycée Dessaignes 2007-2008 Une procédure, de type procedure , est définie par le mot-clé proc et peut être assignée à un nom de variable. Pour définir une procédure intitulée nom , on utilisera la syntaxe suivante: nom := proc (paramètres_formels) global variables_globales; (la ligne global est optionnelle) local variables_locales; (la ligne local est optionnelle) option nom_option; (la ligne option est optionnelle) . . . instructions . . . (corps de la procédure) return (résultat de la procédure); end ; Exemple 5: La procédure suivante calcule le nieme terme de la suite définie par la formule de récurrence n−1 un = uk un−1−k etu0 = 1 k=0 suit := proc(n :: integer ); u[0 ] := 1 ; if n >= 1 then for i from 1 to n do u[i]:=sum(u[k]*u[i-1-k],k=0..i-1) od;fi; return(u[n]); end; Remarque importante: Un paramètre formel passé à une procédure ne peut être modifié à l’intérieur de cette procédure Exemple 6: Diviser un entier positif x par 2 tant qu’il est pair. div:=proc(x::posint) while type(x,even) do x:=x/2 od; return(x); end proc; cette procédure ne fonctionne pas car x est un paramètre formel de la procédure: la tentative d’affecter au paramètre formel x sa valeur divisée par 2 provoque une erreur. On peut modifier la procédure de la manière suivante: div:=proc(x::posint) local y; y:=x; while type(y,even) do y:=y/2 od; return(y); end proc; Exemple 7: On parcourt une liste de nombres. Au premier entier trouvé, on sort de la procédure avec pour résultat cet entier s’il est positif , ou -1 si ce nombre est négatif, , sinon on passe au nombre suivant. si il n’y a aucun entier dans la liste on l’indique par un message liste:=proc(L) local k; for k from 1 to nops(L) do if type(k,integer) and k>=0 then return(k) elif type(k,integer) and k<0 then return(-1 ); fi; od; return(’’pas d’entiers dans cette liste’’) end proc; lycée Dessaignes 2007-2008 Récursivité : Une procédure qui fait référence à elle même dans sa définition est une procédure récursive . Exemple 8: factorielle de n factorielle := proc(n::nonnegint) option remember; if n>0 then return(n*factorielle(n-1)) else resturn(1) fi; end proc; ________________________________________________________________________________________ Exercice 1: Ecrire une procédure récursive pour la suite u de l’exemple 5 Exercice 2 : Ecrire une procédure qui détermine si l’entier p est ou non un nombre premier ( rappel TD 1 : test de primalité le plus simple: soit p ∈ N∗ tel que tout entier naturel q qui √ vérifie 2 ≤ q ≤ p ne divise pas p alors p est un nombre premier. ) Exercice 3 : On rappelle l’algorithme d’Euclide dans Z pour a, b entiers relatifs (b = 0) on pose a0 = a, a1 = b puis a0 = a1 q1 + a2 avec 0 ≤ a2 < |a1 | a1 = a2 q2 + a3 avec 0 ≤ a3 < a2 .... ap−1 = ap qp + ap+1 avec 0 ≤ ap+1 < ap on s’arréte quand an+1 = 0 ce qui donne an−2 = an−1 qn−1 + an an−1 = an qn on obtient alors p gcd(a, b) = an (a) Ecrire une procédure déterminant le pgcd de a et b :on définira un tableau a[k] et un tableau q[k] (b) En modifiant un peu la procédure précédente ,écrire une nouvelle procédure qui détermine un couple u, v tel que p gcd(a, b) = au + bv (c) Appliquer cette procédure au calcul du pgcd de deux polynômes , et de Bezout dans C[X] Exercice 4 les nombres de Bernouilli sont définis par récurrence par la formule b0 = 1 et pour n > 0, 0 Ecrire une procédure qui calcule bn n−1 bk k=0 (n−k)! Exercice 5 On appelle Φn la suite des poynômes cyclotomique ( exo semaine 1) elle vérifie Φ1 = X − 1 et X n − 1 = d≥1 et d divise n Φd (X) Ecrire une procédure qui calcule Φn lycée Dessaignes 2007-2008 =