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
=