next up previous contents
suivant: À vous de jouer... monter: LE LANGAGE XCAS précédent: LE LANGAGE XCAS   Table des matières

Sept 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 Xcas.

  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. Notons p le produit et k l'entier qui part de 1 et qui augment d'une unité jusqu'à atteindre 7. Cela donne

    > p:=1; for( k=1; k<=7; k:=k+1){p:=p*k;}

  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 Xcas traite les listes. Il faudra bien distinguer
    \begin{belet}
\item les \textbf{ensembles} ($set$) qui sont des collections <<~...
...ip
\par
\texttt{> zip((x,y)->x*y,l1,l2);}
\par
\smallskip
\par\par
\end{belet}


    Cela donne

    > rm_all_vars()

    > l:=[k $( k=1..7)]; p:=1; for( k:=1; k<=7; k:=k+1){p:=p*l[k];}

    et on demande p dans l'historique.

  5. Nous pouvons utiliser une boucle $ while$

    > rm_all_vars()

    > p:=1; k:=1; while( k<7){k:=k+1; p:=p*k}

  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$.

    > rm_all_vars() # je ne vous le dirai plus#

    > fact(n):={
    local p,k; # nous aurons besoin de variables locales i.e. internes à la procédure #
    p:=1;
    for( k:=1; k<= n;k:=k+1){ p:=p*k ;}
    } # termine la procédure #

    > fact(32)

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

    > factr(n):={
    if (n==0) 1; # un test $ if...else$ pour régler le cas de 0! #
    else n*factr(n-1);
    }

    > factr(32);

    En fait, ce mécanisme correspond à une suite numérique qui s'écrirait mathématiquement $ u_n=n\times u_{n-1}$ et économise beaucoup de mémoire car elle repart du dernier résultat calculé.


next up previous contents
suivant: À vous de jouer... monter: LE LANGAGE XCAS précédent: LE LANGAGE XCAS   Table des matières
moi 2005-10-12