\documentclass[a4paper,11pt]{article}
\textheight 23 cm 
\topmargin -1.5 cm
\usepackage{graphicx}
\usepackage{amsmath}
\usepackage{amsfonts}
\usepackage{amssymb}
\usepackage{stmaryrd}
\usepackage{makeidx}
\usepackage{times}
 \usepackage{pst-plot}
\usepackage{ifpdf}
\ifpdf
 \usepackage[pdftex,colorlinks]{hyperref}
\else 
 \usepackage[colorlinks]{hyperref}
\usepackage{pst-plot}
\fi
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage[francais]{babel}
\usepackage{latexsym}
\usepackage{sectsty}
\newtheorem{thm}{Théorème}
\newtheorem{defn}{Définition}
\newcommand{\tr}{\,\,\mbox{trace\,}}
\newcommand{\R}{{\mathbb{R}}}
\newcommand{\Q}{{\mathbb{Q}}}
\newcommand{\C}{{\mathbb{C}}}
\newcommand{\Z}{{\mathbb{Z}}}
\newcommand{\N}{{\mathbb{N}}}
\newcommand{\asinh}{\,\,\mbox{asinh\,}}
\newcommand{\atanh}{\,\,\mbox{atanh\,}}
\newcommand{\acos}{\,\,\mbox{acos\,}}
\newcommand{\atan}{\,\,\mbox{atan\,}}
\newcommand{\suj}[1]{\begin{center}\framebox{\begin{minipage}{15cm}
\smallskip{\Large  #1  }\smallskip\end{minipage}}\end{center}}
\newcommand{\bs}{\symbol{92}}
\newcommand{\cir}{\symbol{94}}
\usepackage{pst-plot,color}
\usepackage{graphicx}
\title {{\bf Xcas au lyc\'ee}}
\author{Ren\'ee De Graeve \& Bernard Parisse\\Université de Grenoble I}

\date{}
\begin{document}
\maketitle
%\newpage 
%{\bf \centerline{Introduction}}
%\vspace{0.2cm}
Xcas, au départ un logiciel de calcul formel,
permet aujourd'hui de faire de l'algorithmique, de la géométrie interactive et 
analytique dans le plan et l'espace et propose un tableur formel, d'où son nom 
de ``couteau suisse des mathématiques''.
Il s'agit d'un logiciel libre, disponible sous Windows, Mac OS et Linux,
la version \`a jour se r\'ecup\`ere en tapant \verb|xcas| sur un moteur
de recherche ou directement depuis le site de Xcas (adresse ci-dessous).

Ce fascicule 
%réalisé pour l'APMEP 2012 
contient des fiches de présentation
rapide des différents modules de Xcas, accompagnées d'exemples ou/et de petits 
exercices 
corrigés, y compris sur les nouveaux programmes de lycée (proba-stats et 
spécialité Terminale S). Il est assez condensé pour tenir peu de place,
de nombreux autres documents sont disponibles dans la documentation en ligne 
de Xcas, sur le site web de Xcas (page pédagogique en particulier), le forum de
Xcas permet de poser des questions, et aussi de voir ce que des collègues
ont pu réaliser en classe.

Site web, page pédagogique et forum de Xcas~:
\begin{itemize}
\item \verb|www-fourier.ujf-grenoble.fr/~parisse/giac_fr.html|
\item \verb|www-fourier.ujf-grenoble.fr/~parisse/irem.html|
%\item page algorithmique \\
%\verb|www-fourier.ujf-grenoble.fr/~parisse/algo.html|
\item {\tt http://xcas.e.ujf-grenoble.fr/XCAS}
\end{itemize}

%\newpage
%\printindex
%\newpage
\tableofcontents
\newpage
\part{Fiche {\tt Xcas}  l'interface}
%\section{Interface, objets.}
%\vskip 2mm
\begin{center}
\begin{tabular}{|ll|}
\hline
\multicolumn{2}{|c|}{\bf Description de l'interface}\\
\hline\hline
\framebox{{\tt Fich Edit Cfg Aide ...}}& est une barre de menu cliquable\\
\framebox{{\tt session1.xws}} & est le nom de la session (c'est \framebox{\tt Unnamed} \\
 & si la session n'a pas \'et\'e sauv\'ee)\\
\framebox{{\tt ?}}& ouvre l'index de l'aide\\
\framebox{{\tt Sauve}}&  sauvegarde la session \\
\framebox{{\tt Config : exact reel...}}& ouvre la configuration du CAS\\
\framebox{{\tt STOP}}& interrompt un calcul trop long\\
\framebox{{\tt Kbd}}& fait apparaitre un clavier scientifique\\
\framebox{{\tt X}}& ferme la session\\
\framebox{{\tt 1$\arrowvert$\hspace*{4.8cm}}} & est une ligne de commande\\
\hline
\end{tabular}
\end{center}
Chaque session est compos\'ee de niveaux num\'erot\'es qui peuvent être de 
diff\'erentes natures~: ligne de commandes pour le calcul formel, \'ecran de
g\'eom\'etrie dynamique (2-d et 3-d), tableur formel, 
dessin tortue, \'editeur de programmes etc...\\
\verb@Alt+g@ signifie \verb@Alt@ puis \verb@g@ en laissant \verb@Alt@ enfonc\'e.
\begin{center}
\begin{tabular}{|ll|}
\hline
\multicolumn{2}{|c|}{\bf Les diff\'erents niveaux possibles}\\
\hline\hline
\verb@Alt+c@& ouvre une ligne de commentaires\\
\verb@Alt+d@& ouvre un niveau de dessin tortue\\
\verb@Alt+e@& ouvre un \'editeur d'expressions\\
\verb@Alt+g@& ouvre un niveau de g\'eom\'etrie 2-d\\
\verb@Alt+h@& ouvre un niveau de g\'eom\'etrie 3-d\\
\verb@Alt+n@& ouvre une ligne d'entr\'ee de commandes\\
\verb@Alt+p@& ouvre un \'editeur de programmes\\
\verb@Alt+t@& ouvre un tableur\\
\hline
\end{tabular}
\end{center}

%\section{Les aides}
%\vskip 2mm
Les commandes sont classées par thème dans les menus, on peut aussi les 
retrouver par ordre alphab\'etique dans l'index de 
l'aide ({\tt Aide$\blacktriangleright$Index}). Vous avez aussi plusieurs 
manuels disponibles avec des exercices corrig\'es 
(avec le menu {\tt Aide$\blacktriangleright$Manuels$\blacktriangleright$...}) 
et des exemples (avec le menu {\tt Aide$\blacktriangleright$Exemples}). \\
\begin{center}
\begin{tabular}{|ll|}
\hline
\multicolumn{2}{|c|}{\bf Les aides possibles}\\
\hline\hline
{\tt Aide$\blacktriangleright$Manuels$\blacktriangleright$...}& ouvre un des manuels dans votre navigateur\\
{\tt Aide$\blacktriangleright$Exemples$\blacktriangleright$...}& ouvre la session de l'exemple choisi dans {\tt Xcas}\\
{\tt \framebox{F12}} & recherche d'un mot-clef dans les manuels\\
{\tt Aide$\blacktriangleright$Index}& ouvre l'index de l'aide des commandes\\
{\tt Cmds$\blacktriangleright$Reel$\blacktriangleright$Base$\blacktriangleright$ceil}& 
ouvre l'index de l'aide à {\tt ceil}\\
{\tt \framebox{?}}&  ouvre l'index de l'aide des commandes\\
{\tt ce\framebox{?}}&  ouvre l'index de l'aide sur {\tt ceil}\\
{\tt ce\framebox{F1}}&  ouvre l'index de l'aide sur {\tt ceil}\\
{\tt ce\framebox{$\rightleftarrows$}}&  ouvre l'index de l'aide sur {\tt ceil}\\
\verb@?ceil@& ouvre l'aide d\'etaill\'ee sur {\tt ceil}\\
\hline
\end{tabular}
\end{center} 
\newpage
\noindent {\tt Xcas} manipule diff\'erents types de donn\'ees :les entiers (\verb|2|),
les fractions (\verb|3/2|), les nombres flottants (\verb|2.0|,\verb|1.5|), 
les param\`etres formels (\verb|x,t|), les variables (\verb|a:=2|), les 
expressions (\verb|x^2-1|), les fonctions (\verb|f(x):=x^2-1|), les listes 
(\verb|[1,2,3]|), les 
s\'equences (\verb|1,2,3|) (une matrice est une liste de listes de même 
longueur, une séquence ne peut pas contenir de séquences), les chaines de caract\`eres (\verb|"na"|) 
et les objets g\'eom\'etriques.\\
{\tt Xcas} peut faire du calcul formel et du calcul num\'erique.\\
Pour faire du calcul formel, on utilise les nombres exacts. Les nombres exacts sont les constantes 
pr\'ed\'efinies comme \verb@pi@,\verb@e@,\verb@i@,\verb@infinity@,
\verb@+infinity@, \verb@-infinity@,
les entiers comme \verb@2@, les fractions d'entiers comme \verb@1/2@ et  toute expression ne contenant que des entiers et des 
constantes comme \verb|sqrt(2)*e^(i*pi/3)|.
Les calculs sont effectu\'es en mode exact si tous les nombres qui
interviennent sont exacts, (\verb@3/2+1@ renvoie 
\verb@5/2@). La commande \verb@evalf@ renvoie la valeur approch\'ee d'une valeur exacte ({\tt evalf(1/2)} renvoie {\tt 0.5}).\\
Pour faire du calcul num\'erique,
on utilise les nombres approch\'es. Les nombres approch\'es sont not\'es avec 
la notation scientifique 
standard~: partie enti\`ere suivie du point de s\'eparation 
et partie fractionnaire (\'eventuellement
suivie de \verb|e| et d'un exposant) : \verb@0.5@ ou \verb@5e-1@ est la version approch\'ee du rationnel \verb@1/2@.\\
Les calculs sont effectu\'es en mode approch\'e si
un des nombres de l'expression est approch\'e, (\verb@1.5+1@ 
renvoie  \verb@2.5@).
Pour les nombres r\'eels approch\'es, la pr\'ecision par d\'efaut est
d'environ 15 chiffres significatifs. Elle peut \^etre chang\'ee, en
donnant le nombre de d\'ecimales d\'esir\'e comme second argument de \verb@evalf@, par exemple {\tt evalf(sqrt(2),50)} ou en modifiant la variable \verb@Digits@.\index{Digits}par exemple, {\tt Digits:=50; evalf(sqrt(2))}.

Il ne faut pas confondre expression et fonction.
Une expression est une combinaison de nombres et de variables
reli\'es par des op\'erations alors qu'une 
fonction associe \`a une variable une expression. Par exemple,
\verb|a:=x^2+2*x+1| définit une expression et
\verb|b(x):=x^2+2*x+1| définit une fonction. 
On obtient la valeur de l'expression \verb|a| en 0, avec
\verb|subst(a,x=0)| et  la valeur de la fonction \verb|b| en 0, 
avec \verb|b(0)|.
\begin{center}
\begin{tabular}{|ll|}
\hline
\multicolumn{2}{|c|}{\bf Signification des signes de ponctuation}\\
\hline\hline
\verb|.|& s\'epare la partie enti\`ere de la partie d\'ecimale\\
\verb|,|& s\'epare les \'el\'ements d'une liste ou d'une s\'equence \\
\verb|;|& termine chaque instruction d'un programme \\
\verb|:;|&  termine les instructions lorsqu'on ne veut pas l'affichage de la r\'eponse\\
\verb|!|& n! est la factorielle de n (4!=$1\cdot 2\cdot3\cdot4=24$)\\
\hline
\verb|:=|& \verb|a:=2| instruction d'affectation qui stocke \verb|2| dans la variable \verb|a|\\
\verb|[]|& d\'elimiteurs d'une liste (\verb|L:=[0,2,4]| et \verb|L[1]| renvoie \verb|2|)\\
\verb|""|& d\'elimiteurs d'une chaine de caract\`eres (\verb|C:="ba"| et \verb|C[1]| renvoie \verb|"a"|)\\
\hline
\end{tabular}
\end{center}

%\section{Les configurations}
%\vskip 2mm
%Configurer permet de d\'efinir les param\`etres de votre environnement.
\begin{center}
\begin{tabular}{|ll|}
\hline
\multicolumn{2}{|c|}{\bf Les diff\'erentes configurations pour d\'efinir votre environnement}\\
\hline\hline
$\blacktriangleright$ & d\'esigne un sous-menu à choisir \\
{\tt Cfg$\blacktriangleright$Configuration du CAS}& ouvre la 
configuration du CAS\\
{\tt Cfg$\blacktriangleright$Configuration graphique}& ouvre la 
config. graphique par d\'efaut\\
{\tt Cfg$\blacktriangleright$Configuration generale}& ouvre la  
configuration g\'en\'erale\\
\verb@bouton cfg@ (d'une sortie graphique)& ouvre la config. du niveau graphique\\
\verb@bouton Config : exact...@& ouvre la 
configuration du CAS\\
\verb@bouton Config tableur :@& ouvre la configuration du tableur\\
\hline
\end{tabular}
\end{center}
%Vous pouvez modifier l'aspect de l'interface et sauvegarder vos
%modifications pour les utilisations futures (menu \verb@Cfg@).
%\section{Les niveaux}
%\vskip 2mm

\newpage
\section{Exemples d'utilisation}
\subsection{Les diff\'erents niveaux}
Dans une ligne d'{\bf entr\'ee de commande} 
(\verb@Alt+n@ ou {\tt CAS$\blacktriangleright$Nouvelle entree}), 
on tape : {\tt f(x):=ln(2x);simplify(f(2)+f(3))} et on obtient : {\tt ln(24)}.\\
Certaines commandes ont un résultat graphique, par exemple\\
\hfill {\tt plot(sin(x),x=0..pi) }
trace le graphe de la fonction sinus sur $[0,\pi]$.

Dans un \'editeur de {\bf programmes} (\verb@Alt+p@ ou
{\tt Prg$\blacktriangleright$Nouveau programme}), on tape~\\
\verb|f(a,b,c):={|\\
\verb| local d; d:=b^2-4*a*c;|\\
\verb| si d<0 alors retourne []; sinon|\\
\verb|  d:=sqrt(d)|; \\
\verb|  retourne [(-b-d)/(2*a),(-b+d)/(2*a)];|\\
\verb| fsi;|\\
\verb|} :;| \\
on appuie sur {\tt OK} (ou {\tt F9}). Sur une ligne de commande, on tape 
{\tt f(1,1,1)} et on obtient {\tt []} ou  on tape {\tt f(1,-5,6)} et on obtient 
{\tt [2,3]}.

Dans un niveau de {\bf g\'eom\'etrie 2d} (\verb@Alt+g@ ou 
{\tt Geo$\blacktriangleright$Nouvellefigure 2d}), on choisit {\tt Mode$\blacktriangleright$point} et on clique 3 points dans l'\'ecran. On obtient {\tt A,B,C} 
et leurs d\'efinitions dans les lignes de commandes \`a gauche de l'\'ecran.\\
On tape \`a gauche de l'\'ecran : {\tt  triangle(A,B,C);mediane(A,B,C;)}.\\ 
En {\tt Mode$\blacktriangleright$Pointeur} on peut d\'eplacer {\tt A} avec la souris et modifier la figure.
%une barre de menus, une ligne de commande \a droite et un \'ecran de g\'eom\'etrie 2d \`a gauche }\\

Dans un {\bf tableur} (\verb@Alt+t@ ou {\tt Tableur$\blacktriangleright$Nouveau tableur}), on remplit la fen\^etre de configuration qui s'ouvre automatiquement
et on la valide avec {\tt OK}.\\
On clique sur {\tt A0} et on tape {\tt 1 Enter} et {\tt 1} s'inscrit dans la 
ligne de commande situ\'ee sous la barre de menu du tableur.
On clique sur {\tt A1} et on tape {\tt =A0+1 Enter}, on clique sur {\tt B0} et 
on tape {\tt =A0\verb|^|2 Enter}.\\
Puis on recopie ces 2 formules vers le bas : on clique  sur {\tt A1} (resp {\tt B0})
puis {\tt Ctrl+d} (ou menu du tableur {\tt Edit$\blacktriangleright$Remplir$\blacktriangleright$Copier vers le bas}).\\
On obtient : {\tt dans A la liste des entiers et dans B la liste de leurs 
carr\'es}.

Dans un {\bf dessin tortue} (\verb@Alt+d@ ou {\tt Tortue$\blacktriangleright$Dessin tortue}), on a la tortue sous la forme d'une fl\`eche dans un \'ecran de 
dessin avec une ligne de commande \`a gauche, un \'editeur \`a droite et en 
bas des boutons qui inscrivent les principales commandes l\`a o\`u se trouve le
curseur (soit dans l'\'editeur, soit dans une ligne de commande).
{\bf Attention} Tout ce que l'on valide \`a gauche s'inscrit  \`a droite. On 
peut modifier l'\'editeur pour corriger une erreur puis l'ex\'ecuter avec 
{\tt OK}


\subsection{Les signes de ponctuation}
\noindent Si on tape {\tt sqrt(2)}, on obtient {\tt sqrt(2)}\\
Si on tape {\tt sqrt(2.)}, on obtient {\tt 1.41421356237}.
En effet, dans le deuxième cas le point après le 2 désigne un nombre approché.\\
On tape pour avoir la valeur approch\`ee avec 20 d\'ecimales:\\
{\tt evalf(sqrt(2),20)}\\
On obtient :\\
{\tt 1.41421356237309504880}\\
On tape :\\
{\tt a:=20!;b:=string(a);dim(b)}\\
On obtient factorielle 20, sa valeur convertie en chaine de caract\`eres et la 
longueur de cette chaine c'est \`a dire le nombre de chiffres de 20!:\\
{\tt 2432902008176640000,"2432902008176640000",19}\\
On tape :\\
{\tt a:=20!:;b:=string(a):;dim(b)}\\
On obtient, car {\tt :;} indique qu'il ne faut pas afficher le r\'esultat :\\
{\tt "Done","Done",19}\\
On tape :\\
{\tt v1:=[1,2,3];v2:=[-1,2,-3];v1*v2}\\
On obtient {\tt v1}, {\tt v2} et le produit scalaire de {\tt v1} et {\tt v2} :\\
{\tt [1,2,3],[-1,2,-3],-6}\\
On tape :\\
{\tt M1:=[[1,2],[3,4]];M2:=[[1,3],[2,4]];M1*M2}\\
On obtient  {\tt M1}, {\tt M2} et le produit des matrices {\tt M1} et {\tt M2} :\\
{\tt [[1,2],[3,4]],[[1,3],[2,4]],[[5,11],[11,25]]}

\subsection{Les aides}
\noindent Si on connait le nom de la commande, on clique :
{\tt Aide$\blacktriangleright$Index}\\
On obtient :
{\tt la liste des commandes par ordre alphab\'etique, un curseur permet de 
parcourir cette liste et une ligne d'ent\'ee permet d'ouvrir l'index \`a la 
demande}\\
Ou bien, on tape :\\
{\tt le d\'ebut d'un nom puis sur le bouton $\framebox{?}$ (sur fond cyan) ou sur la touche de tabulation}.\\
On obtient :\\
{\tt l'ouverture de l'index \`a l'endroit indiqu\'e}\\
Ou bien on utilise les menus qui classent les commandes par th\`eme, 
par exemple, on clique :
{\tt Cmds$\blacktriangleright$Entier$\blacktriangleright$iegcd}\\
On obtient, si dans {\tt Cfg$\blacktriangleright$Configuration generale} on n'a 
pas coch\'e {\tt Aide automatique} :\\
{\tt l'aide sur cette commande dans la fen\^etre des messages \\
(\framebox{kbd}$\blacktriangleright$\framebox{msg})}
et si  on a coch\'e 
{\tt Aide automatique}, on obtient en plus :
{\tt l'ouverture de l'index \`a iegcd}.
\subsection{Les configurations}
\noindent En plus des diff\'erentes configurations, il faut :
\begin{itemize}
\item dans un niveau de g\'eom\'etrie ou un graphe 2d (resp 3d) penser \`a 
utiliser le menu {\tt M} situ\'e 
dans le pav\'e des boutons \`a droite de l'\'ecran. Il permet de g\'erer des
animations ou des traces (resp de g\'erer les vues d'une figure 3d).\\
de cocher ou d\'ecocher la case \framebox{$\sim$} selon que l'on veut des 
points \`a coordonn\'ees flottantes ou exactes.
\item dans un niveau de dessin tortue,  penser \`a utiliser le menu {\tt M} 
situ\'e sous l'\'ecran de dessin, \`a droite : vous pouvez ainsi faire 
apparaitre (ou non) un maillage et cacher le carr\'e jaune en haut \`a droite 
qui donne la position de la tortue.  
\end{itemize}
\newpage 
\part{Fiche {\tt Xcas} calcul formel de base}
L'ex\'ecution d'une ligne de commandes se fait par la touche "Entr\'ee".
Les nombres peuvent \^etre exacts ou approch\'es (flottants).
Les nombres exacts sont les constantes pr\'ed\'efinies, les entiers, 
les fractions d'entiers et toutes  expressions 
ne contenant que des entiers et des constantes.
Les nombres approch\'es sont not\'es avec la notation scientifique 
standard~: partie enti\`ere suivie du point de s\'eparation 
et partie fractionnaire optionnellement suivie de \verb|e| et d'un exposant.

\begin{minipage}[h]{3cm}
%\vskip 2mm
\begin{center}
\begin{tabular}{|ll|}
\hline
\multicolumn{2}{|c|}{\bf Op\'erations}\\
\hline\hline
\verb@+@& addition\\
\verb@-@& soustraction \\
\verb@*@& mutiplication  \\
\verb@/@& division\\
\verb@^@& puissance  \\
\hline
\end{tabular}
\end{center}
\end{minipage}
\hspace{1cm}
\begin{minipage}[h]{6cm}
\vskip 2mm
\begin{center}
\begin{tabular}{|ll|}
\hline
\multicolumn{2}{|c|}{\bf Constantes pr\'ed\'efinies}\\
\hline\hline
\verb|pi|&$\pi\simeq 3.14159265359$ \\
\verb|e|&$e\simeq 2.71828182846$  \\
\verb|i|&$i^2=-1$ et\verb| arg(i)|=$\frac{\pi}{2}$  \\
\verb|infinity|&$\infty$  \\
\verb|+infinity| ou \verb|inf|&$+\infty$  \\
\verb|-infinity| ou \verb|-inf|&$-\infty$  \\
\verb|euler_gamma|& constante d'Euler\\
\hline
\end{tabular}
\end{center}
\end{minipage}
\begin{center}
\begin{tabular}{|ll|ll|}
\hline
\multicolumn{4}{|c|}{\bf Fonctions classiques}\\
\hline\hline
\verb|evalf(t,n)|& \'evalue $t$ avec $n$ d\'ecimales&\verb|sign| & signe (vaut -1, 0 ou +1)\\
\verb|max|& maximum&\verb|min| & minimum\\
\verb|round|& arrondi &\verb@frac@& partie fractionnaire\\
\verb|floor|& plus grand entier $\leq$&\verb|ceil| & plus petit entier $\geq $\\
\hline
\verb|re|& partie r\'eelle&\verb|im| & partie imaginaire\\
\verb|abs|& module ou valeur absolue&\verb|arg| & argument\\
\verb|conj|& conjugu\'e&\verb|affixe| & affixe\\
\hline
\verb|factorial|& factorielle&
\verb|binomial|& coefficients binomiaux\\
\hline\verb|exp|& exponentielle&\verb|sqrt| & racine carr\'ee\\
\verb|ln  log|& logarithme naturel&\verb|log10| & logarithme en base 10\\
\hline
\verb|sin|& sinus&\verb|cos| & cosinus\\
\verb|tan|& tangente&\verb|cot| & cotangente\\
\verb|asin|& arc sinus&\verb|acos| & arc cosinus\\
\verb|atan|& arc tangente&\verb|acot| & arc cotangente\\
\hline
\verb|sinh|& sinus hyperbolique&\verb|cosh| & cosinus hyperbolique\\
\verb|asinh|& arc sinus hyperbolique&\verb|acosh| & arc cosinus hyperbolique\\
\verb|tanh|& tangente hyperbolique&\verb|atanh| & arc tangente hyperbolique\\
\hline
\end{tabular}
\end{center}
\begin{center}
\begin{tabular}{|ll|}
\hline
\multicolumn{2}{|c|}{\bf Fractions}\\
\hline\hline
\verb@propfrac@& partie enti\`ere + partie fractionnaire\\
\verb@getNum numer@& num\'erateur de la fraction simplifi\'ee\\
\verb@getDenom denom@& d\'enominateur de la fraction simplifi\'ee\\
\verb@f2nd@& \verb@[numer,denom]@ de la fraction simplifi\'ee\\
\verb@simp2@& simplification d'un couple\\
\verb@mult_conjugue(n/d)@& multiplie par la quantité conjuguée de $d$ ou de $n$ si $d=1$\\
\verb@dfc@& d\'eveloppe un r\'eel en fraction continue\\
\verb@dfc2f@& transforme une fraction continue en r\'eel\\
\hline
\end{tabular}
\end{center}
\begin{center}
\begin{tabular}{|ll|}
\hline
\multicolumn{2}{|c|}{\bf Cha\^{\i}nes de caract\`eres, s\'equences et listes ou vecteurs}\\
\hline\hline
\verb@S:="abc"@& $S$ est une cha\^{\i}ne de 3 caract\`eres\\
\verb@S:=a,b,c@& S est une s\'equence de 3 \'elements\\
\verb@S:=[a,b,c]@& S est une liste de 3 \'elements\\
\verb@op([a,b,c])@&renvoie la s\'equence \verb@(a,b,c)@\\
\verb@S:=""@& S est une  cha\^{\i}ne de 0 caract\`ere\\
\verb@S:=NULL@& S est une s\'equence de 0 \'element\\
\verb@S:=[]@& S est une liste de 0 \'element\\
\verb@dim(S)@& renvoie le nombre d'\'el\'ements (ou caract\`eres) de S\\
\verb@S[0]@& renvoie le premier \'el\'ement (ou caract\`ere) de S\\
\verb@S[n]@& renvoie le $n+1$ uni\`eme \'el\'ement (ou caract\`ere) de S\\
\verb@S[dim(S)-1]@& renvoie le dernier \'el\'ement (ou caract\`ere) de S\\
\verb@S:=S+"d"@& ajoute le caract\`ere d \`a la fin de la cha\^{\i}ne $S$\\
\verb@"ab"+"def"@& concat\'ene les 2 chaines et renvoie "abdef"\\
\verb@S:=S,d@& ajoute l'\'el\'ement {\tt d} \`a la fin de la s\'equence S\\
\verb@S:=append(S,d)@& ajoute l'\'el\'ement {\tt d} \`a la fin de la liste S\\
\hline
\hline
\multicolumn{2}{|c|}{\bf Fonctions d'arithm\'etique}\\
\hline\hline
\verb|a%p|&$a$ modulo $p$ est un \'el\'ement de $\Z/p\Z$\\
\verb|smod(a,b)| ou \verb|(a%b)%0| &reste sym\'etrique de la division euclidienne\\
\verb|powmod(a,n,p)| &est l'entier \'egal \`a $a^n$ modulo $p$\\
\verb|irem| &reste de la division euclidienne\\
\verb|iquo| &quotient de la division euclidienne\\
\verb|iquorem| &quotient et reste de la division euclidienne\\
\hline
\verb|ifactor| & d\'ecomposition en facteurs premiers\\
\verb|ifactors| & liste des facteurs premiers\\
\verb|idivis| & liste des diviseurs\\
\hline
\verb|gcd| & plus grand diviseur commun\\
\verb|lcm| & plus petit multiple commun\\
\verb|iegcd| & identit\'e de Bezout\\
\verb|iabcuv| & renvoie $[u,v]$ tels que $au+bv=c$\\
\verb|ichinrem| & restes chinois\\
\hline
\verb|is_prime| & teste si l'entier est premier\\
\verb|nextprime| & prochain entier pseudo-premier\\
\verb|previousprime| & entier pseudo-premier pr\'ec\'edent\\
\hline
\end{tabular}
\end{center}
\begin{center}
\begin{tabular}{|ll|ll|}
\hline
\multicolumn{4}{|c|}{\bf R\'e\'ecriture d'expressions}\\%Transformations}\\
\hline\hline
\verb|tsimplify|&simplifie (- puissant)&
\verb|simplify|&simplifie\\
\verb|ratnormal|&forme normale (- puissant)&
\verb|normal|&forme normale\\
\verb|partfrac|&d\'ecompose en \'el\'ements simples&
\verb|expand|&d\'eveloppe\\
\verb|convert|& transforme en le format sp\'ecifi\'e&
\verb|factor|&factorise\\
\hline
%\hline
%\multicolumn{4}{|c|}{\bf Transformations des exponentielles ou des logarithmes}\\
%\hline
%\hline
\verb|pow2exp|&puissances vers exp&
\verb|expexpand|&d\'eveloppe les exp\\
\verb|exp2pow|&convertit $\exp(n*\ln(x))$ en $x^n$&
\verb|lin|&lin\'earise les exp\\
\verb|lncollect|&rassemble les log&
\verb|lnexpand|&d\'eveloppe les log \\
\hline
%\hline
%\multicolumn{4}{|c|}{\bf Transformations en trigonom\'etrie}\\
%\hline\hline
\verb|trigsin|&utilise $\cos(x)^2=1-\sin(x)^2$&
\verb|halftan|& trig en $\tan(x/2)$ \\
\verb|tcollect| &lin\'earise et regroupe&\verb|tlin| &lin\'earise\\
\verb|texpand| &d\'eveloppe $\exp,\ln$ et trig&
\verb|trig2exp| &trig vers $\exp$\\
\verb|hyp2exp| &hyperbolique vers $\exp$&\verb|exp2trig| &$\exp$ vers trig\\
\hline
\end{tabular}
\end{center}
\newpage


\section{Exemples d'utilisation}
\subsection{Transformations}
\noindent {\bf D\'evelopper}\\
On tape :
{\tt expand((1+2x)\verb|^|2)}\\
on obtient :
{\tt 4*x\verb|^|2+4*x+1}\\
On tape :
{\tt expand((x+1+i)*(x+i))}\\
on obtient :
{\tt x\verb|^|2+(1+2*i)*x-1+i }\\
{\bf Factoriser}\\
Des entiers~:
{\tt ifactor(10\verb|^|10+1)}\\
renvoie~: {\tt 101*3541*27961},\\
Des polynômes~:
{\tt factor(x\verb|^|5+9*x\verb|^|4+30*x\verb|^|3+46*x\verb|^|2+33*x+9)}\\
renvoie~:
{\tt (x+1)\verb|^|3*(x+3)\verb|^|2}\\
{\bf Simplifier}\\
Des fractions~: {\tt normal(1/(2-x)+2/(5-2x))}\\
renvoie~: {\tt (-4*x+9)/(2*x\verb|^|2-9*x+10)},\\
et {\tt simplify(1/(2-x)+1/(2+x))} renvoie
{\tt (-4)/(x\verb|^|2-4)}\\
Des racines carrées~:\\
{\tt simplify(2*sqrt(45)+3*sqrt(12)-sqrt(20)-sqrt(3))}\\
renvoie~:
{\tt 5*sqrt(3)+4*sqrt(5)}\\
{\bf Trigonom\'etrie}\\
Linéariser~:
{\tt tlin(2*cos(x)*cos(y))}\\
renvoie~:
{\tt cos(x-y)+cos(x+y)},\\
Développer :
{\tt texpand(sin(x+y))}\\
renvoie~:
{\tt sin(x)*cos(y)+cos(x)*sin(y)}\\
Convertir en exponentielles~:
{\tt normal(trig2exp(3*(cos(x)-i*sin(x))))}\\
renvoie~:
{\tt 3/exp((i)*x)}\\
et~:
{\tt simplify(trig2exp(-sin(2x)+2i*cos(x)\verb|^|2))}\\
renvoie~:
{\tt (i)*exp((i)*x)\verb|^|2+i}\\
Conversion inverse~:
{\tt exp2trig(exp(i*x))}\\
renvoie~:
{\tt cos(x)+(i)*sin(x)}\\
Regrouper sin et cos :
{\tt tcollect(sqrt(3)*sin(x)+cos(x))}\\
renvoie :
{\tt 2*cos(x-1/3*pi)}\\
{\bf Exponentielle et Logarithme}\\
Linéariser~:
{\tt lin(1/exp(i*x))}\\
renvoie~:
{\tt exp(-(i)*x)}\\
Regrouper les logs :
{\tt lncollect(ln(2)+ln(3))}\\
renvoie~:
{\tt ln(6)}\\
Développer les logs :
{\tt lnexpand(ln((x+2)\verb|^|2))}\\
renvoie~:
{\tt 2*ln(x+2)}

\subsection{Arithm\'etique}
\noindent{\bf Un exercice sur des nombres de $\Z/p\Z$}\\
Trouver les 2 derniers chiffres de $19969^{19969}$.\\
On tape :
{\tt powmod(19969,19969,100)} et on obtient : {\tt 29}\\
{\bf Un exercice sur le nombre de diviseurs d'un entier}\\
Parmi les entiers naturels de 1 \`a 2012, quel est celui qui admet le plus
de diviseurs ? Quel est ce nombre de diviseurs ?\\
On tape :
{\tt 2*3*5*7} et on obtient : {\tt 210}\\
On tape : {\tt 2*3*5*7*11}  et on obtient : {\tt 2310}\\ 
Donc le nombre $n$ cherch\'e est de la forme :\\
$n=2^a*3^b*5^c*7^d$ avec $a \geq b \geq c \geq d \geq 0$\\
et  son nombre de diviseurs est :
$(a+1)(b+1)(c+1)(d+1)$\\
On fait une recherche syst\'ematique en tapant {\tt size(idivis(n))} et on 
trouve :\\
$2^{10}=1024$ a 11 diviseurs,
$2^9*3=1536$ a 20 diviseurs,\\
$2^7*3^2=1116$ a 24 diviseurs,
$2^6*3^3=1728$ a 28 diviseurs,\\
$2^4*3^4=1296$ a 25 diviseurs,
$2^7*3*5=1920$ a 32 diviseurs,\\
$2^5*3^2*5=1440$ a 36 diviseurs,
$2^4*3*5*7=1680$ a 40 diviseurs.\\
Donc $n=2^4*3*5*7=1680$ et il a 40 diviseurs.\\
{\bf Un exercice sur l'identit\'e de B\'ezout}\\
Quel est le plus petit nombre entier avec lequel il faut multiplier 49 pour 
obtenir un nombre se terminant par 999999999 (9 neufs) ?\\
On a : $999999999+1=10^9$.\\
Donc un nombre se terminant par 999999999 (9 neufs) s'\'ecrit : $k*10^9+10^9-1$
c'est \`a dire $10^9(k+1)-1=10^9a-1$ avec $a=k+1$.\\
On cherche $p$ pour avoir : $p*49=a*10^9-1$ c'est \`a dire 
$1=a*10^9-p*49$.
{\bf R\'eponse niveau primaire}\\
On peut faire une multiplication \`a trous :
$49*.........=..999999999$\\
On trouve :
$49*693877551=33999999999$\\
{\bf R\'eponse niveau TS}\\
Avec {\tt Xcas} on tape :
{\tt bezout\_entiers(49,10\verb|^|9)}\\
On obtient :
{\tt [306122449,-15,1]}\\
Donc :
$49*306122449-15*10^9=1$
et puisque $49*10^9-49*10^9=0$, on a :\\
$49*(10^9-306122449)+(15-49)*10^9=-1$.\\
Puisque $10^9-306122449=693877551$ et $(49-15)=34$, on obtient la solution :\\
$49*693877551=34*10^9-1=33999999999$\\
{\bf Un exercice sur les congruences et les restes chinois}\\
Trouver les nombres entiers $n, 4<n<10000$ v\'erifiant :\\
$n$ est divisible par 2,
$n-1$ est divisible par 3,
$n-2$ est divisible par 5, 
$n-3$ est divisible par 7,
$n-4$ est divisible par 11. Donc $n=2p=3q+1=5m+2...$\\
On tape :
{\tt ichinrem([0\%2,1\%3,2\%5,3\%7,4\%11]))}\\
On obtient :
{\tt -788 \% 2310}\\
On veut les entiers $n$ soient tels que $4<n<10000$ donc  :\\
$n=(2310-788)+2310k=1522+2310k$ pour $k\leq \mbox{iquo}((10000-1522),2310)$.\\
On tape : {\tt iquo((10000-1522),2310)} et on obtient :{\tt 3}\\
On tape :
{\tt (1522+2310*k)\$(k=0..3)}\\
On obtient les 4 nombres solutions :
{\tt 1522,3832,6142,8452}\\
{\bf D\'ecomposition en facteurs premiers}\\
 Exposant de 17 dans la d\'ecomposition en facteurs premiers de 500!\\
On tape :
{\tt iquo(500,17),iquo(500,17\verb|^|2),iquo(500,17\verb|^|3)}\\
On obtient :
{\tt 29,1,0}\\
L'exposant de 17 dans la d\'ecomposition en facteurs premiers de 500! est 
29+1=30.
Ou, on utilise {\tt ifactors(500!)} qui renvoie la liste {\tt L} des 
facteurs premiers de {\tt 500!} avec leur multiplici\'e. 17 etant le 
7-i\`eme nombre premier, l'exposant de 17 sera le 13-i\`eme \'el\'ement de 
{\tt L}. On tape {\tt ifactors(500!)[13]} et on obtient {\tt 30}.
\newpage
\part{Fiche {\tt Xcas}  les proba-stats et le tableur}
%\vskip 2mm
\begin{center}
\begin{tabular}{|ll|}
\hline
\multicolumn{2}{|c|}{\bf Probabilit\'es}\\
\hline\hline
\verb|comb(n,k)| & nombre de combinaisons de $p$ objets pris parmi $n$\\
\verb|perm(n,p)| & nombre d'arrangements de $p$ objets pris parmi $n$\\
\verb|factorial(n)| ou \verb| n!| & $n!$\\
\verb|randseed| ou \verb|srand|&  initialise la suite des nombres al\'eatoires.\\
\verb|rand(n)| ou \verb|alea(n)|& entier al\'eatoire uniform\'ement distribu\'e dans 0.. $n-1$ \\
\verb|rand(p,q)| ou \verb|alea(p,q)| & r\'eel al\'eatoire uniform\'ement distribu\'e dans $[p,q]$ \\
\verb|rand(p,L)| ou \verb|alea(p,L)| & liste de $p$ \'el\'ements pris au hasard dans la liste $L$\\
\verb|randnorm(mu,sigma)| & r\'eel al\'eatoirement distribu\'e selon la loi normale $N(\mu,\sigma)$\\
\verb|randexp(a)| & renvoie un réel aléatoire selon la loi exponentielle \\
\hline
\end{tabular}
\end{center}
%\vskip 2mm
\begin{center}
\begin{tabular}{|ll|}
\hline
\multicolumn{2}{|c|}{\bf Statistiques 1-d}\\
\hline\hline
\verb|moyenne| & moyenne d'une liste pond\'er\'ee par le 2nd argument\\
\verb|median| & m\'ediane d'une liste pond\'er\'ee par le 2nd argument\\
\verb|quartiles| & [min,quartile1, m\'ediane,quartile3,max]\\
\verb|moustache| & boite \`a moustache d'une s\'erie statistique\\
\verb|variance| & variance d'une liste pond\'er\'ee par le 2nd argument\\
\verb|ecart_type| & \'ecart-type d'une liste pond\'er\'ee par le 2nd argument\\
\verb|histogramme| & trace l'histogramme de l'argument\\
\hline
\hline
\multicolumn{2}{|c|}{\bf Distributions}\\
\hline\hline
\verb|binomial(n,k,p)| & probabilité d'obtenir $k$ succès avec $n$ tirages (où $p$ \\
    & est la probabilité de succès par tirage) \\ 
\verb|binomial_cdf(n,p,n1,n2)| & probabilité d'obtenir entre $n1$ et $n2$ succès \\
\verb|binomial_cdf(n,p,n1)| & probabilité d'obtenir au plus $n1$ succès\\
\verb|binomial_icdf(n,p,t)| & renvoie le plus grand entier $k$ tel que la probabilité\\
                              & d'obtenir au plus $k$ succès soit $\leq t$  \\ \hline
\verb|normald(x)| & densité de la loi normale moyenne 0 et écart-type 1 \\
\verb|normald(mu,sigma,x)| & densité de la loi normale moyenne $\mu$ et écart-type $\sigma$ \\
\verb|normald_cdf(mu,sigma,a)| & probabilité selon la loi normale $\mu$, $\sigma$ que $x$ soit $\leq a$\\
\verb|normald_cdf(mu,sigma,a,b)| & probabilité selon la loi normale de moyenne $\mu$ et\\
 & d'écart-type $\sigma$ que $x$ soit entre $a$ et $b$\\
\verb|normald_icdf(mu,sigma,t)| & renvoie $x$ tel que la probabilité d'être $\leq x$ soit $\leq t$\\
                               & (selon la loi normale moyenne $\mu$ et écart-type $\sigma$) \\
\hline
\end{tabular}
\end{center}
%\vskip 2mm
Les commandes de statistiques s'utilisent :
\begin {itemize}
\item dans le tableur  avec le menu
{\tt Maths} : le tableur se remplit automatiquement gr\^ace \`a une
boite de dialogue qui demande de pr\'eciser les param\`etres de la 
commande choisie (le curseur doit \^etre dans un niveau de type tableur qui 
s'obtient avec {\tt Alt+t}). C'est un tableur formel dans lequel on peut 
utiliser toutes les commandes de {\tt Xcas} ainsi que les variables d\'efinies 
auparavant.
\item dans des lignes de commandes~:
soit on les tape, soit on les s\'electionne dans le menu 
{\tt Cmds$\blacktriangleright$Proba\_stats}, soit on utilise le menu 
{\tt Graphic$\blacktriangleright$Stats} et ses boites de dialogues.
\end{itemize}
\begin{center}
\begin{tabular}{|ll|}
\hline
\multicolumn{2}{|c|}{\bf Statistiques 2-d}\\
\hline\hline
\verb|polygonplot| & ligne polygonale\\
\verb|scatterplot| & nuage de points\\
\verb|polygonscatterplot| & ligne polygonale point\'ee\\
\verb|covariance| & covariance des \'el\'ements de l'argument\\
\verb|correlation| &corr\'elation des \'el\'ements de l'argument\\
%\verb|quartiles| &[min,quartile1, m\'ediane,quartile3,max]\\
%\verb|moustache| &boite \`a moustache pour une s\'erie statistique\\
\verb|exponential_regression| &$(m,b)$ o\`u $y=be^{mx}$ approche l'argument\\
\verb|exponential_regression_plot| &graphe de $y=be^{mx}$ approchant l'arg.\\
\verb|linear_regression| &$(a,b)$ o\`u  $y=ax+b$ approche l'argument\\
\verb|linear_regression_plot| &graphe de $y=ax+b$ approchant l'argument\\
\verb|logarithmic_regression| &$(m,b)$ o\`u $y=m\ln(x)+b$ approche l'arg.\\
\verb|logarithmic_regression_plot| &graphe de $y=m\ln(x)+b$, approchant l'arg.\\
\verb|polynomial_regression| &$(a_n,..a_0)$ o\`u $y=a_nx^n+..a_0$ approche l'arg.\\
\verb|polynomial_regression_plot| & graphe de $y=a_nx^n+..a_0$ approchant l'arg.\\
\verb|power_regression| &$(m,b)$ o\`u $y=bx^m$ approche l'argument\\
\verb|power_regression_plot| &graphe de $y=bx^m$ approchant l'argument\\
\hline
\end{tabular}
\end{center}
{\bf Le tableur} fait du calcul formel et a :
% ainsi que les variables d\'efinies auparavant. 
 
\begin{itemize}
\item ses menus {\tt Table Edit Maths} (un click droit permet d'obtenir ses menus),
\item ses boutons {\tt eval val init 2-d 3-d}, 
\item sa case de  s\'election qui est une case interactive : soit on 
s\'electionne \`a la souris une cellule ou une plage et son nom s'y inscrit 
(par exemple {\tt A0:B3}), soit on y tape le nom des cellules \`a 
s\'electionner, (par exemple {\tt A0..3,C}), 
\item sa ligne de commande qui permet de remplir les cellules, 
\item un bouton pour configurer le tableur et qui rappelle cette
configuration.
\end{itemize}
Au tableur est associ\'e un  \'ecran graphique 2D 
visible si on a coch\'e {\tt Graphe} dans la configuration du tableur (visible 
en dessous du tableur ou \`a droite selon que {\tt Paysage} est coch\'e 
ou non). On peut aussi utiliser le bouton {\tt 2-d} (ou {\tt 3-d}).\\ 
Le tableur est une matrice dont on num\'erote les lignes par des nombres 
(0,1...)
et les colonnes par une ou plusieurs lettres (A,B...). Le nom d'une cellule
se fait par r\'ef\'erence relative (\verb|C2|) ou absolue (\verb|$C$2|) ou mixte 
(\verb|$C2| ou \verb|C$2|).
Dans  une cellule, on met soit une liste ou une formule de 
calcul commencant par \verb|=|, soit une constante, soit une chaine de caract\`eres entour\'ees de guillemets ({\tt "essai"}).\\
{\bf Exemple : tableau de valeurs d'une fonction}
Dans le tableur, on ouvre une boite de dialogue avec le menu
{\tt Maths$\blacktriangleright$Function}.
On met : expression {\tt x*ln(x)}, variable  
{\tt x}  de 1 \`a 4, xstep= 0.25, colonne {\tt A}. On obtient, si {\tt Paysage} est d\'ecoch\'e :
\begin{center}\includegraphics[width={10cm}]{tablefonc}\end{center}
\newpage
\section{Exemples d'utilisation}
\subsection{B\'ezout programm\'e avec le tableur}
\begin{itemize}
\item Dans une ligne de commande, on met \verb|a:=78|;\verb|b:=56| on valide
puis on ouvre un niveau tableur.
\item La colonne {\tt A} est "la suites des restes" $r_n$. On met 
{\tt =a} dans {\tt A0}, {\tt =b} dans {\tt A1}, {\tt =irem(A0,A1)} dans 
{\tt A2} et on remplit vers le bas ({\tt Ctrl+d}),  
\item La colonne {\tt E} est "la suites des quotients" $q_n$. On met
 {\tt =iquo(A0,A1)} dans {\tt E2} et on remplit vers le bas, 
\item Les colonnes {\tt B} et {\tt C}, sont les deux suites $u_n$ et $v_n$  de fa\c{c}on qu'\`a chaque \'etape on ait : $r_n=u_na+v_nb$. On met
{\tt 1} dans {\tt B0}, {\tt 0} dans {\tt C0}, {\tt 0} dans {\tt B1}, 
{\tt 1} dans {\tt C1}, {\tt B0-E2*B1} dans {\tt B2}, {\tt C0-E2*C1} dans 
{\tt C2} et on remplit vers le bas,
\item La colonne {\tt D} est  $u_na+v_nb$  
({\tt D =A}). On met
{\tt =B0*\$A\$0+C0*\$A\$1} dans {\tt D0} et on remplit vers le bas
\item La colonne {\tt F} est la r\'eponse $[u,v,$pgcd$(a,b)]$. On 
met 
{\tt =si A1==0 alors [B0,C0,D0]; sinon 0;fsi} dans {\tt F0} et on remplit vers le bas.
\end{itemize}
On v\'erifie avec {\tt iegcd(78,56)} et on obtient :\\
%\includegraphics[width=12cm]{bezout}
\framebox{\includegraphics[width=\textwidth]{bezout}}
\subsection{Loi binomiale}
On tire une pièce à pile ou face 100 fois de suite. La probabilité d'obtenir 40 piles si la pièce est bien équilibrée est \verb|binomial(100,40,0.5)| (valeur approchée) ou \verb|binomial(100,40,1/2)| (valeur exacte).\\
La probabilité que le nombre de piles soit inférieure ou égal à 40 vaut :\\
\verb|binomial_cdf(100,0.5,40)| (attention l'ordre des paramètres est inversé par rapport \`a \verb|binomial|). \\
La probabilité d'être dans l'intervalle de confiance 
$[m-2\sigma,m+2\sigma]$ (ici $m=50$ et $\sigma$=5)
%$[50-1/\sqrt{100},50+1/\sqrt{100}]$ 
vaut \verb|binomial_cdf(100,0.5,40,60)| (ici environ 0.965). \\
Pour avoir un intervalle de confiance \`a 99\% centré, on calcule \\
\verb|binomial_icdf(100,0.5,0.995)| qui renvoie 63 et\\
\verb|binomial_icdf(100,0.5,0.005)| qui renvoie 37 (symétrique de 63).\\
Si la pièce n'est pas équilibrée, on remplace 0.5 par la probabilité d'obtenir 
pile.
\subsection{Simulation}
On peut simuler un pile ou face par \verb|alea(2)|, une série
de 100 lancers par\\ 
\verb|seq(alea(2),j,1,100)|, sa somme par \verb|sum(alea(2),j,1,100)|
 et l'histogramme de 1000 séries de 100 lancers par\\
\verb|histogram(seq(sum(alea(2),j,1,100),k,1,1000));|\\
On superpose la loi binomiale au graphe en rajoutant \`a la commande
précédente\\
\verb|plotlist(seq(binomial(100,k,0.5),k,0,100),couleur=rouge)|\\
 On simule 100 lancers d'une pièce non équilibrée o\`u la probabilité d'obtenir
pile est $p$, par \verb|seq(alea(0,1)<p,j,1,100)|, (le résultat du test \verb|alea(0,1)<p| est de probabilité $p$ car il vaut 1 si le nombre généré est plus petit que $p$ et 0 sinon).\\
On simule le tirage de 2 entiers dans $I=[4;12]$ par \verb|alea(2,4,12)|, le
tirage de 2 nombres dans \verb|L:=[1,1,3,3,3,5,6]| par \verb|alea(2,L)| et on 
simule 100 tirages selon la loi normale, par \verb|seq(randnorm(0,1),j,1,100)|. 
\subsection{Convergence vers la loi normale}
On peut tracer le diagramme en batons de la loi binomiale de paramètres par 
exemple $n=100$ et $p=0.4$ en tapant : \verb|n:=100; p:=0.4|;\\
 \verb|diagramme_batons(seq(binomial(n,k,p),k,0,n))|;\\
Cliquer plusieurs fois sur le bouton bleu flèche vers le haut pour voir tout le
diagramme.
Pour superposer la loi normale qui approche ce diagramme, ajouter la commande
\verb|graphe(normald(n*p,sqrt(n*p*(1-p)),x),x=0..100)|\\
Pour faire observer le théorème de Moivre-Laplace tel qu'il est énoncé, les commandes
sont plus complexes. Il faut générer un histogramme avec en abscisse
des intervalles de valeurs successives (ici centrés) que prend $(X_n-np)/\sqrt{np(1-p)}$ 
et en ordonnée la loi binomiale, on tapera les commandes\\
\verb|S:=seq([(k-n*p)/sqrt(n*p*(1-p)),binomial(n,k,p)],k,0,n);|\\
\verb|H:=histogram(S,affichage=nom_cache);|\\
\verb|graphe(normald(x),x=-10..10,couleur=rouge)|\\
On calcule l'aire d'une partie de l'histogramme avec : \verb|aire(H[a..b-1])|
(rectangles d'indices $a$ à $b$) ou \verb|binomial_cdf(n,p,a,b-1)|, que l'on peut
comparer avec l'aire sous la courbe \verb|int(normald(x),x=a..b)|.
On reprend les commandes précédentes en faisant varier $n$ et $p$ de fa\c{c}on interactive
en définissant les paramètres $n$ et $p$ (menu \verb|Edit->New parameter|, il faut décocher la case \verb|symb| pour avoir un curseur numérique et définir la plage de $n$, $p$ et le pas).
\subsection{Fluctuations à un seuil donné}
%\begin{itemize}\item
\noindent{\bf Visualisation de la partie hors de l'intervalle de confiance.}\\ 
Commencer par tracer la loi normale :\\
\begin{minipage}[h]{8.5cm}
\verb|graphe(normald(x),x=-10..10);|\\
 Valider. Ajouter à la fin de la commande :\\ 
\verb|plotarea(normald(x),x=-6..-2);|\\
\verb|plotarea(normald(x),x=2..6);|\\
Idem en remplaçant 2 et -2 par 3 et -3\\
{\bf Intervalle de confiance centré au seuil de 1\%} pour \\
la loi normale centrée réduite:\verb|[normal_icdf(0,|\\
\verb|1,0.005),normal_icdf(0,1,0.995)]|
%\verb|normal_icdf(0,1,0.995)]|
\end{minipage}
\begin{minipage}[h]{5cm}
\includegraphics[width=5cm]{fluctu}
\end{minipage}\\
.
%\item 
%{\bf Intervalle de confiance centré au seuil de 1\%} pour la loi 
%normale centrée réduite~:\\
%\verb|[normal_icdf(0,1,0.005),normal_icdf(0,1,0.995)]|
%\end{itemize}
\newpage
\part{Fiche {\tt Xcas}  Alg\`ebre}
\vskip 2mm  
\begin{center}
\begin{tabular}{|ll|}
\hline
\multicolumn{2}{|c|}{\bf Polyn\^omes}\\
\hline\hline
\verb|normal| &forme normale (d\'evelopp\'ee et r\'eduite)\\
\verb|expand| &forme d\'evelopp\'ee\\
\verb|ptayl(P,a)| &polynôme de Taylor Q tel que P(x)=Q(x-a)\\
\verb|peval| ou \verb|horner| &\'evaluation en un point par l'algorithme de Horner\\
\verb|genpoly| & polyn\^ome d\'efini par sa valeur en un point\\
\verb|canonical_form| & trin\^ome mis sous forme canonique\\
\hline
\verb|coeff| & coefficient ou liste des coefficients\\
\verb|poly2symb| & du polyn\^ome au format Xcas \`a la forme symbolique\\
\verb|symb2poly| & de la forme symbolique \`a un polyn\^ome au format Xcas\\
\verb|pcoeff| &polyn\^ome d\'ecrit par ses racines\\
\hline
\verb|degree| &degr\'e\\
\verb|lcoeff| &coefficient du terme de plus haut degr\'e\\
\verb|valuation| &degr\'e du mon\^ome de plus bas degr\'e\\
\verb|tcoeff| &coefficient du mon\^ome de plus bas degr\'e\\
\hline
\verb|factor| & d\'ecomposition en facteurs irr\'eductibles sur $\Q$\\
\verb|cfactor| & d\'ecomposition en facteurs irr\'eductibles sur $\Q[i]$ \\
\verb|factors| & liste des facteurs irr\'eductibles\\
\verb|divis| & liste des diviseurs\\
\verb|collect| & factorisation sur le corps des coefficients\\
\hline
\verb|froot| & racines avec leurs multiplicit\'es\\
\verb|proot| & valeurs approch\'ees des racines\\
\verb|sturmab| & nombre de racines dans un intervalle\\
\hline
\verb|getNum| & num\'erateur d'une fraction rationnelle non simplifi\'ee\\
\verb|numer| & num\'erateur d'une fraction rationnelle simplifi\'ee\\
\verb|getDenom| & d\'enominateur d'une fraction rationnelle non simplifi\'ee\\
\verb|denom| & d\'enominateur d'une fraction rationnelle simplifi\'ee\\
\verb|propfrac| & isole partie enti\`ere et fraction propre\\
\verb|partfrac| & d\'ecomposition en \'el\'ements simples\\
\hline
\verb|quo| & quotient de la division euclidienne\\
\verb|rem| & reste de la division euclidienne\\
\verb|gcd| & plus grand diviseur commun\\
\verb|lcm| & plus petit multiple commun\\
\verb|egcd| & identit\'e de Bezout\\
\verb|chinrem| & restes chinois\\
%\verb|divpc| & division suivant les puissances croissantes\\
\hline
\verb|randpoly| & polyn\^ome al\'eatoire\\
\verb|cyclotomic| & polyn\^omes cyclotomiques\\
\verb|lagrange| & polyn\^omes de Lagrange\\
\verb|hermite| & polyn\^omes de Hermite\\
\verb|laguerre| & polyn\^omes de Laguerre\\
\verb|tchebyshev1| & polyn\^omes de Tchebyshev 1\`ere esp\`ece\\
\verb|tchebyshev2| & polyn\^omes de Tchebyshev 2nde esp\`ece\\
\hline
\end{tabular}
\end{center}
\vskip 2mm
\begin{center}
\begin{tabular}{|ll|}
\hline
\multicolumn{2}{|c|}{\bf Matrices}\\
\hline\hline
\verb@M:=[[a,b,c],[f,g,h]]@& \verb|M| est une matrice de 2 lignes et 3 colonnes\\
%\verb@M:=[[]]@& M est une matrice de 1 ligne et 0 colonne\\
\verb@dim(M)@& est la liste [nbre\_lignes, nbre\_colonnes]\\
\verb@nrows(M)@, \verb@ncols(M)@ & nombre de lignes, colonnes\\
\verb@M[0]@& renvoie la premi\`ere ligne de \verb|M|\\
\verb@M[n]@ ou \verb@row(M,n)@& renvoie la $n+1$ uni\`eme ligne de \verb|M|\\
\verb@col(M,n)@& renvoie la $n+1$ uni\`eme colonne de \verb|M|\\
\verb@M[nrows(M)-1]@& renvoie la derni\`ere ligne de \verb|M|\\
\verb@M[n..p]@& renvoie la sous matrice de \verb|M| de lignes [n..p]\\
\verb@M:=append(M,[d,k,l])@& ajoute la ligne \verb|[d,k,l]| \`a la fin de \verb|M|\\
\verb@M[nrows(M)]:=[d,k,l]@& ajoute la ligne \verb|[d,k,l]| \`a la fin de \verb|M|\\
\verb@M:=border(M,[d,k])@& ajoute la colonne \verb|[d,k]| \`a la fin de \verb|M|\\
\verb@M[j,k]:=a@& modifie l'\'el\'ement d'indice \verb|j,k| en copiant \verb|M|\\
\verb@M[j,k]=<a@& modifie en place l'\'el\'ement d'indice \verb|j,k|\\
\hline
\end{tabular}
\end{center}
%\vskip 2mm
\begin{center}
\begin{tabular}{|ll|}
\hline
\multicolumn{2}{|c|}{\bf Op\'erations sur les vecteurs et matrices}\\
\hline\hline
\verb|v*w| &produit scalaire\\
\verb|cross(v,w)| & produit vectoriel\\
\verb|A*B| &produit matriciel\\
\verb|A.*B| &produit terme \`a terme\\
\verb|A^n| &puissance enti\`ere d'une matrice\\
\verb|inv(A)| ou \verb|A^-1| &inverse de la matrice \verb|A|\\
\verb|matpow(A,n)| &puissance symbolique d'une matrice\\
\verb|tran(A)|&transpos\'ee de la matrice \verb|A|\\
\verb|trn(A)|&adjointe de la matrice \verb|A|\\
\verb|rank(A)| &rang de la matrice \verb|A|\\
\verb|trace(A)| &trace de la matrice \verb|A|\\
\verb|det(A)| &d\'eterminant de la matrice \verb|A|\\
\verb|ker(A)| & base du noyau de la matrice \verb|A|\\
\verb|image(A)| & base de l'image de la matrice \verb|A|\\
\verb|idn(n)| &matrice identit\'e de dimension \verb|n|\\
\verb|ranm(p,q)| &matrice \verb|p*q| \`a coefficients al\'eatoires\\
\hline
\end{tabular}
\end{center}
\begin{center}
\begin{tabular}{|ll|}
\hline
\multicolumn{2}{|c|}{\bf Syst\`emes lin\'eaires}\\
\hline\hline
\verb|linsolve| & r\'esolution d'un syst\`eme\\
%\verb|simult| & r\'esolution simultan\'ee de plusieurs syst\`emes\\
\verb|syst2mat| & transforme $Y=AX+b$ en la matrice $A$ bord\'ee par $-b$\\
\verb|rref| & r\'eduction de Gauss-Jordan\\
\verb|ref| & r\'eduction de Gauss\\
\verb|rank| &rang du syst\`eme\\
\verb|det| & d\'eterminant du syst\`eme\\
\hline
\end{tabular}
\end{center}
%\vskip 2mm 
\begin{center}
\begin{tabular}{|ll|}
\hline
\multicolumn{2}{|c|}{\bf R\'eduction des matrices}\\
\hline\hline
\verb|jordan| & diagonalisation ou r\'eduction de Jordan\\
\verb|pcar| & coefficients du polyn\^ome caract\'eristique\\
\verb|pmin| & coefficients du polyn\^ome minimal\\
\verb|companion| & matrice compagnon d'un polynôme unitaire\\
\verb|eigenvals| & valeurs propres\\
\verb|eigenvects| & vecteurs propres\\
\hline
\end{tabular}
\end{center}
\newpage
\section{Exemples d'utilisation}
\subsection{Syst\`eme d'\'equations lin\'eaires}
R\'esoudre  le syst\`eme lin\'eaire en $x,y,z$ de param\`etre $a$ :
\[ \left\{ \begin{array}{ccc}
ax+y+z&=&1\\
x+ay-z&=&2\\
2x+0y-z&=&3
\end{array} \right. \]
On tape :
{\tt linsolve([a*x+y+z=1,x+a*y-z=2,2*x-z=3],[x,y,z])}\\
On obtient :
{\tt [(4*a+1)/(a\verb|^|2+2*a+1),\\(-a+2)/(a\verb|^|2+2*a+1),(-3*a\verb|^|2+2*a-1)/(a\verb|^|2+2*a+1)]}\\
Pour déterminer les valeurs de $a$ qui donnent 0 ou une infinit\'e de solutions :\\
{\tt solve(a\verb|^|2+2*a+1,a)},
on obtient~:
{\tt [-1]}\\
Si $a=-1$, on tape :
{\tt linsolve([-x+y+z=1,x-y-z=2,2*x-z=3],[x,y,z])}\\
On n'obtient pas de solutions~:
{\tt []}
\subsection{Matrice et graphe}
\noindent\begin{minipage}[h]{7cm}
%\vskip 2mm
Dans une ville les lignes de bus vont :
de la Gare au Centre, du Centre \`a la Gare,
de la Gare au Lyc\'ee, du Lyc\'ee \`a la Gare,
de la Gare \`a la Mairie, de la Mairie \`a la Gare,
du Lyc\'ee au Centre, du Centre au Lyc\'ee, 
et de la Mairie au Centre. Donner la matrice $A$ 
associ\'ee au graphe GLMC. Ci-contre :\\
{\tt graphe\_probabiliste(A,[G,L,M,C])}
\end{minipage}
\hspace{0.5cm}
\begin{minipage}[h]{5cm}
\begin{center}\includegraphics[width=\textwidth]{grapheprob}\end{center}
\end{minipage}\\
\ \\
Un voyageur a pris un billet de 5 trajets. 
Combien a-t-il de possibilit\'es 
pour faire ces  5 trajets :
si il part de la Gare et retourne \`a la Gare ou 
si il part du Lyc\'ee et doit arriver \`a la Gare.\\
On tape (A[j,k]=1 si il y a un trajet de j vers k) :\\
{\tt A:=[[0,1,1,1],[1,0,0,1],[1,0,0,1],[1,1,0,0]];}
{\tt B:=A\verb|^|5}\\
On obtient pour {\tt B}:\\
{\tt [[21,23,12,22],[19,14,7,19],[19,14,7,19],[19,15,7,18]]}\\
Lorsqu'il part de la Gare et retourne \`a la Gare, il y a {\tt B[0,0]=21} 
possibilit\'es et lorsqu'il part du Lyc\'ee et doit arriver \`a la Gare il y a 
{\tt B[1,0]=14} possibilit\'es.

\subsection{Interpolation et formule des 3 niveaux}
{\bf Polyn\^ome d'interpolation (de Lagrange) en 3 points~:}\\
On consid\`ere 3 couples de r\'eels ou 
complexes $(x_j,y_j)_{j=0..2}$, les $x_j$ \'etant 2 \`a 2 distincts.
On montre qu'il existe un polyn\^ome $P$ unique de degr\'e inf\'erieur ou 
\'egal \`a 2 tel que pour $j=0..2$ on ait $P(x_j)=y_j$.
Trouver $P$ lorsque $x_1=(x_0+x_2)/2$.\\
{\bf Solution}~: On pose $P(x)=Ax^2+Bx+C$, il faut r\'esoudre :
\[ \left\{ \begin{array}{ccccc}
P(x_0)&=&Ax_0^2+Bx_0+C&=&y_0\\
P(x_1)&=&Ax_1^2+Bx_1+C&=&y_1\\
P(x_2)&=&Ax_2^2+Bx_2+C&=&y_2
\end{array} \right. \]
On tape :\\ \verb|N:=[[x0^2,x0,1],[x1^2,x1,1],[x2^2,x2,1]];|
{\tt x1:=(x0+x2)/2;}\\
{\tt factor(linsolve([N*[A,B,C]-[y0,y1,y2]],[A,B,C]))}\\
Ou on tape {\tt lagrange([x0,x1,x2],[y0,y1,y2])} qui renvoie
le polynôme construit degré par degré dans la base $1,x-x0,(x-x0)(x-x1)$
(méthode des différences divisées) alors que les algébristes \'ecrivent 
ce polynôme sous la forme~:\\
$\displaystyle y_0\frac{(x-x_1)(x-x_2)}{(x_0-x_1)(x_0-x_2)}+
y_1\frac{(x-x_0)(x-x_2)}{(x_1-x_0)(x_1-x_2)}+
y_2\frac{(x-x_0)(x-x_1)}{(x_2-x_0)(x_2-x_1)} \hfill$

{\bf Calcul d'une int\'egrale par la m\'ethode de Simpson~:}\\
On approche une fonction continue $f$ sur l'intervalle $I=[x_0,x_2]$ par une 
parabole qui coïncide avec la fonction en $x_0, x_1=(x_0+x_2)/2, x_2$.\\ On 
cherche comme précédemment $P(x)$ un polyn\^ome de degr\'e $\leq$ 2 tel que $P(x_i)=f(x_i)=y_i$ pour $j=0,1,2$. 
Calculons la valeur approchée de l'intégrale
de $f$ sur $I$ obtenue en remplaçant $f$ par le polynôme $P$.\\
 On tape~:
{\tt x1:=(x0+x2)/2;\\factor(int(lagrange([x0,x1,x2],[y0,y1,y2]),x=x0..x2))}\\
On obtient : {\tt ((-y2-y0-4*y1)*(x0-x2))/6}\\
Donc $$\displaystyle \int_{x_0}^{x_2}f(x)dx \simeq \frac{(x_2-x_0)}{6}(f(x_2)+4f(\frac{x_2+x_0}{2})+f(x_0))$$
Si $f$ est un polynôme de degré 0, 1 ou 2, alors bien s\^ur $P=f$ et la formule
obtenue n'est pas seulement approchée mais est exacte. Il se trouve que c'est 
encore vrai si $f$ est un polynôme de degré 3, en effet, on peut se ramener à 
$f(x)=x^3$ (puisque la formule est exacte en degré plus petit que 2), on 
calcule alors~:\\
\verb|r:=int(x^3-lagrange([x0,x1,x2],[x0^3,x1^3,x2^3]),x,x0,x2)|\\
puis on tape \verb|normal(r)| qui renvoie 0.

{\bf La formule des 3 niveaux~:}\\
Soit un solide de volume :
$V=\int_a^b S(z) dz$ 
o\`u $S(z)$ est la surface de la section par le plan de cote $z$.
Si $S(z)$ est un polyn\^ome en $z$ de degr\'e au plus 3 alors :
$$\displaystyle V=\frac{(b-a)}{6}(S(a)+4S(\frac{a+b}{2})+S(b))$$
Ceci résulte du résultat précédent en prenant comme fonction $f$ la fonction 
$S$.

{\bf Remarque 1} Cette formule est en fait la formule de Simpson pour le calcul de l'aire sous 
une courbe, formule qui est exacte pour les polyn\^omes de degr\'e inf\'erieur 
ou \'egal \`a 3, et sinon donne une bonne approximation de l'intégrale lorsque 
$f$ est suffisamment régulière (pour améliorer on découpe l'intervalle $[a,b]$ 
en plusieurs subdivisions et on applique la formule de Simpson sur chaque 
subdivision).

{\bf Remarque 2}
Dans le commerce les flacons ont souvent la taille fine : c'est pour les avoir 
bien en main mais aussi pour donner l'illusion d'un grand volume, puisque
la section m\'ediane compte 4 fois !!!

{\bf Remarque 3}
Cette formule donne facilement le volume d'un tonneau de hauteur $2d$ (sph\`ere de rayon $R$ sans ses 2 calottes). En effet $S(z)=\pi(R^2-z^2)$ d'où :\\
$\displaystyle V=\frac{2d}{6}(\pi(R^2-d^2)+4\pi R^2+\pi(R^2-d^2))=\frac{\pi}{3}d(6R^2-2d^2)=\frac{2\pi}{3}d(3R^2-d^2)$\\
On retrouve bien~:
$V=\displaystyle 2\pi\int_{-d}^d\int_0^{\sqrt{R^2-z^2}}rdrdz=\frac{2\pi}{3}d(3R^2-d^2)$
et aussi\\ lorsque $d=R$,
le volume de la sph\`ere \'egal \`a $\displaystyle \frac{4\pi R^3}{3}$.
\newpage
\part{Fiche {\tt Xcas} pour la sp\'ecialit\'e maths Terminale S.} 
Ces commandes se trouvent dans le menu {\tt Cmds}.
\begin{center}
\begin{tabular}{|ll|}
\hline
\multicolumn{2}{|c|}{\bf Arithm\'etique}\\
\hline\hline
\verb|iquo(a,b), irem(a,b)| & quotient, reste de la division
euclidienne de $a$ par $b$ \\
\verb|isprime(p)| & Test de primalit\'e \\ 
\verb|gcd(a,b), lcm(a,b)| & PGCD, PPCM de 2 entiers \\ 
\verb|iabcuv(a,b,c)| & Renvoie $u$ et $v$ tels que $au+bv=c$ \\ 
\verb|powmod(a,n,m)| & Renvoie $a^n \pmod m$ \\ 
\verb|L:=convert(a,base,b)| & liste des chiffres de $a$ en base $b$. $L$[0]=ch des unit\'es\\
\verb|a:=convert(L,base,b)| & conversion inverse \\
\verb|n:=a % b; p:=n % 0| & $n\in \Z/b\Z$ congru \`a $a$;
           $p \in \Z$ et $p = a \pmod b $ \\
\hline
\hline
\multicolumn{2}{|c|}{\bf Matrices et vecteurs}\\
\hline\hline
\verb|matrix(3,4,(j,k)->j+k)|&matrice d\'efinie par une formule \\
\verb|M:=[[1,2,3],[4,5,6]]| & matrice d\'efinie par des coefficients
(ou bien cr\'eer\\
& un tableur Xcas en lui donnant un nom de variable)\\
\verb|v:=[0,1,0]| & vecteur d\'efini par ses coordonn\'ees \\
\verb|M[0,1]| ou \verb|M(1,2)| & \'el\'ement de \verb|M| ligne 1 colonne 2 : les indices\\
&  commencent \`a 0 ou \`a 1 selon la notation \\
\verb|M[j,k]:=a| & modifie l'\'el\'ement d'indice $j,k$ (copie de \verb|M|)\\
{\tt M[j,k]=<a} ou \verb|M(j,k)=<a| & modifie en place
l'\'el\'ement d'indice $j,k$ de \verb|M|\\
\verb|+,-,*| & addition, soustraction, produit de matrices/vecteurs \\
\verb|inv(M)|& inverse d'une matrice carr\'ee \verb|M|\\
\verb|M^n| & puissance enti\`ere d'une matrice \verb|M|\\
\verb|matpow(M,n)| & puissance (symbolique) d'une matrice \verb|M|. \'Ecrire\\
& \verb|supposons(n>0)| si \verb|M| n'est pas inversible \\
\verb|P,D:=jordan(M)| & diagonalisation de la matrice \verb|M| (hors
programme) \\
\hline
\hline
\multicolumn{2}{|c|}{\bf Autres}\\
\hline\hline
\verb|asc("chaine")| & renvoie la liste des codes ASCII d'une chaine \\
\verb|char(L)| & renvoie la chaine de caract\`eres \`a partir d'une
liste \\ 
\hline
\verb|rsolve| et \verb|seqsolve| & r\'esolution de suites r\'ecurrentes \\ \hline
\verb|L:=readrgb("fich")| & lecture du fichier image (jpg, png) dans \verb|L|\\ 
\verb|writergb("fich.png",L)| &  stocke et affiche l'image contenue
dans \verb|L|\\
\verb|rectangle(dx,0,dy/dx,| & affiche l'image de taille \verb|dx,dy| contenue dans le \\
\verb|   gl_texture="fich")|  & fichier "fich"\\ 
\hline
\end{tabular}
\end{center}
{\bf Attention}~: la notation {\tt M(j,k):=a} est
interpr\'et\'ee comme une d\'efinition de fonction si {\tt j,k} est
symbolique (non entier) et non comme une affectation de l'indice $j,k$
de $M$. On peut utiliser la notation {\tt M(j,k)=<a} qui
  modifie toutes les matrices partageant la repr\'esentation de $M$,
  est donc beaucoup plus rapide pour de grosses matrices, mais peut
  avoir des effets surprenants.\\
N.B.: il peut être nécessaire d'utiliser la version 0.9.9 ou ultérieure de 
{\tt Xcas}.
\newpage
 {\bf Cryptographie}\\
\verb|s:="un message a coder"; L:=asc(s)|, la liste \verb|L| contient
une suite d'entiers compris entre 0 et 255. 
Pour le syst\`eme RSA, on peut g\'en\'erer une paire $p,q$ de nombres premiers 
et d\'efinir $n=pq$, par exemple :\\
\verb|p:=nextprime(10^30); q:=nextprime(10^15); n:=p*q;|\\
(on peut aussi utiliser de l'al\'eatoire) puis on g\'en\'ere une paire de clefs $c,d$ :\\
\verb|n1:=euler(n); c:=rand(); d:=inv(c % n1) % 0|\\
puis on code : \verb|N:=powmod(L,c,n);| et d\'ecode: \verb|char(powmod(N,d,n));|
Pour \'eviter des attaques \'evidentes, on peut cr\'eer des regroupements de 8 
par deux conversions en base :\\
\verb|l:=convert(L,base,256); M:=convert(l,base,256^8)|\\
Pour le syst\`eme de Hill, on cr\'ee par exemple une matrice al\'eatoire 2,2\\
\verb|n:=nextprime(512); M:=ranm(2,2) % n; Minv:=inv(M);| \\
(on recommence si \verb|M| n'est pas inversible), puis on calcule les
produits par paire d'\'el\'ements de \verb|L| (ajouter un espace dans \verb|s| 
en fin de chaine si le nombre d'\'el\'ements est impair)\\
\verb|N:=seq(M*[L[2*j],L[2*j+1]],j,0,size(L)/2-1)|\\
Le d\'ecodage en utilisant :
\verb|O:=seq(Minv*N[j],j,0,size(N)-1)|\\
puis il faut aplatir \verb|O| avant d'appeler \verb|char| :\\
\verb|P:=[];|\\
\verb|pour j de 0 jusque size(O)-1 faire P:=concat(P,O[j]);|\\
\verb|fpour; P|

{\bf Syst\`emes dynamiques, graphes probabilistes}\\
Ouvrir un tableur (menu Tableur), indiquez par exemple 4 lignes et 4
colonnes et choisissez un nom de matrice, par exemple \verb|M| puis
remplissez-le par exemple avec
\[ \left(\begin{array}{cccc}
\frac{1}{3} & \frac{1}{4} & 0 & \frac{1}{4} \\
\frac{1}{3} & \frac{1}{4} & \frac{1}{2} & \frac{1}{4} \\
0 & \frac{1}{4} & 0 & \frac{1}{4} \\
\frac{1}{3} & \frac{1}{4} & \frac{1}{2} & \frac{1}{4}
\end{array}\right) \]
Si vous n'avez pas le bon nombre de lignes ou de colonnes ou oubli\'e
le nom de variable, cliquez sur la ligne \verb|Sheet config...| du
tableur.
On a ici la somme des {\bf colonnes} de {\tt M} \'egales \`a 1. Donc si {\tt V0} est 
le vecteur initial, pour avoir la probabilit\'e de la cinqui\`eme \'etape, on 
\'ecrira  {\tt V5:=M\verb|^|5*V0}.
Vous pouvez faire une \'etude formelle
\verb|supposons(n>0);Mn:=matpow(M,n);limit(Mn,n=inf)|\\
ou num\'erique avec \verb|v:=seq(1./nrows(M),j,1,nrows(M));|\\
\verb|pour j de 1 jusque 100 faire v:=M*v; fpour;|\\
{\bf Attention}, les probabilistes codent habituellement par une matrice \verb|A|
dont les sommes des {\bf lignes} sont \'egales \`a 1, transposée de \verb|M| ci-dessus. 
Donc si {\tt V0} est le vecteur initial, pour avoir la probabilit\'e de la cinqui\`eme \'etape, on 
\'ecrira {\tt V5:=V0*A\verb|^|5}.

Un exemple de mod\`ele proie-pr\'edateur se trouve sur le site p\'edagogique de Xcas :
\verb|www-fourier.ujf-grenoble.fr/~parisse/irem.html|

{\bf Images}\\
Voir la session \verb|image.xws| du menu \verb|Aide->Exemples->demo|.

 {\bf Autres}\\
Cherchez le mot-clef fougere (F12 dans Xcas), ou fraction continue
(en lien avec l'identit\'e de B\'ezout, les r\'eduites successives sont
les coefficients de B\'ezout de $au_n-bv_n=(-1)^n r_n$), ...
\newpage
\section{Exemples d'utilisation}
\subsection{Cryptographie de Hill}
On associe aux nombres 0,..9,10 les caract\`eres \verb|"0",.."9",":"| et aux 
nombres 11,..36 les lettres \verb|"A",.."Z"| (cf {\tt co(nbre)} et 
{\tt cod(lettre)}).
On utilise {\tt asc,char,op} (par ex 
{\tt op(asc("09:AZ"))=(48,57,58,65,90)}).\\
Le texte $T$ \`a coder, (compl\'et\'e \'eventuellement avec \verb|":"|) est 
d\'ecoup\'e en $p$ blocs successifs de 2 lettres.
\`A ces blocs on associe une matrice \`a coefficients entiers $B$ 
de 2 lignes et $p$ colonnes (cf {\tt B:=coda(T)}).\\ 
%Soit une matrice carr\'ee $M$ d’ordre 2 \`a coefficients entiers, (matrice de codage), 
La matrice de codage $M$ est une matrice 2*2 \`a coefficients entiers, 
connue de l’exp\'editeur et du destinataire du message. Ici, 
{\tt M:=irem(ranm(2,2),37)}= {\tt [[7,11],[8,11]]} 
et {\tt N:=irem(Inverse(M),37)}={\tt [[-1,1],[-6,-4]]}\\
Le produit $C = MB$ est une matrice colonne que l'on transforme modulo 37 en 
le texte cod\'e $TC$ (cf {\tt TC:=codag(C)}) et finallement {\tt TC:=codage(T,M)}.\\
Pour d\'ecoder, il faudra faire le chemin inverse : {\tt codage(TC,N)}.
\begin{verbatim}
co(c):={
  local n;
  si c<0 alors c:=c+37; fsi;
  si c<=10 alors c:=c+48; sinon c:=c+54; fsi;
  return char(c);
}:;
cod(l):={
  local n;
  n:=op(asc(l));
  si 48<=n and n<=58 alors n:= n-48; sinon n:=n-54 fsi;
  return n;
}:;
coda(s):={
  local j,n,B,p;
  n:=dim(s);
  si odd(n) alors s:=s+":"; n:=n+1;fsi;
  p:=n/2;B:=makemat(0,2,p);
  pour j de 0 jusque p-1 faire 
   B[0,j]:=cod(s[2*j]);B[1,j]:=cod(s[2*j+1]);
  fpour;
  return B;
}:;
codag(B):={
  local s,n,j,k;
  n:=coldim(B);s:="";
  pour j de 0 jusque n-1 faire 
   pour k de 0 jusque 1 faire
     s:=s+co(B[k,j]);
   fpour;
  fpour;
  return s;
}:;
codage(s,M):={
  local B,C;
  B:=coda(s);
  C:= irem(M*B,37);
  return codag(C);
}:;
\end{verbatim}
On tape : {\tt M:=[[7,11],[8,11]]}\\
{\tt N:=irem(Inverse(M),37)} renvoie {\tt [[-1,1],[-6,-4]]}\\
{\tt codage("ABCD012",M)} renvoie {\tt "NYMZAACE"}\\
{\tt codage("NYMZAACE",N)} renvoie {\tt "ABCD012:"}\\
Mon message \`a d\'ecoder : {\tt "A8P0FPSGGZDS6FZTR1MXO1DZG9Y9B5N3"}
\subsection{Syst\`emes dynamiques}
On consid\`ere 2 urnes $A$ et $B$, et 3 boules num\'erot\'ees de 0 \`a 2.
Au d\'ebut, toutes les boules se trouvent dans l'urne $A$. Aux \'etapes 
1, 2,,..$n$, on tire au hasard de fa\c{c}on \'equiprobable, un nombre entre 0 
et 2 ({\tt rand(2)}). On change d’urne la boule correspondante.
D\'eterminer la matrice de transition $M$ et trouver la probabilit\'e de chacun
des \'etats lorsque $n=5$ puis lorsque $n=10$. \\
Trouver la probabilit\'e de chacun des \'etats lorsque $n$ tend vers l'infini.

Pour $j=0..3$, lorsqu'il y a $(3-j)$ boules en $A$ et $j$ boules en $B$ on dit  que les urnes sont dans l'\'etat $j$.
La probabilit\'e de passer \`a chaque \'etape de l'\'etat $j$ \`a l'\'etat $k$ 
est donn\'e par $M[j,k]$, avec 
$$M= \left(\begin{array}{cccc}
0 & 1 & 0 & 0 \\
\frac{1}{3} & 0 & \frac{2}{3} & 0 \\
0 & \frac{2}{3} & 0 & \frac{1}{3} \\
0 & 0 & 1 & 0
\end{array}\right)$$  
On tape {\tt (M\verb|^|5)[0]}\\
On obtient lorsque $n=5$ : 
{\tt [0,61/81,0,20/81]} (2 boules en $A$ et 1 boule en $B$ avec une 
probabilit\'e de 61/81 ou 3 boules en $B$ avec une probabilit\'e de 20/81)\\
On tape {\tt (M\verb|^|10)[0]}\\
On obtient lorsque $n=10$: 
{\tt [4921/19683,0,14762/19683,0]} (3 boules en $A$ avec une probabilit\'e 
de 4921/19683 ou 1 boule en $A$ et 2 boules en $B$ avec une probabilit\'e de 
14762/19683)\\
On tape : \\
{\tt supposons(n,integer):;M0:=matpow(M,2*n):;limit(M0,n=inf)}\\
On obtient lorsque $n$ est pair et tend vers $+\infty$ :
$\left(\begin{array}{cccc}
\frac{1}{4} & 0 & \frac{3}{4} & 0 \\
0 & \frac{3}{4}&0 & \frac{1}{4} \\
\frac{1}{4} & 0 & \frac{3}{4}&0 \\
0 & \frac{3}{4}&0 & \frac{1}{4} 
\end{array}\right)$\\
On tape : \\
{\tt supposons(n,integer):;M1:=matpow(M,2*n+1):;limit(M1,n=inf)}\\
On obtient  lorsque $n$ est impair et tend vers $+\infty$ :
$\left(\begin{array}{cccc}
0 & \frac{3}{4} & 0 & \frac{1}{4} \\
\frac{1}{4} & 0 & \frac{3}{4}&0 \\
0 & \frac{3}{4} & 0 & \frac{1}{4} \\
\frac{1}{4} & 0 & \frac{3}{4}&0 
\end{array}\right)$
\newpage
\part{Fiche {\tt Xcas}  analyse}
\vskip 2mm
\begin{center}
\begin{tabular}{|ll|}
\hline
\multicolumn{2}{|c|}{\bf D\'eriv\'ees}\\
\hline\hline
\verb|diff(E)| ou \verb|E'| &expression de la d\'eriv\'ee de l'expression $E$ par rapport \`a $x$\\
\verb|diff(E,t)| ou \verb|(E,t)'| &expression de la d\'eriv\'ee de l'expression $E$ par rapport \`a $t$\\
\verb|diff(f)| ou \verb|f'| & fonction d\'eriv\'ee de la fonction $f$\\
\verb|diff(E,x$n,y$m)| &expression $\frac{\partial E}{\partial x^n\partial y^m}$, d\'eriv\'ee partielle de l'expression $E$\\
\verb|grad| & gradient\\ 
\verb|divergence| & divergence\\
\verb|curl| & rotationnel\\
\verb|laplacian| & laplacien\\
\verb|hessian| & matrice hessienne\\
\hline
\end{tabular}
\end{center}
\vskip 2mm
\begin{center}
\begin{tabular}{|ll|}
\hline
\multicolumn{2}{|c|}{\bf Limites et d\'eveloppements limit\'es}\\
\hline\hline
\verb|limite(E,x,a)| & limite qd $x\rightarrow a$ de l'expression $E$\\
\verb|limite(E,x,a,1)| & limite qd  $x\rightarrow a^+$ de l'expression $E$\\
\verb|limite(E,x,a,-1)| & limite  qd  $x\rightarrow a^-$ de l'expression $E$\\
\verb|taylor(E,a)| & d\'eveloppement limit\'e de $E$ en $x=a$ ordre 5\\
\verb|series(E,x=a,n)| & d\'eveloppement limit\'e de $E$ en $x=a$
ordre $n\in\N$\\
\hline
\end{tabular}
\end{center}
\vskip 2mm
\begin{center}
\begin{tabular}{|ll|}
\hline
\multicolumn{2}{|c|}{\bf Int\'egrales}\\
\hline\hline
\verb|int(E,x)| &primitive de l'expression $E$ par rapport \`a $x$\\
\verb|int(f)| &fonction primitive de la fonction $f$\\
\verb|int(E,x,a,b)| & int\'egrale exacte de l'expression $E$ entre $x=a$ et $x=b$\\
\verb|romberg(E,x,a,b)| & int\'egrale approch\'ee de l'expression $E$ entre $x=a$ et $x=b$\\
\hline
\end{tabular}
\end{center}
\vskip 2mm
\begin{center}
\begin{tabular}{|ll|}
\hline
\multicolumn{2}{|c|}{\bf \'Equations}\\
\hline\hline
\verb|solve(eq,x)| &solution exacte dans $\R$ d'une \'equation polynomiale\\
\verb|solve([eq1,eq2],[x,y])| & solution exacte dans $\R$ d'un syst\`eme polynomial\\
\verb|csolve(eq,x)| & solution exacte dans $\C$ d'une \'equation polynomiale\\
\verb|csolve([eq1,eq2],[x,y])| & solution exacte dans $\C$ d'un syst\`eme polynomial\\
\verb|fsolve(eq,x=x0)| &solution approch\'ee d'une \'equation (\verb|x0|=\verb|x| estim\'e)\\
\verb|fsolve([eq],[var],[val])| &solution approch\'ee d'un syst\`eme
(\verb|val|=estimation)\\
\verb|newton(f(x),x,x0,nbiter)| & racine de $f(x)$ par la m\'ethode de Newton\\
\verb|linsolve| & syst\`eme lin\'eaire\\
\verb|proot| & racines approch\'ees d'un polyn\^ome\\
\hline
\end{tabular}
\end{center}
\vskip 2mm
\begin{center}
\begin{tabular}{|ll|}
\hline
\multicolumn{2}{|c|}{\bf \'Equations diff\'erentielles}\\
\hline\hline
\verb|desolve| &r\'esolution exacte\\
\verb|odesolve| &r\'esolution approch\'ee\\
\verb|plotode| &trac\'e d'une solution\\
\verb|plotfield| &trac\'e du champ de vecteurs\\
\verb|interactive_plotode| & trac\'e de solutions d\'efinies \`a la souris\\
\hline
\end{tabular}
\end{center}
%\vskip 2mm
\begin{center}
\begin{tabular}{|ll|}
\hline
\multicolumn{2}{|c|}{\bf Trac\'es de courbes}\\
\hline\hline
\verb|plot| ou \verb|graphe|& graphe d'une expression d'une variable\\
\verb|tangente| & tangente \`a une courbe\\
\verb|pente| & pente d'une droite\\
\verb|plotfunc| & graphe d'une expression d'1 ou 2 variable(s)\\
\verb|...(...,couleur=...)| & pour choisir la couleur d'un trac\'e\\
\verb|plotarea| & affiche l'aire sous une courbe\\
\verb|plotparam| & courbe param\'etrique\\
\verb|plotpolar| & courbe en polaires\\
\verb|plotimplicit(f(x,y),x,y)| & courbe implicite de $f(x,y)=0$\\
\hline
\end{tabular}
\end{center}
{\bf Un exemple~:}
\'etude de la fonction $f$ d\'efinie  par :
$\displaystyle f(x)=\frac{\ln(|2-x|)}{\ln(|x|)}$.\\
On va montrer que $f$ est d\'efinie sur $\R-\{-1,0,1,2\}$ et peut \^etre 
prolong\'ee sur $\R-\{-1,2\}$. Puis on fera le graphe de $f$,
on tracera les tangentes en $x=-1/2$, $x=0$ et $x=1$, on donnera une valeur 
approch\'ee \`a $10^{-3}$ pr\`es de l'aire comprise entre 
$x=3,x=5,y=0$ et la courbe avec une subdivision en 4 trap\`ezes.\\
On tape :
\verb|f(x):=ln(abs(x-2))/ln(abs(x))|\\ 
{\tt limite(f(x),x,1)} renvoie $-1$ et 
{\tt limite((f(x)+1)/(x-1),x,1)} renvoie $-1$, donc la pente de la tangente
au point (1,-1) vaut  -1.\\ 
%La tangente au point (1,-1) a donc pour pente -1\\
{\tt limite(f(x),x,0)} renvoie 0,
{\tt limite(f(x)/x,x,0,1)} renvoie $-\infty $ et
{\tt limite(f(x)/x,x,0,-1)} renvoie $+\infty$. Donc $Oy$ est tangent en (0,0).\\
%la tangente au point (0,0) est l'axe des $y$.\\
{\tt limite(f(x),x,-1)} renvoie $\infty$,  donc $x=-1$ est asymptote.\\
{\tt limite(f(x),x,2)} renvoie $-\infty $,  donc $x=2$ est asymptote.\\
{\tt limite(f(x),x,inf),limite(f(x),x,-inf)} renvoie (1,1),\\
 $y=1$ est donc asymptote.\\
Pour prolonger $f$ par continuit\'e en $x=0$ et $x=1$, on tape :\\
\verb|g(x):=when(x==0,0,when(x==1,-1,f(x)))|\\
On tape : \verb|G:=plotfunc(g(x),x=-5..8,couleur=rouge)|,\\
{\tt droite(y=1),tangente(G,-1/2),droite(1-i,pente=-1),}\\
{\tt areaplot(g(x),x=3..5,4,trapeze)} et on obtient :\\
\framebox{\includegraphics[width=12cm]{fichgraph}}\\
Si on approche l'aire avec 4 trap\`ezes,  on peut aussi taper : 
{\tt Digits:=3;} puis : \\
{\tt 0.5*(f(3)/2+f(3.5)+f(4)+f(4.5)+f(5)/2)}
et cela renvoie 0.887.\\
Avec {\tt areaplot(g(x),x=3..5)} l'aire est calcul\'ee par la m\'ethode de 
Romberg (c'est une acc\'el\'eration de la convergence de la m\'ethode des 
trap\`ezes) et est affich\'ee avec 3 d\'ecimales. Pour avoir plus de 
d\'ecimales, tapez {\tt romberg(g(x),x,3,5)}. Si {\tt Digits:=12;}, on obtient
{\tt 0.903226168665}. 
%La m\'ethode de Romberg est une acc\'el\'eration de la convergence de la m\'ethode des trap\`ezes.
\section{Exercice : Nombre de chiffres de 1000!}\label{exofact}
{\bf Pr\'erequis} Si $f$ est concave ($f''(x)\leq 0$) ou convexe ($f''(x)\geq 0$) la m\'ethode des trap\`ezes et la m\'ethode du point milieu encadrent 
l'int\'egrale en effet :\\ 
\begin{minipage}[h]{9cm}
%\vskip 2mm
\begin{center}\includegraphics[width=\textwidth]{pointmil}\end{center}
\end{minipage}
\hspace{0.3cm}
\begin{minipage}[h]{3.2cm}
%\vskip 2mm
si $f$ est concave (resp convexe), la courbe est situ\'ee sous (resp au-dessus de) la tangente au point milieu et 
les 2 triangles noirs sont \'egaux.
\end{minipage}\\

Soient $S_n=\ln(n!)=\sum_{k=1}^n\ln(k)$ pour $n\in \N^*$ et $I_n=\int_1^n\ln(x)dx$.
\begin{itemize}
\item En faisant une int\'egration par parties calculer $I_n$.
\item En utilisant la m\'ethode des rectangles montrer que :
$S_{n-1} < I_n < S_n$.
\item En d\'eduire que : $I_n < S_n < I_n+\ln(n)$
et donner un encadrement de $I_n$ en fonction de $n$.
\item Utilisez la m\'ethode des trap\`ezes et du point milieu pour trouver un 
meilleur encadrement de $I_n$. 
\item En d\'eduire $p \in \N$ tel que : $10^{p-1}< 1000!< 10^{p}$.\\
Quel est le nombre de chiffres de 1000! ?\\
\end{itemize}
La solution avec {\tt Xcas}
\begin{itemize}
\item Calcul de $I_n$\\
On tape :
{\tt ibpu(ln(x),ln(x),x,1,n)}\\
On obtient :
{\tt [n*ln(n),-1]}\\
On tape :
{\tt ibpu( [n*ln(n),-1],0,x,1,n)}\\
On obtient :
{\tt -n+1+n*ln(n)}\\
Donc $I_n= 1-n+n\ln(n)$
\item On approche l'aire sous la courbe de $y=\ln(x)$. La somme des aires des
rectangles gauches (inf\'erieurs) est $S_{n-1}$ et la somme des aires des 
rectangles droits (sup\'erieurs) est $S_n$. Donc $S_{n-1} < I_n < S_n$.\\
On visualise les rectangles gauches lorsque $n=10$ :\\
{\tt plotarea(ln(x),x=1..10,10,rectangle\_gauche)}\\
On obtient :\\
\includegraphics[width=\textwidth]{rectg}\\
On visualise les rectangles droits lorsque $n=10$ :\\
{\tt plotarea(ln(x),x=1..10,10,rectangle\_droit)}\\
On obtient :\\
\includegraphics[width=\textwidth]{rectd}
\item Puisque $S_{n-1}+\ln(n)=S_n$ et que  $S_{n-1}< I_n< S_n$, on en 
d\'eduit que :\\
$I_n< S_{n-1}+\ln(n)=S_n < I_n+\ln(n)$\\
et donc puisque $I_n= 1-n+n\ln(n)$ :\\
$1-n+n*\ln(n)< S_n=\ln(n!) < 1-n+n\ln(n)+\ln(n)$
\item La somme des aires des trap\`ezes $T_n$ est inf\'erieure \`a $I_n$ et 
on a :\\
$T_n=\ln(2)+..\ln(n-1)+\ln(n)/2=\ln(n!)-\ln(n)/2<I_n$\\
On prend comme point milieu $2,3..n-1$ et on rajoute l'aire de 2 rectangles ( 
pour majorer l'aire entre 1 et 3/2 et pour majorer l'aire entre 
$n-1/2$ et $n$).\\
On visualise les rectangles de la m\'ethode du point 
milieu lorsque $n=10$ :\\
{\tt plotarea(ln(x),x=3/2..19/2,8,point\_milieu);}\\
{\tt rectangle(1,1.5,ln(1.5)*2),rectangle(9.5,10,ln(10)*2)}\\
{\tt plotfunc(ln(x),x=1..10,affichage=1+epaisseur\_ligne\_3)}\\
On obtient :\\
\includegraphics[width=\textwidth]{pointm}
On a :
$I_n<M_n=\ln(3/2)/2+\ln(2)+...\ln(n-1)+\ln(n)/2$\\
%Donc $\displaystyle I_n<\frac{\ln(3/2)}{2}+\ln(n!)-\frac{\ln(n)}{2}$\\
Puisque $I_n= 1-n+n\ln(n)$, on obtient comme encadrement :
$$\displaystyle 1-n+n\ln(n)+\frac{\ln(n)}{2}-\frac{\ln(3/2)}{2}<\ln(n!)<1-n+n\ln(n)+\frac{\ln(n)}{2}$$
\item On cherche $p$ le nombre de chiffres de 1000! c'est \'a dire 
$p\in \N$ tel que $10^{p-1}< 1000! <10^{p}$  c'est \`a dire tel que 
$p-1 \leq \ln(1000!)/\ln(10) < p$ \\
On \'evalue l'encadrement de $\ln(1000!)/\ln(10)$, on tape :\\
{\tt M:=subst((1-n+n*ln(n)+ln(n)/2)/ln(10),n=1000):;}\\
{\tt evalf(M-ln(3/2)/(2*ln(10)),2),evalf(M,2)}\\
On obtient : {\tt 2567.55,2567.64}\\
Donc $p-1=2567$. Le nombre de chiffres de 1000! est donc $p=2568$.\\
Pour v\'erifier, on tape {\tt dim(string(1000!))} et on obtient : {\tt 2568}
\end{itemize}
\newpage
\part{Fiche {\tt Xcas} la g\'eom\'etrie}
%\vskip 2mm
\begin{center}
\begin{tabular}{|ll|}
\hline
\multicolumn{2}{|c|}{\bf Fonctions de g\'eom\'etrie 2-d}\\
\hline\hline
\verb@point@& point donn\'e par ses coordonn\'ees ou son affixe\\
\verb@affichage=...@&dernier argument de {\tt point} pour l'afficher selon...\\
\verb|legend| & met du texte \`a partir d'un point donn\'e\\
\verb|segment| & segment donn\'e par 2 points\\
\verb@droite(A,B)@& droite passant par $A,B$\\
\verb@droite(a*x+b*y+c=0)@& droite d'\'equation $ax+by+c=0$\\
\verb@triangle(A,B,C)@& triangle de sommets $A,B,C$\\
\verb@bissectrice(A,B,C)@& bissectrice issue de $A$ du triangle $ABC$\\
\verb@angle(A,B,C)@& mesure (en radians ou degr\'es) de $\widehat{BAC}$\\
\verb@mediane(A,B,C)@& m\'ediane issue de $A$ du triangle $ABC$\\
\verb@hauteur(A,B,C)@&  hauteur issue de $A$ du triangle $ABC$\\
\verb@mediatrice(A,B)@&  m\'ediatrice de $AB$ \\
\verb@carre(A,B)@& carr\'e direct de c\^ot\'e $AB$\\
\verb@cercle(A,r)@& cercle de centre $A$, rayon $r$\\
\verb@cercle(A,B)@& cercle de diam\`etre $AB$\\
\verb@rayon(c)@& longueur du rayon du cercle $c$\\
\verb@centre(c)@& centre du cercle $c$\\
\verb@distance(A,B)@& distance de $A$ \`a $B$ (point ou courbe)\\
%\verb@distance(A,d)@& renvoie la distance de $A$ \`a la droite $d$ \\
\verb@inter(G1,G2)@& liste des points de $G1\cap G2$\\
\verb@inter_unique(G1,G2)@& un des points de $G1\cap G2$\\
\hline
\verb|supposons|& rajout d'un param\`etre symbolique ou d'hypoth\`eses\\
\verb|element|& rajout d'un param\`etre num\'erique\\
\hline
\verb|polygone| & polygone ferm\'e\\
\verb|polygone_ouvert| & polygone ouvert\\
\hline
\verb|coordonnees| & coordonn\'ees d'un point\\
\verb|equation| & \'equation cart\'esienne\\
\verb|parameq| & \'equation param\'etrique\\
\hline
\verb@translation(B-A,M)@& image de $M$ par la translation $\overrightarrow{AB}$\\\verb@symetrie(A,M)@& image de $M$ par
                       la sym\'etrie point (ou droite) $A$\\
\verb@rotation(A,t,M)@& image de $M$ par
                        la rotation centre $A$ et angle $t$\\
\verb@homothetie(A,k,M)@& image de $M$ par
                        l'homoth\'etie centre $A$ et rapport $k$\\
\verb@similitude(A,k,t,M)@& image de $M$ par la similitude centre $A$, rapport $k$\\
                       & et angle $t$\\
\hline
\end{tabular}
\end{center}
En cochant \framebox{{\tt Landscape}}, les lignes de commandes sont sous l'\'ecran graphique.
Pour construire un nouvel objet g\'eom\'etrique dans une figure, on a 2 
possibilit\'es~:\\
%\begin{itemize}
%\item 
- soit on s\'electionne un \framebox{\tt Mode} \`a la souris puis on clique les
objets d\'efinissant le nouvel objet. Si \framebox{$\sim$} est 
d\'ecoch\'e, les points cliqu\'es sont \`a coordonn\'ees exactes et si \framebox{$\sim$} est coch\'e, les points cliqu\'es sont \`a coordonn\'ees d\'ecimales.\\ 
%\item 
- soit on remplit les lignes de commande, situ\'ees \`a gauche de la figure, 
en tapant la commande ou en s'aidant du menu {\tt Geo}. L'ex\'ecution d'une ligne de commande par {\tt  Enter} 
entraine l'ex\'ecution des lignes suivantes.\\ 
%\end{itemize}

{\bf Par exemple,} pour tracer un triangle $ABC$, la m\'ediatrice de $AB$ et le
cercle circonscrit \`a $ABC$, on ouvre un niveau de g\'eom\'etrie 2d 
({\tt Alt+g}) et avec la souris :
\begin{itemize}
\item On choisit comme mode : {\tt Mode$\blacktriangleright$Polygones$\blacktriangleright$triangle}\\
On clique pour d\'esigner le premier point, puis on d\'eplace la souris. Le 
segment $AS$ o\`u $S$ est le point point\'e par la souris, se dessine en 
pointill\'e. On clique pour  d\'esigner le 2-i\`eme 
point, puis  on d\'eplace la souris un triangle en pointill\'e se dessine. 
On clique  pour  d\'esigner le 3-i\`eme point. On obtient un triangle et
des lignes de commandes apparaissent  (\verb|A:=point(...)|, ...).

\item On choisit comme mode : {\tt Mode$\blacktriangleright$Lignes$\blacktriangleright$mediatrice}\\
On clique sur le point $A$, puis on d\'eplace la souris : la m\'ediatrice de 
$AS$, o\`u $S$ est le point point\'e par la souris, se dessine en pointill\'e.  On clique sur $B$. On obtient la m\'ediatrice de $AB$ et dans la ligne de 
commandes on  a :\\
\verb|E:=mediatrice(A,B,'affichage'=0)|
\item On choisit comme mode :{\tt Mode$\blacktriangleright$Cercles$\blacktriangleright$circonscrit}\\
On clique successivement sur les points $A$, $B$ : le cercle circonscrit \`a 
$ABS$, o\`u $S$ est le point point\'e par la souris, se dessine en pointill\'e. 0n clique sur $C$. On obtient le cercle circonscrit \`a  $ABC$ et dans la ligne de commandes on a :
\verb|F:=circonscrit(A,B,C,'affichage'=0)|
\item On choisit {\tt Mode$\blacktriangleright$Pointeur} pour pouvoir d\'eplacer le point $A, B$ 
ou $C$.
\end{itemize}
0n peut aussi taper directement les commandes dans les lignes de commandes :\\
\verb|A:=point(-1,2);|\\
\verb|B:=point(1,0);|\\
\verb|C:=point(-3,-2);|\\
\verb|D:=triangle(A,B,C);|\\
\verb|E:=mediatrice(A,B);|\\
\verb|F:=circonscrit(A,B,C);|

\vskip 2mm
\begin{center}
\begin{tabular}{|ll|}
\hline
\multicolumn{2}{|c|}{\bf Objets graphiques 3-d}\\
\hline\hline
\verb|plotfunc| & surface par \'equation \\
\verb|plotparam| & surface ou courbe param\'etrique\\
\hline\hline
\verb|point| & point donn\'e par la liste de ses 3 coordonn\'ees\\
\verb|droite| & droite donn\'ee par 2 \'equations ou 2 points\\
\verb|inter| & intersection \\
\verb|plan| & plan donn\'e par son \'equation ou 3 points \\
\verb|sphere| & sph\`ere donn\'ee par centre et rayon\\
\verb|cone| & c\^one donn\'e par sommet, axe, demi-angle au sommet\\
\verb|cylindre| & cylindre donn\'e par axe, rayon, [hauteur] \\
\verb|polyedre| & poly\`edre donn\'e par ses sommets\\
\verb|tetraedre| & t\'etra\`edre r\'egulier direct ou pyramide\\
\verb|tetraedre_centre| & t\'etra\`edre r\'egulier direct\\
\verb|cube| & cube \\
\verb|cube_centre| & cube \\
\verb|parallelepipede| & parall\'el\'epipede\\
\verb|octaedre| & octa\`edre\\
\verb|dodecaedre| & dod\'eca\`edre\\
\verb|icosaedre| & icosa\`edre\\
\hline
\end{tabular}
\end{center}
\section{Exemples d'utilisation}
\subsection{Une d\'emonstration avec {\tt Xcas}}
Soient 3 points $A$, $B$, $C$ d'affixe $a$, $b$, $c$.
Montrer que le triangle $ABC$ est \'equilat\'eral direct si et seulement si 
$a+bj+cj^2=0$ o\`u $j=\exp(2i\pi/3)$.
\subsubsection{La solution avec {\tt Xcas}}
On tape dans un niveau de g\'eom\'etrie :
\begin{verbatim}
supposons(b1=[1.3,-5,5,0.1]);
supposons(b2=[2.3,-5,5,0.1]);
B:=point(b1+i*b2);
supposons(c1=[-2.2,-5,5,0.1]);
supposons(c2=[3.5,-5,5,0.1]);
C:=point(c1+i*c2);
j:=exp(2*i*pi/3);
a:=-b*j-c*j^2;
A:=point(a);
est_equilateral(A,B,C);
\end{verbatim}
La r\'eponse pour {\tt est\_equilateral(A,B,C);} est {\tt 1} et 
comme tous les calculs sont faits avec des param\`etres 
formels cela vaut une d\'emonstration.\\
Pour la r\'eciproque, on remplace les 3 derni\`eres lignes par :
\begin{verbatim}
triangle_equilateral(B,C,A);
a:=affixe(A)
normal(a+b*j+c*j^2);
\end{verbatim}  
la r\'eponse pour {\tt normal(a+b*j+c*j\verb|^|2);} est {\tt 0} et
comme tous les calculs sont faits avec des param\`etres 
formels cela vaut une d\'emonstration.
\subsubsection{La solution sans {\tt Xcas}}
On a $j^2=\exp(4i\pi/3)$, $-j^2=\exp(i\pi/3)$ et $1+j+j^2=0$\\
$ABC$ est \'equilat\'eral direct \'equivaut \`a  $(a-b)=-j^2(c-b)$ donc 
\'equivaut \`a :\\
$a-b(1+j^2)+cj^2=a+bj+cj^2=0$.
\subsection{Maximiser une aire}
Soient un segment $AB$ de longueur 10 unit\'es et un point $C$ de ce 
segment.
On pose $AC=t$. On construit du m\^eme c\^ot\'e de $AB$ les triangles  
\'equilat\'eraux $ACD$ et $CBE$ tel que $(\overrightarrow{AC},\overrightarrow{AD})=(\overrightarrow{CB},\overrightarrow{CE})=\pi/3$.\\
Pour quelles valeurs de $t$ l'aire $a(t)$ du triangle $CED$ est-elle maximale ?\\
%On fera cette \'etude  analytiquement en faisant le graphe de la fonction $a$, puis g\'eom\'etriquement.
Avec {\tt Xcas}, on choisit $A$ de coordonn\'ees $(0,-4)$ et 
$B$ de coordonn\'ees $(10,-4)$. $C$ est alors de coordonn\'ees $(t,-4)$.
On tape dans un niveau de g\'eom\'etrie 2d :
\begin{verbatim}
A:=point(0,-4);
B:=point(10,-4);
supposons(t=[2.9,0,10,0.1]);
C:=point(t,-4);
triangle_equilateral(A,C,D);
triangle_equilateral(C,B,E);
segment(D,E);
triangle_equilateral(A,B,F);
triangle(C,D,E,affichage=1+rempli);
a(t):=aire(triangle(C,E,D));
plotfunc(a(t),t=0..10,affichage=1);
M:=point(t,a(t),affichage=1);
segment(C,M,affichage=1+ligne_tiret_point);
\end{verbatim}
On obtient :\\
\includegraphics[width=\textwidth]{airemax3}\\
La parabole en rouge est la repr\'esentation graphique de l'aire $a(t)$ du 
triangle $CDE$ (en rouge).
Lorsque $C$ d'abscisse $t$ se d\'eplace sur $AB$ \`a l'aide du curseur $t$, le 
point $M$ de coordonn\'ees $(t,a(t))$ d\'ecrit cette parabole.\\
{\bf Attention} {\tt aire} renvoie une aire alg\'ebrique.
{\tt aire(triangle(C,E,D))} est positive car le triangle $CED$ est direct et 
on a :\\
{\tt aire(triangle(C,E,D))=-aire(triangle(C,D,E))}.\\
Dans la mesure o\`u les coordonn\'ees des points $A$ et $B$ sont des nombres 
exacts (par exemple  $(10,-4)$ et non  $(10.0,-4.0)$), l'instruction de 
{\tt Xcas} :\\
{\tt supposons(t=[2.9,0,10,0.1]);} a pour effet de faire le 
dessin avec la valeur de $t$ donn\'e par le curseur (ici $t=2.9$), mais de faire
tous les calculs en fonction de la variable symbolique $t$. On tape {\tt a(t)}
dans une ligne  de commande (cf niveau 2) et on obtient :
{\tt (sqrt(3))/4*t\verb|^|2+(-5*sqrt(3))/2*t}\\
On peut facilement calculer cette aire qui est la moiti\'e de l'aire 
du parall\'elogramme $DCEF$ avec $CE=10-t$, $DC=t$ et 
$(\overrightarrow{AC},\overrightarrow{AD})=\pi/3$ donc ce parall\'elogramme a 
pour hauteur $CH=t\sqrt 3/2$.
%Le parall\'elogramme $DCEF$ a donc pour aire : $\displaystyle \frac{\sqrt 3}{2}t(10-t)$\\
Donc $\displaystyle a(t)= \frac{\sqrt 3}{4}t(10-t)=\frac{-\sqrt 3}{4}t^2+\frac{5\sqrt 3}{2}t$.\\
On tape pour calculer $a'(t)$ :
{\tt factor(diff(a(t),t))}\\
On obtient :
{\tt ((-(sqrt(3)))*t+5*sqrt(3))/2}\\
Donc $a(t)$ a un maximum pour $t=5$ c'est \`a dire lorsque $C$ est le milieu de $AB$.\\
Ce maximum vaut $\displaystyle \frac{25\sqrt 3}{4}$ c'est l'aire d'un triangle 
\'equilat\'eral de c\^ot\'e 5=$AB/2$. 
\newpage
\part{Fiche {\tt Xcas}  la programmation}

\noindent {\bf 1. \ Pour \'ecrire une fonction ou un programme}, il faut :
\begin{enumerate} 
\item[$\bullet$]choisir une syntaxe, on d\'ecrit ici la syntaxe {\tt Xcas},
\begin{itemize}
\item soit avec le menu {\tt Cfg$\blacktriangleright$Mode(syntax)$\blacktriangleright$xcas}, 
\item soit en ouvrant la fen\^etre de configuration du CAS en 
appuyant sur le bouton {\tt Config:...} et choisir {\tt Xcas} dans 
{\tt Prog style},
\end{itemize}
\item[$\bullet$] ouvrir un niveau \'editeur de programme soit en tapant 
{\tt Alt+p}, soit avec le menu {\tt Prg$\blacktriangleright$Nouveau programme}.  Une boite de dialogue s'ouvre pour faciliter la d\'efinition d'une
nouvelle fonction.
%Il contient d\'ej\`a le {\tt :;} qui termine le programme.
\item[$\bullet$] Taper la fonction ou le script (suite de commandes) en utilisant les boutons \verb|Fonctions|, \verb|Test| et \verb|Boucles| (assistant de cr\'eation d'une fonction,d'un test ou d'une boucle)  ou le menu {\tt Ajouter} de l'\'editeur. Le nom du programme et de ses 
arguments ne doit pas \^etre un mot-clef ou une commande de {\tt Xcas}, ces 
mots apparaissent en bleu et brun.
%taper la fonction ou le script (suite de commandes) en terminant chaque instruction par {\tt ;}. Le nom de cette fonction et de ses arguments ne doit pas \^etre un mot-clef ou un nom de commande de {\tt Xcas}, ceux-ci apparaissent en bleu et brun dans l'\'editeur de programmes. On peut commencer le nom des fonctions par une Majuscule pour diminuer le risque. 
\item[$\bullet$] cliquer sur {\tt OK} ou appuyer sur {\tt F9}, pour compiler le 
programme (ou ex\'ecuter le script si on n'a pas termin\'e son \'ecriture par 
{\tt :;}).
\item[$\bullet$] pour ex\'ecuter le programme, il suffit de se placer
dans une ligne de commandes vide, de taper le nom du programme suivi 
entre parenth\`eses par les valeurs des param\`etres s\'epar\'ees par des 
virgules et d'appuyer sur {\tt Enter}.
\end{enumerate}

\vspace{0.1cm}

\noindent {\bf 2. \ Le menu {\tt Ajouter} d'un niveau \'editeur de programme}\\
Ce menu vous permet d'avoir la syntaxe d'une fonction, d'un test et 
des boucles.
\noindent
\begin{minipage}[h]{7cm}
Syntaxe d'une fonction :
\begin{verbatim}
f(x,y):={
  local z,a,...,val;
  instruction1;
  instruction2;
  val:=...;
  .....
  instructionk;
  retourne val;
}:;
\end{verbatim}
\end{minipage}
%\hspace{1cm}
\begin{minipage}[h]{7cm}
\ \\ 
Euclide et l'identit\'e de B\'ezout :
\begin{verbatim}
Bezout(a,b):={
 local la,lb,lr,q;
  la:=[1,0,a];
  lb:=[0,1,b];
 tantque b!=0 faire
   q:=iquo(la[2],b)
   lr:=la+(-q)*lb;
   la:=lb; lb:=lr;
   b:=lb[2];
 ftantque
 retourne la;
}:;
\end{verbatim}
\end{minipage}
\ \\
{\bf 3. Compilation} La r\'eponse \`a une compilation reussie sera {\tt Done} si {\tt :;} termine le programme et sera la traduction du programme si c'est {\tt ;} qui le termine. \\
Pour {\tt Bezout(a,b)}, on clique sur {\tt OK} (ou touche {\tt F9}) et on 
obtient {\tt // Parsing Bezout // Success compiling Bezout} puis {\tt Done}.
Puis, on tape :\\
{\tt Bezout(78,56)} et on obtient {\tt [-5,7,2]} (car -5*78+7*56=2=pgcd(78,56)).
\ \\
{\bf 4. Pas \`a pas} Vous pouvez ex\'ecuter un programme commandes par 
commandes ou le mettre au point gr\^ace au d\'ebugueur. On tape :
{\tt debug(Bezout(78,56))}\\ 
Une fen\^etre s'ouvre et on appuie sur {\tt sst} pour une ex\'ecution au pas 
\`a pas.
\begin{center}
\begin{tabular}{|ll|}
\hline
\multicolumn{2}{|c|}{\bf Instructions en fan\c{c}ais}\\
\hline\hline
affectation& \verb@a:=2;@(\verb@a@ prend la valeur 2) et \verb@purge(a);@(\verb@a@ redevient formelle)\\
entr\'ee expression& \verb@saisir("a=",a);@\\
entr\'ee chaine& \verb@saisir_chaine("a=",a);@\\
sortie& \verb@afficher("a=",a);@\\
valeur retourn\'ee& \verb@retourne a;@\\
arr\^et de la boucle& \verb@break@;\\
alternative& \verb@si <condition> alors <inst> fsi;@ \\
           & \verb@si <condition> alors <inst1> sinon <inst2> fsi;@ \\
boucle pour& \verb@pour j de a jusque b faire <inst> fpour;@\\
           & \verb@pour j de a jusque b pas p faire <inst> fpour;@\\
boucle r\'ep\'eter& \verb@repeter <inst> jusqua <condition>;@\\
boucle tantque& \verb@tantque <condition> faire <inst> ftantque;@\\
boucle faire& \verb@faire<inst1>si(<condition>)break;<inst2>ffaire;@\\
\hline
\hline
\multicolumn{2}{|c|}{\bf Instructions comme en C++}\\
\hline\hline
affectation& \verb@a:=2;@(\verb@a@ prend la valeur 2) et \verb@purge(a);@(\verb@a@ redevient formelle)\\
entr\'ee expression& \verb@input("a=",a);@ \\
entr\'ee chaine& \verb@textinput("a=",a);@ \\
sortie& \verb@print("a=",a);@\\
valeur retourn\'ee& \verb@return(a);@\\
arr\^et de la boucle& \verb@break;@\\
alternative& \verb@if (<condition>) {<inst>};@ \\
           & \verb@if (<condition>) {<inst1>} else {<inst2>};@ \\
boucle pour& \verb@for (j:= a;j<=b;j++) {<inst>};@\\
           & \verb@for (j:= a;j<=b;j:=j+p) {<inst>};@\\
boucle r\'ep\'eter& \verb@repeat <inst> until <condition>;@\\
boucle tantque& \verb@while (<condition>) {<inst>};@\\
boucle faire&\verb@do <inst1> if (<condition>) break; <inst2> od;@\\
\hline
debug&lance le debugueur pour une ex\'ecution au pas \`a pas de l'argument\\
\hline 
\hline
\multicolumn{2}{|c|}{\bf Signification des signes de ponctuation}\\
\hline\hline
\verb|.|& s\'epare la partie enti\`ere de la partie d\'ecimale\\
\verb|,|& s\'epare les \'el\'ements d'une liste ou d'une s\'equence \\
\verb|;|& termine chaque instruction d'un programme \\
\verb|:;|&  termine les instructions lorsqu'on ne veut pas l'affichage de la r\'eponse\\
\verb|!|& $n!$ est la factorielle de $n\in \N$ et $!(b)$ est l'inverse logique du bool\'een $b$\\
%\verb|=|& permet de d\'efinir une \'equation\\
%\verb|!|& n! est la factorielle de n\\
\hline
\end{tabular}
%\end{center}
%\section{Les op\'erateurs}
%\vskip 1mm
%\begin{center}
\begin{tabular}{|ll|ll|}
\hline
\multicolumn{4}{|c|}{\bf Op\'erateurs}\\
\hline\hline
\verb@+@& addition&\verb@-@& soustraction \\
\verb@*@& mutiplication& \verb@/@& division\\
\verb@^ @& puissance& \verb@a mod p@& a modulo p\\
\verb@==@& teste l'\'egalit\'e&
\verb@!=@& teste la diff\'erence \\
\verb@<@& teste la stricte inf\'eriorit\'e &
\verb@<=@& teste l'inf\'eriorit\'e ou l'\'egalit\'e\\
\verb@>@& teste la stricte sup\'eriorit\'e &
\verb@>=@&  teste la sup\'eriorit\'e ou l'\'egalit\'e\\
\verb@||, ou@& op\'erateur bool\'een infix\'e ou&
\verb@&&, et@& op\'erateur bool\'een infix\'e et\\
\verb@non@& inverse logique de l'argument &
\verb@!(..)@& inverse logique de l'argument\\
\verb@vrai@& est le bool\'een vrai ou true ou 1&
\verb@faux@& est le bool\'een faux ou false ou 0\\
\hline
\verb|=|& permet de d\'efinir une \'equation&
\verb|:=|& affectation ($a:=2$)\\
\hline
\end{tabular}
\end{center}
\section{Exemples d'utilisation}
\subsection{Programmer un jeu}
On consid\`ere le jeu suivant :
\begin{itemize}
\item Le joueur tire au hasard un nombre entre 1 et 10. Ce nombre est son gain,
il peut le garder et la partie est finie.
\item Le joueur peut choisir d'abandonner ce gain et de recommencer. Il lui est
permis de tirer ainsi au plus 5 fois et son gain est le r\'esultat du dernier 
tirage lorsqu'il a abandonn\'e les gains des 4 tirages pr\'ec\'edents.
\end{itemize}
\begin{enumerate}
\item \'Ecrire un programme qui r\'ealise ce jeu, 
\item Le joueur choisit 4 nombres $n_1,n_2,n_3,n_4$ compris entre 1 et 10 et  
choisit comme strat\'egie de garder son gain du $j$i\`eme essai si celui-ci est
sup\'erieur ou \'egal \`a $n_j$ sinon il recommence (si $n_1$=9, $n_2$=8, $n_3$=6, $n_4$=5 avec le tirage 2,7,8, le gain est 8 mais avec le tirage 8,7,5,4,2 le gain est 2).\\
Il joue 100 parties selon cette strat\'egie avec les m\^emes $n_j$.
\'Ecrire un programme donnant la moyenne des gains obtenus. A vous de jouer !.
\end{enumerate}
\begin{verbatim}
jeu1():={
 //repondre o pour dire oui
 local j,g,rep;
 pour j de 1 jusque 4 faire
   g:=alea(10)+1;afficher(g);
   lis_phrase(rep);
   si rep=="o" alors retourne g; fsi;
 fpour;
 retourne alea(10)+1;
}:;
\end{verbatim}
{\tt jeu2} a comme param\`etre  {\tt L} qui est la s\'equence $n_1,n_2,n_3,n_4$
puis $LL$ est la suite $n_1,n_2,n_3,n_4,0$ de fa\c{c}on \`a ce que $LL[j]$ 
soit d\'efinie pour $j=0..4$ ($LL[0]=n_1$).\\
{\tt jeu102} est la moyenne des gains de 100 parties faites avec {\tt jeu2}.
\begin{verbatim}
jeu2(L):={
 local j,g,LL;
 LL:=append(L,0);
 pour j de 0 jusque 4 faire
   g:=alea(10)+1;afficher(g);
   si g>=LL[j] alors break fsi;
 fpour;
 retourne g;
}:;
jeu102(L):={
 local g,j;
 g:=0;
 pour j de 1 jusque 100 faire
   g:=g+jeu2(L);
 fpour;
 retourne evalf(g/100);
}:;
\end{verbatim}
\subsection{Des triangles \'equilat\'eraux emboi\'es}
\`A partir d'un triangle \'equilat\'eral direct $ABC$ on construit les points 
$A_1,B_1,C_1$ v\'erifiant :
$\displaystyle \overrightarrow{AA_1}=\frac{4}{3}\overrightarrow{AB}$, 
$\displaystyle \overrightarrow{BB_1}=\frac{4}{3}\overrightarrow{BC}$,
$\displaystyle \overrightarrow{CC_1}=\frac{4}{3}\overrightarrow{CA}$.
Interpr\'eter $A_1$ comme le barycentre de $(A,a)$ et $(B,b)$ et
montrer que le triangle $A_1B_1C_1$ est \'equilat\'eral.\\
On recommence la m\^eme construction \`a partir de $A_1B_1C_1$.
\'Ecrire la proc\'edure r\'ecursive qui r\'ealise le dessin des $n$ triangles
obtenus par cette construction.\\
% (en tout $n+1$ triangles $ABC$ + les autres).\\
On a :
$\displaystyle \overrightarrow{AA_1}=\frac{4}{3}\overrightarrow{AB}-\frac{1}{3}\overrightarrow{AA}$.
Donc $A_1$ est le barycentre de $(A,-1)$ et $(B,4)$. \\
$B_1$ est le barycentre de $(B,-1)$ et $(C,4)$. $C_1$ est le barycentre de $(C,-1)$ et $(A,4)$.\\
La rotation $r$ de centre $O$, le centre de $ABC$, et d'angle 
$\displaystyle \frac{2\pi}{3}$ 
transforme $A$ en $B$, $B$ en $C$ et $C$ en $A$ donc $r$ transforme le 
barycentre de $(A,-1)$ et $(B,4)$ en le barycentre de $(B,-1)$ et $(C,4)$ c'est \`a dire transforme $A_1$ en $B_1$ et  $r$ transforme le 
barycentre de $(B,-1)$ et $(C,4)$ en le barycentre de $(C,-1)$ et $(A,4)$ i.e. transforme $B_1$ en $C_1$.
Donc le triangle $A_1B_1C_1$ est \'equilat\'eral.\\
\ \\
\begin{minipage}[h]{8cm}
On tape dans l'\'editeur de programmes :
\begin{verbatim}
triangles(A,B,n):={
  local L,C;
  L:=triangle_equilateral(A,B,C);
  si n>0 alors 
    A:=barycentre([A,B],[-1,4]);
    B:=barycentre([B,C],[-1,4]);
    L:=L,triangles(A,B,n-1);
  fsi;
  return L;
}:;
\end{verbatim}
\end{minipage}
%\hspace{0.1cm} 
\begin{minipage}[h]{5cm}
On compile ($F9$). Dans une\\ 
ligne de commandes,
on tape  :\\
{\tt triangles(0,1,5)}\\
On obtient :\\

\includegraphics[width=4.5cm]{triangles1}
\end{minipage}
\subsection{Les nombres amiables}
\'Ecrire un programme qui pour un entier $n$, donne la suite des couples 
amiables $(a,b)$ ($a\leq b\leq n$).
Deux nombres $a$ et $b$ sont {\bf amiables}, si l'un est \'egal \`a la 
somme des diviseurs propres de l'autre (sauf lui-m\^eme) et inversement.

On utilise l'instruction {\tt idivis(a)} qui renvoie la liste des diviseurs 
de l'entier {\tt a} et l'instruction {\tt sum(L)} qui renvoie la somme de la
liste {\tt L}. On tape :
\begin{verbatim}
amiable(n):={
  local j,a,b,L:=NULL;
  pour j de 2 jusque n faire
    a:=sum(idivis(j))-j;
    b:=sum(idivis(a))-a;
    si b==j et j<=a alors L:=L,[j,a]; fsi;
  fpour;
  retourne L;
}:;
\end{verbatim}
{\tt amiable(500)} renvoie {\tt [6,6],[28,28],[220,284],[496,496]}\\
Les nombres parfaits $a$ sont les nombres amiables $(a,a)$.
\newpage
\part{Fiche {\tt Xcas}  la tortue}
%\vskip 2mm
\begin{center}
\begin{tabular}{|ll|}
\hline
\multicolumn{2}{|c|}{\bf D\'eplacements}\\
\hline\hline
\verb@efface@& pour effacer\\
\verb@avance@& pour avancer\\
\verb@recule@& pour reculer\\
\verb@saute@& pour avancer ou reculer sans tracer\\
\verb@pas_de_cote@& pour faire des pas de cot\'e \`a gauche sans tracer\\  
\verb@@&(ou \`a droite si l'argument est <0)\\
\verb@tourne_gauche@& pour tourner \`a gauche\\
\verb@tourne_droite@& pour tourner \`a droite\\
\hline
\hline
\multicolumn{2}{|c|}{\bf Les couleurs et la tortue}\\
\hline\hline
\verb@crayon@& pour connaitre ou changer la couleur du crayon\\
\verb@cache_tortue@& cache la tortue\\
\verb@montre_tortue@& montre la tortue\\
\verb@dessine_tortue(n)@& dessine la tortue en forme pleine (n=0) ou non (n=1)\\
\hline
\hline
\multicolumn{2}{|c|}{\bf Les formes}\\
\hline\hline
\verb@rond@&dessine un cercle ou un arc de cercle\\
\verb@triangle_plein@&dessine un triangle plein\\
\verb@rectangle_plein@&dessine un carr\'e, un rectangle, un losange ou un \\
\verb@@&un parall\'elogramme plein\\
\verb@disque@& dessine disque ou  secteur circulaire tangent \`a la tortue\\
\verb@disque_centre@& dessine disque ou secteur circulaire de centre la tortue\\
\verb@polygone_rempli @& remplit le polyg\^one dessin\'e juste avant\\
\hline
\end{tabular}
\end{center}
%\vskip 2mm
%\vskip 2mm
\begin{center}
\begin{tabular}{|ll|}
\hline
\multicolumn{2}{|c|}{\bf Les l\'egendes}\\
\hline\hline
\verb@ecris@& pour \'ecrire l\`a o\`u se trouve la tortue ou en un point\\
\verb@signe@& pour signer, en bas \`a gauche, son dessin\\
\hline
\hline
\multicolumn{2}{|c|}{\bf La programmation et la tortue}\\
\hline\hline
\verb@si @ $c$ \verb@ alors @ $inst$ \verb@ fsi@& fait l'instruction $inst$ si la condition $c$ est vraie\\
\verb@si @ $c$ \verb@ alors @ $inst1$ & fait l'instruction $inst1$ si la condition $c$ est vraie\\
 \verb@    sinon @ $inst2$ \verb@ fsi@& ou fait l'instruction $inst2$  si $c$ est fausse\\
\verb@repete@ $n,inst1,inst2$& rep\`ete $n$ fois les instructions $inst1,inst2$\\ 
\verb@pour@ $j$ \verb@de@ $a$ \verb@jusque@ $b$& fait l'instruction $inst$ en it\'erant la variable $j$ de $a$\\ 
\verb@   faire@ $inst$ \verb@fpour@& \`a $b$ avec un pas \'egal \`a 1\\ 
\verb@pour@ $j$ \verb@de@ $a$ \verb@jusque@ $b$ \verb@pas@& fait l'instruction $inst$ en it\'erant la variable $j$ de $a$\\
\verb@   @$p$ \verb@faire@ $inst$ \verb@fpour@& \`a $b$ avec un pas \'egal \`a $p$\\ 
\verb@tantque@ $c$ \verb@faire@ $inst$& fait l'instruction $inst$ tant que la condition $c$ est \\ 
\verb@   ftantque@&vraie\\ 
\verb@retourne@ $obj$& d\'efinit la valeur de la fonction par la valeur de $obj$\\ 
\verb@lis@$(a)$& met dans $a$, une expression lue au clavier\\ 
\verb@lis_phrase@$(a)$& met dans $a$, une phrase lue au clavier\\ 
\verb@sauve@$("toto",f,g)$& sauve dans le fichier  $toto$ les fonctions $f,g$\\ 
\verb@ramene@$("toto")$& ram\`ene les fonctions du fichier $toto$\\
\hline
\end{tabular}
\end{center}
\begin{center}
\begin{tabular}{|ll|}
\hline
\multicolumn{2}{|c|}{\bf Positionnement et Autres}\\
\hline\hline
\verb@position@& pour avoir la position de la tortue ou pour changer sa 
position\\
\verb@cap@& pour avoir le cap de la tortue ou pour changer son cap\\
\verb@vers@& pour diriger la tortue selon un point\\
\verb@hasard n@& est un entier al\'eatoire ente 0 et {\tt n-1}\\
\hline
\end{tabular}
\end{center}
Il ne peut y avoir qu'un seul \'ecran de dessin tortue par session.\\
Pour piloter la tortue, on met des commandes \`a gauche du dessin : soit on les
tape en toutes lettres, soit
on  les s\'electionne dans le menu {\tt Tortue}, soit on clique sur leurs
abr\'eviations situ\'ees sur la barre des boutons (le
bouton {\tt cr} affiche en plus la palette des 256 couleurs du crayon), soit
 on r\'eutilise une commande d\'ej\`a tap\'ee. 
\`A droite de l'\'ecran se trouve l'enregistreur qui enregistre toutes les 
commandes utilis\'ees : en cas d'erreur, il est facile de le modifier,
puis d'ex\'ecuter toutes les commandes depuis le d\'ebut en appuyant sur 
{\tt F7}.
\begin{center}\includegraphics[width=8cm]{tortuefrise}\end{center}
Cette frise est la r\'ep\'etition d'un m\^eme motif, isol\'e ci-dessus, avec 
les positions de d\'epart et d'arriv\'ee de la tortue. On r\'ealise d'abord le 
dessin du motif : on ouvre un niveau de dessin tortue ({\tt Alt+d}) et on met
dans les lignes de commandes :\\
\verb|crayon 1;|\\
\verb|rectangle_plein ;|\\
\verb|saute ;|\\
\verb|tourne_droite ;|\\
\verb|crayon 4;|\\
\verb|rectangle_plein ;|\\
\verb|tourne_gauche ;|\\
\verb|saute ;|\\
Pour cela on appuie successivement sur les boutons {\tt cr, rp, sa, td,...}\\
Ces commandes se mettent automatiquement \`a droite dans l'enregistreur (une 
erreur se corrige directement dans l'enregistreur et on r\'eex\'ecute 
celui-ci avec {\tt F7}).\\
On ouvre un \'editeur de programme ({\tt Alt+p}) et d'un coup de souris on 
recopie les commandes de l'enregistreur dans l'\'editeur. 
On remplace alors \verb|efface;| par \verb|motif():={|. Puis, on rajoute \verb|}:;| et on appuie sur {\tt F9}.\\
On tape ensuite \`a gauche, dans les lignes de commandes :
{\tt repete 10,motif()}\\
Vous pouvez zoomer le dessin, en avant ou en arri\`ere, avec la molette de la 
souris et d\'eplacer la fen\^etre visible en la translatant avec la souris.\\
Cet exemple vous montre comment on r\'ealise un dessin complexe en le 
d\'ecomposant et aussi comment on utilise l'enregistreur pour \'ecrire 
facilement une proc\'edure \`a partir d'un dessin ex\'ecut\'e en pas \`a pas.
\section{Exercices}
\subsection{La toile d'araign\'ee et la trigonom\'etrie}
La proc\'edure {\tt polyg(l,k)} trace un polygone r\'egulier direct de {\tt k} 
c\^ot\'es de longueur {\tt l}. La tortue part d'un sommet et est 
dirig\'ee vers un sommet et revient  \`a son point de d\'epart.
On tape dans l'\'editeur de programme :
\begin{verbatim}
polyg(l,k):={
repete(k,avance l,tourne_gauche 360/k);
}:;
\end{verbatim}
La proc\'edure {\tt araignee(k,p,n)} trace  
{\tt n} polygones emboit\'es, r\'eguliers, directs et de {\tt k} 
c\^ot\'es o\`u le plus petit polygone $P$ a des c\^ot\'es de longueur {\tt p}. 
La distance du centre de $P$ a un de ces sommets donne l'espacement entre les 
diff\'erents polygones. La tortue part du centre et est 
dirig\'ee vers un sommet et revient \`a son point de d\'epart.
On tape dans l'\'editeur de programme :
\begin{verbatim}
araignee(k,p,n):={
local r,j;
r:=(p/2)/sin(pi/k);
repete(k,avance n*r,recule n*r,tourne_gauche 360/k);
pour j de 1 jusque n faire 
  saute r;
  tourne_gauche 90+180/k;
  crayon rouge;
  polyg(j*p,k);
  tourne_droite 90+180/k;
fpour;
saute -n*r;
}:;
\end{verbatim}
Puis, on tape dans un niveau dessin tortue:
\begin{verbatim}
efface ;
crayon jaune;
dessine_tortue;
crayon noir;
araignee(9,10,8);
\end{verbatim}
On obtient :
\begin{center}\includegraphics[width={7cm}]{tortaraigne}\end{center}

\subsection{Les carr\'es magiques}
Le d\'epart de cette activit\'e est un tableau de Richard Paul Lohse
vu au mus\'ee de Grenoble.
En voici une reproduction faite avec la tortue : les couleurs ne sont pas 
respect\'ees...Ici, les couleurs ont comme code
{\tt [0,52,43,49,40,46]}.
\begin{center}\includegraphics[width={7cm}]{lohseg}\end{center}
On remarque que la permutation {\tt p:=[3,4,5,1,2,0]}  effectue le 
passage des couleurs d'une ligne \`a la suivante (traduit par
{\tt coul:=passage(coul,p);} ou par {\tt coul:=coul[p[j]]\$(j=0..5);}).
On tape dans l'\'editeur de programmes :
\begin{verbatim}
ligne(coul):={
 local j;
 pour j de 0 jusque 5 faire
  crayon coul[j];rectangle_plein(30);saute(30);
 fpour
 saute -180;
}:;
passage(l,p):={
 local n,j,lp;
 n:=size(l);lp:=l;
 pour j de 0 jusque n-1 faire
  lp[j]:=l[p[j]];
 fpour
 retourne lp;
}:;
lohse():={
 local j,p,coul;
 coul:=[0,52,43,49,40,46];//[180,168,3,136,93,78];
 pour j de 0 jusque 5 faire
  ligne(coul);p:=[3,4,5,1,2,0];
  coul:=passage(coul,p);pas_de_cote -30;
 fpour;
 pas_de_cote 180; cache_tortue;
}:;
\end{verbatim}
On tape dans un niveau de dessin tortue 
{\tt lohse()} et on  obtient le dessin ci-dessus.
\end{document}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\subsection{Mensualit\'es d'un emprunt}
% Pourquoi fsolve et pourquoi en programmation?
On veut emprunter $S=10 000$ euros sur 5 ans (respectivement 60 mois) 
\`a un taux annuel de 4\% (respectivement \`a un mensuel de 0.33 \%) . 
On rembourse chaque ann\'ee (resp chaque mois) un m\^eme montant. Quel est ce 
montant~?\\
Sur 5 ans, on fait 5 remboursements annuels \'egaux \`a $r$.\\
Au bout de 1 an, la somme $S$ devient :\\
$S*(1+4/100)-r$,\\
Au bout de 2 ans, la somme $S$ devient :\\
$(S*(1+4/100)-r)*(1+4/100)-r=S*(1+4/100)^2-r*(1+4/100)-r$ ,\\
Au bout de 3 ans, la somme $S$ devient :\\
$(S(1+4/100)^2-r(1+4/100)-r)(1+4/100)-r=$\\
$S(1+4/100)^3-r(1+4/100)^2-r(1+4/100)-r$\\
Au bout de 5 ans, la somme $S$ devient :\\
$S(1+4/100)^5-r((1+4/100)^4+(1+4/100)^3+(1+4/100)^2+(1+4/100)+1)$\\
$S(1+4/100)^5-r((1+4/100)^5-1)/(4/100)$,\\
Si on veut avoir tout rembours\'e au bout de 5 ans, il faut r\'esoudre :\\
$S(1+4/100)^5-r((1+4/100)^5-1)/(4/100)=0$.\\
%Donc :$\displaystyle r=\frac{S(1+4/100)^5*4/100}{(1+4/100)^5-1)}$\\
On tape :\\
{\tt fsolve(10000*(1+4/100)\verb|^|5-r*((1+4/100)\verb|^|5-1)/(4/100),r)}\\
On obtient  le montant du rembourement annuel {\tt [2246.27113493]}\\
%On aura rembours\'e en tout :  {\tt 2246.27*5=11231.35} euros.\\
Plus g\'en\'eralement, si $t$ est le taux (ici $t=4/100$ (resp 0.33/100)) et 
$N$ le nombre de remboursements (ici $N=5$ (resp 60)), il faut r\'esoudre :\\
$S*(1+t)^N-r*((1+t)^N-1)/t=0$ donc :
$\displaystyle r=\frac{S*t*(1+t)^N}{(1+t)^N-1)}$.\\
On d\'efinit la fonction $R$ de param\`etres $S,t,N$, on tape :\\
{\tt R(S,t,N):=S*t*(1+t)\verb|^|N/((1+t)\verb|^|N-1)}\\
{\tt evalf(R(10000,0.33/100,60),2)}\\
On obtient  le montant du rembourement mensuel {\tt 183.98}.
%Soit un  total de {\tt 2246.27*5=11231.35}$\in$ ou de {\tt 183.98*60=11038.80}$\in$.
\subsection{Illustration d'un po\'eme}
\subsubsection{Le po\'eme}
Il s'agit du po\'eme Le chat et le soleil de Maurice Car\^eme.\\ 
On tape dans l'\'editeur de programmes :
\begin{verbatim}
chat():={
crayon noir;disque(60);
pas_de_cote 20;crayon jaune;tourne_gauche 20;
repete(3,avance 40,recule 80,avance 40,tourne_droite 20); 
tourne_gauche 40;pas_de_cote 20;
crayon magenta;disque;crayon noir;
pas_de_cote 20;saute -60;
triangle_plein(60,60);saute 120;
tourne_gauche;triangle_plein(60,60);
pas_de_cote 20;crayon jaune;saute 20;
disque;pas_de_cote 60;disque;
crayon noir;pas_de_cote -20;
saute -80;tourne_droite;
}:;
soleil:={
crayon jaune;disque 30;pas_de_cote 30;
repete(12,avance 60,recule 60,tourne_droite 30);
pas_de_cote -30;
}:;
poesie(a,b):={
ecris("Le chat et le soleil",20,a+15,b);
ecris("Le chat ouvrit les yeux,",20,10,b-20);
ecris("Le soleil y entra.",20,10,b-40);
ecris("Le chat ferma les yeux,",20,10,b-60);
ecris("Le soleil y resta.",20,10,b-80);
ecris("Voilà pourquoi, le soir,",20,a,b-120);
ecris("Quand le chat se réveille,",20,a,b-140);
ecris("J'aperçois dans le noir",20,a,b-160);
ecris("Deux morceaux de soleil.",20,a,b-180);
ecris("Maurice Carême",20,a+15,b-200);
}:;
dessin_poesie():={
efface;cache_tortue;
chat();saute 200;
crayon jaune;soleil();
crayon 113;poesie(10,80);
};
\end{verbatim}
On tape {\tt dessin\_poesie()} et on obtient :\\
\includegraphics[width=\textwidth]{chat}



\end{document}
\section{La num\'eration}
L'\'ecriture d'un nombre dans une base sera donn\'ee par la liste de ses 
coefficients en commencant par le coefficient des unit\'es.\\
La commande {\tt convert} permet d'\'ecrire les nombres entiers dans 
diff\'erentes bases et de convertir un nombre \'ecrit dans une base en un nombre entier.\\
{\bf Attention}\\
{\tt convert(p,base,b)} renvoie la liste des chiffres de l'\'ecriture en base 
{\tt b} de {\tt p} en commencant par le chiffre des unit\'es.\\
Par exemple pour convertir 123 en base 8 et en base 16, on tape :\\
{\tt convert(123,base,8)} et on obtient {\tt [3,7,1]}\\
{\tt convert(123,base,16)} et on obtient {\tt [11,7]}\\
En effet $3+7*8+1*8^2=123$ et $7*16+11=123$.\\
Pour avoir l'ordre habituel des chiffres on tape :\\
{\tt revlist(convert(123,base,8))} et on obtient {\tt [1,7,3]} et \\
{\tt revlist(convert(123,base,16))} et on obtient {\tt [7,11]}.
Pour \'ecrire en base 10, le nombre  qui s'\'ecrit 173 en base 8, on tape :\\
{\tt convert(revlist([1,7,3]),base,8)} renvoie {\tt 123}\\
Pour avoir la liste des chiffres d'un nombre \'ecrit en base 10, on tape :\\
{\tt convert(123,base,10)} et on obtient {\tt [3,2,1]}\\
Pour avoir l'entier \'ecrit en base 10 qui correspond \`a la liste de ses 
chiffres, on tape :\\
{\tt convert(revlist([1,2,3]),base,10)} et on obtient {\tt 123}\\
Pour passer de l'\'ecriture d'une base \`a une autre il faut utiliser 2 fois
{\tt convert}.
Par exemple, pour convertir en base 8, le nombre represent\'e par la liste 
[11,7] de ses coefficients en base 16 en commencant par le coefficient des 
unit\'es, on tape :\\
{\tt convert(convert([11,7],base,16),base,8)} et on obtient {\tt [3,7,1]}\\
qui est la liste des coefficients en base 8 en commencant par le coefficient 
des unit\'es. 
\section{Exemples d'utilisation}
\begin{itemize}
\item Soient $n$ points sur un cercle : $A_1...A_n$ et $p$ un entier 
strictement inf\'erieur \`a $n$ et $p\neq 2n$. On joint les points 
$A_1,A_{1+p},A_{1+2p}...$ 
jusqu'\`a ce que l'on retouve $A_1$. Quel est le nombre de c\^ot\'es du 
polygone ainsi obtenu ?\\
Application Num\'erique:\\
$n=10$, $p=2,3,4$ et $n=11$ , $p=2,3,4$\\
Pour retrouver le point $A_1$, si $k$ est le nombre de c\^ot\'es du 
polygone obtenu, il faut que :\\
$1+k*p=1 \bmod n$ c'est \`a dire $k$ est le plus petit nombre entier tel que 
$k*p$ soit un multiple de $n$.\\
Donc si $p$ et $n$ sont premiers entre eux $k=n$ et si
$gcd(p,n)=q$, $k=n/q$
Application Num\'erique:
Si $n$=10 et $p$=2, on trouve $k$=5\\
Si $n$=10 et $p$=3, on trouve $k$=10\\
Si $n$=10 et $p$=4, on trouve $k$=5\\
Si $n$=11 et quelque soit $p$, on trouve $k$=11\\
On tape par exemple :\\
{\tt n:=10;p:=3}\\
{\tt seq(segment(exp(2*i*j*pi/n),exp(2*i*(j+p)*pi/n)),j=0..p*n,p)}\\
On obtient :\\
\includegraphics[width=\textwidth]{poletoile}
\item Nombre de diviseurs de 240.\\
On tape :\\
{\tt ifactor(240)}\\
On obtient :
{\tt 2\verb|^|4*3*5}\\
donc le nombre de diviseurs est $(4+1)*(1+1)*(1+1)=20$\\
On tape :\\
{\tt dim(idivis(240))}\\
On obtient :
{\tt 20}
\item Quel est le plus petit nombre que admet 18 diviseurs ?\\
On tape :\\
{\tt ifactor(18)}\\
On obtient :
{\tt 2*3\verb|^|2}\\
On a  18=9*2=6*3=3*3*2\\
Les nombres admettant 18 diviseurs seront donc :\\
si il a un seul facteur premier $p$ : $p^{17}$\\
si il a 2 facteurs premiers $p$ et $q$ : $p^8*q$ ou $p^5*q^2$\\
si il a 2 facteurs premiers $p$, $q$ et $r$ : $p^2*q^2*r$\\
On cherche le plus petit des ces nombres, on obtient :\\
$2^2*3^2*5=180$\\
On tape :\\
{\tt dim(idivis(180))}\\
On obtient :
{\tt 18}
\item Exposant de 17 dans la d\'ecomposition en facteurs premiers de 500!\\
On tape :\\
{\tt iquo(500,17)}\\
On obtient :
{\tt 29}\\
On tape :\\
{\tt iquo(500,17\verb|^|2)}\\
On obtient :
{\tt 1}\\
Comme $500\leq 17^3$, dans la d\'ecomposition en facteurs premiers de 500!,
l'exposant de 17 est 29+1=30.\\
On peut v\'erifier en tapant :\\
{\tt ifactor(500!)}
\item R\'esoudre $13x-8y=1$ avec  $(x,y)\in\N^2$. \\
On cherche une solution particuli\`ere et pour cela on cherche $x$ pour que
$13x-1$ soit divisible par 8 ou que $5x-1$ soit divisible par 8, comme $x$ doit \^etre impair on trouve facilement $x=5$ et on a $13*5-1=64=8*8$\\
Puis comme $(8k)*13+(13k)*(-8)=0$\\
les solutions sont $5+8k,8+13k$ avec $k\in \N$.\\
On tape :\\
{\tt iegcd(13,-8)}\\
On obtient :\\
{\tt [-3,-5,1]}\\
comme $(8k)*13+(13k)*(-8)=0$, les solutions sont :\\
$-3+8k,-5+13k$ avec $k\in \N^*$ (on a pour $k=1$ $x=-3+8=5$ et $y=-5+13=8$).
\end{itemize}


\end{document}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%


\subsection{Un lieu}
Lieu de l'orthocentre du triangle $ABC$ quand $A$ se d\'eplace
sur une parall\`ele \`a $BC$.\\ 
Ici on cherche le lieu de l'orthocentre du triangle $MBC$ lorsque $M$
 se d\'eplace sur la parall\`ele \`a $BC$  passant par $A$.\\
Dans un niveau de g\'epm\'etrie 2d, on d\'ecoche la case $\framebox{\sim}$, on 
se met en {\tt Mode$\blacktrianleright$ point} et on clique pour obtenir trois 
points {\tt A,B,C} et on tape :
\begin{verbatim}
A:=point(1,3);
B:=point(-2,0);
C:=point(2,0);
D:=parallele(A,droite(B,C));
M:=element(D);
H:=inter(perpendiculaire(M,droite(C,B)),
          perpendiculaire(C,droite(M,B)))[0] ;
lieu(H,M);
\end{verbatim}
On obtient une parabole d'\'equation param\'etrique : \\
{\tt plotparam((4*i)/3+(-i)*((t*t)/3+(i)*t),t=-4.0..4.0)}
Cette parabole passe par $B$ et $C$ et est de sommet $S$
orthocentre du triangle isoc\`ele $PBC$ ($P$ sur la m\'ediatrice de 
$BC$ et sur la droite $D$). On peut \`a la main avoir assez facilement 
l'\'equation de cette parabole ...mais trouver ce lieu en g\'eom\'etrie pure 
est plus difficle!

\subsection{{\bf TP} sur l'indicatrice d'Euler}
{\bf Bijection entre $\Q \cap [0,1]$ et $\N$}\\
On construit une bijection $f$ entre les rationnels de [0,1] et $\N$, 
pour cela :
\begin{itemize}
\item on ordonne les rationnels de [0,1] de la fa\c{c}on suivante :
$$0,1,\frac{1}{2},\frac{1}{3},\frac{2}{3},\frac{1}{4},\frac{2}{4},\frac{3}{4},
...\frac{1}{n}\frac{2}{n}...\frac{n-1}{n},...$$
\item on supprime les fractions non irr\'eductibles et on obtient une suite 
$L$.
\end{itemize}
La fonction $f$ attribue \`a un rationnel de [0,1] son rang dans la 
suite $L$, on a : 
$f(0)=0,\ f(1)=1,\ f(\frac{1}{2})=f(\frac{2}{4})=2,\ f(\frac{1}{3})=3...$,
$\ f(\frac{3}{4})=6,...$, $ \ f(\frac{1}{5})=7....$
\begin{enumerate}
\item D\'eterminer le nombre d'\'el\'ements de $L$ qui a comme d\'enominateur
$23$ (resp $24$, $25$...$30$), \`a l'aide de l'indicatrice d'Euler,
\item D\'eterminer $f(\frac{1}{7})$ puis $f(\frac{1}{30})$, $f(\frac{13}{30})$
et $f(\frac{29}{30})$,
\item \'Ecrire un programme qui pour $n>0$ trace les points 
de coordonn\'ees $\frac{a}{b},f(\frac{a}{b})$ avec $b \leq n$. Afficher
les points de coordonn\'ees $\frac{a}{b},f(\frac{a}{b})$ avec $b<=32$
\end{enumerate}
\begin{enumerate}
\item Le nombre d'\'el\'ements de $L$ qui a comme d\'enominateur $23$ est $22$ (
c'est {\tt euler(23)}).\\ 
On tape :
{\tt euler([23,24,25,26,27,28,29,30])}\\
On obtient :
{\tt [22,8,20,12,18,12,28,8]}\\
On a :
$f(\frac{1}{5})$ est {\tt euler(1)+euler(2)+...+euler(4)+1}\\
%On v\'erifie : $f(\frac{1}{5})=7$ et 
{\tt sum(euler(n),n,1,4)+1}= 7.\\
On tape :
{\tt sum(euler(n),n,1,6)+1}\\
On obtient $f(\frac{1}{7})$ :
{\tt 13}\\
On tape :
{\tt sum(euler(n),n,1,29)+1}\\
On obtient $f(\frac{1}{30})$:
{\tt 271}\\
Pour avoir $f(\frac{13}{30})$, il faut 
avoir le cardinal des entiers $p>1$ qui sont premiers avec 30 et inf\'erieurs 
ou \'egaux \`a 13. Les nombres premiers inf\'erieurs ou 
\'egaux \`a 13 sont $2,3,5,7,11,13$ et {\tt ifactor(30)=2*3*5}.\\
Donc $f(\frac{13}{30})=f(\frac{1}{30})+3=274$.\\
Puisque $\frac{29}{30}$ est le plus grand \'el\'ement de d\'enominateur 30, 
pour avoir $f(\frac{29}{30})$, on tape :
{\tt sum(euler(n),n,1,30)}\\
On obtient $f(\frac{29}{30})$ :
{\tt 278}
\item Pour tracer les points 
de coordonn\'ees $\frac{a}{b},f(\frac{a}{b})$, on calcule la valeur de 
$f(\frac{a}{b})$ au fur et \`a 
mesure et on la met  dans la variable {\tt  valf} : \`a chaque \'etape 
{\tt valf} augmente de {\tt  1}.
\begin{verbatim}
  tracef(n):={
    local L,a,b,valf;
    L:=point(0),point(1);
    valf:=1;
    for (b:=2;b<=n;b:=b+1){
      for (a:=1;a<b;a:=a+1){
        if (gcd(a,b)==1) {
          valf:=valf+1;
          L:=L,point(evalf(a/b)+i*valf);
        }
      }
    }
    return affichage(L,rouge+point_point+
                       epaisseur_point_2);
  }:;
\end{verbatim}
On tape :
{\tt tracef(40)} et on obtient :\\
\framebox{\includegraphics[width=\textwidth]{trace40}}
\end{enumerate}
\begin{center}
\begin{tabular}{|ll|}
\hline
\multicolumn{2}{|c|}{\bf S\'equences et listes ou vecteurs}\\
\hline\hline
\verb@S:=a,b,c@& S est une s\'equence de 3 \'elements\\
\verb@S:=[a,b,c]@& S est une liste de 3 \'elements\\
\verb@op([a,b,c])@&renvoie la s\'equence \verb@(a,b,c)@\\
\verb@S:=NULL@& S est une s\'equence de 0 \'element\\
\verb@S:=[]@& S est une liste de 0 \'element\\
\verb@dim(S)@& renvoie le nombre d'\'el\'ements de S\\
\verb@S[0]@& renvoie le premier \'el\'ement de S\\
\verb@S[n]@& renvoie le $n+1$ uni\`eme \'el\'ement de S\\
\verb@S[dim(S)-1]@& renvoie le dernier \'el\'ement de S\\
\verb@S:=S,d@& ajoute l'\'el\'ement {\tt d} \`a la fin de la s\'equence S\\
\verb@S:=append(S,d)@& ajoute l'\'el\'ement {\tt d} \`a la fin de la liste S\\
\hline
\hline
\multicolumn{2}{|c|}{\bf Cha\^{\i}nes de caract\`eres}\\
\hline\hline
\verb@S:="abc"@& $S$ est une cha\^{\i}ne de 3 caract\`eres\\
\verb@dim(S)@& renvoie le nombre de caract\`eres de $S$\\
\verb@S[0]@& renvoie le premier caract\`ere de $S$ (par ex "a")\\
\verb@S[n]@& renvoie le $n+1$ uni\`eme caract\`ere de $S$\\
\verb@S[dim(S)-1]@& renvoie le dernier caract\`ere de $S$\\
\verb@S:=""@& S est une  cha\^{\i}ne de 0 caract\`ere\\
%\verb@S:=S+"d"@& ajoute le caract\`ere d \`a la fin de la cha\^{\i}ne $S$\\
\verb@"ab"+"def"@& concat\'ene les deux cha\^{\i}nes et renvoie "abdef"\\
\hline
\end{tabular}
\end{center}
