« Introduction à Maple/Procédures » : différence entre les versions

Contenu supprimé Contenu ajouté
passage au geshi
(:Julien:) (discussion | contributions)
Aucun résumé des modifications
Ligne 53 :
La commande <code>return(x)</code> permet aussi de faire retourner un résultat (ici <code>x</code>), mais son utilisation est particulière, car elle interrompt le programme. On ne l'utilise donc qu'en cas de sortie particulière, inattendue, d'une procédure. Dans l'exemple cité plus haut, il n'est pas nécessaire d'utiliser la fonction <code>return()</code>.
 
Exemple d'illustration :
 
<source lang="text">
Ligne 63 :
</source>
 
Cette procédure inutile, ne retourne que la valeur 1 car c'est lors de la première itération de la boucle <code>for</code>, c'est-à-dire quand <code>i</code> possède la valeur 1, que le programme va retourner <code>i</code> et s'interrompre. Aucune autre itération ne sera effectuée, quelque-quelle que soit la valeur de <code>x</code> (pourvu tout de même qu'elle soit supérieure ou égale à 1).
 
=== Les variables ===
 
On peut utiliser des variables dans les procédures Maple (elles sont dites « locales », ce sont par exemplesexemple les variables muettes des <code>for</code>). Pour cela, ilIl n'est enpas pratiquenécessaire riende besoinles deindiquer faire.mais Pourc'est plusfortement conseillé de clartéle cependant,faire onen prendra l'habitudedébut de lescode préciserpour en débutplus de code,clarté en avecutilisant le mot-clé <code>local</code>. Exemple :
 
<source lang="text">
Ligne 186 :
{{Attention
| Avec_fond = oui
| Il faut que, '''dans la boucle''', une instruction modifie ''x'' : si ce n'est paspossible le cas,que la condition peut êtrereste toujours vraie, et alors le programme boucle pour toujoursindéfiniment.
}}
 
Ligne 218 :
Une procédure Maple peut tout à fait s'appeler elle-même, pour résoudre des problèmes de manière récursive. En particulier, les algorithmes de tri les plus efficaces utilisent cette méthode. Pour illustrer cela, nous allons écrire un algorithme qui calcule la (très classique) factorielle d'un entier ''n''.
 
Partons des constatsrésultats suivants :
 
* <math>n! = n \times (n-1)!</math> lorsque ''n'' est strictement positif ;
Ligne 237 :
Lorsqu'on exécute <code>factorielle(6)</code>, Maple affiche le bon résultat : <code>720</code>.
 
Ce type d'utilisation de la récursivité d'une fonction permet de voir tout de suite quel a été l'algorithme qui a engendré la créationl'appel de cette procédure, cependant ce genre d'opération est gourmand en ressources pour Maple, car à chaque nouvel appel de la procédure <code>factorielle</code>, il doit garder en mémoire le résultat précédent de la procédure qui n'est pas finie, pour finalement fermer toutes les procédures lorsqu'il est arrivé à la fin de la récursivité. Cette méthode est donc à utiliser judicieusement ou à défaut, on peut utiliser les boucles <code>for</code> et <code>while</code> vues précédemment.
 
''Remarque : on peut cependant améliorer l'efficacité de la récursivité en demandant à Maple de se souvenir des valeurs précédemment calculées en ajoutant <code>option remember</code> dans l'entête de la procédure.''
Ligne 248 :
 
* définir une procédure avec <code>proc</code> ;
* définir des variables locales avec <code>local</code> ;
* posertester des conditions, avec <code>if … then … else … fi</code> ;
* former des boucles avec <code>for</code> ou <code>while</code> ;
* réaliser des procédures récursives.