next up previous
suivant: Des petits exercices de monter: Découverte de MuPAD précédent: Météo

Initiation à la programmation : 7 manières de calculer 7!

  1. Bien sûr, on peut commencer par faire

    $ »$ 7!;

    mais le calcul de $ 7!$ n'est qu'un prétexte pour découvrir sur un exemple simple la syntaxe de programmation MuPAD.

  2. On pourrait alors taper

    $ »$ 1*2*3*4*5*6*7;

    mais les choses pourraient se compliquer au moment de calculer $ 3232!$

  3. Nous allons donc utiliser une boucle $ for$ avec indice numérique : nous partons de 1, puis nous multiplions par 2, puis nous multiplions le produit précédent par 3, etc. Cela donne

    $ »$ p:=1: for k from 1 to 7 step 1 do p:=p*k end_for;

    Ce programme n'est pas optimum. En fait, dans une boucle for, l'instruction step est facultative : elle vaut par défaut 1. Ici, on peut se contenter de

    $ »$ p:=1 for k from 1 to 7 do p:=p*k end_for;

  4. Nous aurions pu créer la liste des entiers de 1 à 7 puis utiliser une boucle $ for$ indexée cette fois par les éléments de la liste. C'est plus compliqué, mais cela nous permet de découvrir comment MuPAD traite les listes. Il faudra bien distinguer


    \begin{belet}
\item les \textbf{ensembles} (\texttt{set}) qui sont des collecti...
... l3:=l1.l2; \char93  pour concaténer\char93 }
\par
\smallskip
\par\end{belet}


    Cela donne

    $ »$ reset();

    $ »$ l:=[k $ k=1..7]: p:=1: for i from 1 to 7 do p:=p*l[i] end_for: p;

  5. Nous pouvons utiliser une boucle while

    $ »$ reset();

    $ »$ p:=1: k:=1: while k<7 do k:=k+1: p:=p*k end_while: p;

  6. C'est bien beau, mais que ferons-nous quand il faudra calculer 32! ou 3232! et tous les autres ? Il faudrait créer un programme (on dira une procédure) qui donne $ n!$ pour tout entier naturel $ n$.

    $ »$ reset(); # je ne vous le dirai plus #

    $ »$ fac:=proc(n)
    local p,k; # nous aurons besoin de variables locales i.e. internes à la procédure, comme des variables d'intégrations à l'intérieur d'une intégrale #
    begin
    p:=1;
    for k to n do p:=p*k end_for;
    end_proc: # termine la procédure #

    $ »$ fac(32);

  7. Le meilleur pour la fin : la procédure récursive, qui s'appelle elle-même

    $ »$ factr:=proc(n)
    begin
    if n=0 then 1 # une boucle if...then...else pour régler le cas de 0! #
    else n*factr(n-1)
    end_if; # symbolise la fin de la boucle #
    end_proc:

    $ »$ factr(32);

    En fait, ce mécanisme correspond à une suite numérique qui s'écrirait mathématiquement $ u_n=n\times u_{n-1}$.


next up previous
suivant: Des petits exercices de monter: Découverte de MuPAD précédent: Météo
moi 2005-06-08