\documentclass[12pt,a4paper]{article}
\usepackage{multicol}
\usepackage[french]{babel}
\newfont{\mini}{cmssi10 scaled 480}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\def\euro{\mbox{\textsf{C}\kern -2.33em{\raise0.24ex\vbox{\small\it =}}}}
%%%%%%%%%%%%%%%%%%%%%%%%%%
\def\fin{\nolinebreak \raise-0.1em\hbox{$\Box$}}
\def\stackunder#1#2{\mathrel{\mathop{#2}\limits_{#1}}}
\def\dual{ ^{\rm v}}
\def\bidual{ ^{\rm vv}}
\def\primedual{ ^{\prime \rm v}}
\def\ideal{{\cal J}}
\def\LL{{\cal L}}
\def\max{{\cal M}}
\def\quot#1#2{\mbox{\raise 0.1cm\hbox{$#1$}{\big /}\raise -0.1cm\hbox{$#2$}}}
\def\danger{{\Large \bf
    $\bigtriangleup$}\kern-0.32cm\raise0.05cm\hbox{\small
    !}\kern0.32cm\lower0.05cm\hbox{}}
%%%%%%%
\newlength{\largeurtmp}
\def\rela{\settoheight{\largeurtmp}{Z}{\rm Z} \kern -0.6\largeurtmp
  \raise 0.05cm\hbox{\tiny{\it /}}\kern 0.6\largeurtmp}
\def\petitrela{\settoheight{\largeurtmp}{Z}{\rm Z} \kern -0.4\largeurtmp
  \raise 0.05cm\hbox{\tiny{\it /}}\kern 0.4\largeurtmp}
\def\petitcomplex{{
    \settoheight{\largeurtmp}{$_C$}{\rm C}\kern -\largeurtmp
    \rule{0.25pt}{1.3\largeurtmp}\kern \largeurtmp}}
\def\complex{{
    \settoheight{\largeurtmp}{Q}{\rm C}\kern -0.66\largeurtmp
    \rule{0.25pt}{0.9\largeurtmp}\kern 0.66\largeurtmp}}
\def\ratio{{
    \settoheight{\largeurtmp}{C}{\rm Q}\kern -0.75\largeurtmp
    \rule{0.25pt}{0.9\largeurtmp}\kern 0.75\largeurtmp}}
\def\petitratio{{
    \settoheight{\largeurtmp}{C}{\rm Q}\kern -0.6\largeurtmp
    \rule{0.25pt}{0.6\largeurtmp}\kern 0.6\largeurtmp}}
\newcommand{\proj}{{\rm I} \! {\rm P}}
\newcommand{\reel}{{\rm I} \! {\rm R}}
\newcommand{\Fp}{{\rm I} \! {\rm F}_p}
\newcommand{\nat}{{\rm I} \! {\rm N}}
%%%%%%%%%%%%%%%Debut de macros de fiches d'exos
%%les macros sont \exo, \qu, \quskip \squ \qusqu \qusquskip
\newcounter{exo}
\newcounter{question}
\newlength{\lng}
\newcounter{sousquestion}
\setcounter{exo}{1}
\def\exo{

  \bigskip
  \noindent{\bf Exercice
    \Roman{exo}:}\addtocounter{exo}{1}\setcounter{question}{0}\nopagebreak 

  }
\def\exotitre#1{

  \bigskip
  \noindent{\bf Exercice
    \Roman{exo}: #1}\addtocounter{exo}{1}\setcounter{question}{0}\nopagebreak 

  }
\def\qu{

  \addtocounter{question}{1}\arabic{question})
  \setcounter{sousquestion}{1} }
\def\quskip{

  \bigskip
  \qu}
\def\squ{

  \settowidth{\lng}{\arabic{question})
  }\hspace{\the\lng}\alph{sousquestion}) \addtocounter{sousquestion}{1}} 
\def\qusqu{\qu\nopagebreak \vskip -1\baselineskip \squ}
\def\qusquskip{\quskip\nopagebreak \vskip -1\baselineskip \squ}

%%reference pour exos,squ {\`a} placer avant la question, qu est a placer apres
\def\labelexo#1{\expandafter\edef\csname refexo#1\endcsname {\Roman{exo}}}
\def\refexo#1{\csname refexo#1\endcsname}
\def\labelqu#1{\expandafter\edef\csname refqu#1\endcsname {\arabic{question})}}
\def\refqu#1{\csname refqu#1\endcsname}
\def\labelsqu#1{\expandafter\edef\csname refsqu#1\endcsname
  {\arabic{question}\alph{sousquestion})}} 
\def\refsqu#1{\csname refsqu#1\endcsname}  

%%%%%%%%%%fin de macros fiche d'exos
%%macros taille page
\newlength{\elargir}
\setlength{\elargir}{2.5cm}
\addtolength{\leftmargin}{-\elargir}
%%\addtolength{\hoffset}{-\elargir}
\addtolength{\oddsidemargin}{-\elargir}
\addtolength{\evensidemargin}{-\elargir}
\addtolength{\elargir}{\elargir}
\addtolength{\textwidth}{\elargir}
\addtolength{\textheight}{13\baselineskip}
\topmargin=-5\baselineskip
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%        
\everymath={\displaystyle}
\begin{document}
\noindent{\bf Universit{\'e} de Paris 7 \hfill \framebox{\Large \bf
    \hspace{ 1cm} TP00 D{\'e}couverte xcas\hspace{1cm}}\hfill   agreg 2008 (F.Han\footnote{http://www.math.jussieu.fr/$\sim$han/agreg})}\\
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\def\code#1{{\tt #1}}
%% 
\columnsep 0.7cm
\begin{multicols}{2}
% restart;maple_mode(1);cas_setup(0,0,0,1,0,1e-10,25,[1,50,0,25],0,0,0);#radians,pas de cmplx, pas de  Sqrt
  
Minimum {\`a} retenir/ r{\'e}viser avant l'{\'e}preuve, et donc {\`a} archiver cette
  annn{\'e}e:  
  1) Etre habitu{\'e}  {\`a} utiliser l'aide.
  
  2) op{\'e}rations classiques en mode exact, approch{\'e}, alg{\`e}bre lin{\'e}aire, calcul
modulaire et polynomial. Notamment, pgcd, couples de Bezout, produit
de matrices, noyau (y compris pour un {\'e}l{\'e}ment de $M_n(\rela/p\rela)$, 

3) Quelques instructions de programmation:
boucles \code{for}, \code{while} , suite: \code{seq}. Cr{\'e}er une fonction
une proc{\'e}dure, cr{\'e}er une fonction {\`a} partir d'un symbole, passer en
mode debug et afficher une variable pas {\`a} pas.

4) Quelques instructions graphique: fonctions (param{\'e}triques,
implicites, statistiques; ex histogrammes) et g{\'e}om{\'e}trie (points, droites...)

\medskip
\noindent{\bf I Choisir sa configuration}

\danger Le jour de l'{\'e}preuve les valeurs par d{\'e}faut ne co{\"\i}ncidenront
pas forc{\'e}ment avec vos pr{\'e}f{\'e}rences. Au premier lancement on r{\'e}pond {\`a}
quelques questions, on peut ensuite modifier/affiner ses choix dans le
menu \code{Cfg}. Puis Sauver les gr{\^a}ce au  menu. Il faut donc choisir
le mode xcas ou maple, et etudier la configuration du "cas" pour ne
pas mal interpr{\'e}ter les r{\'e}ponses.

Les diff{\'e}rences entre les modes xcas et maple:
$i$ et $I$, les tableaux commencent {\`a} $0$ contre $1$ le symbole \%
est r{\'e}serv{\'e} au calcul modulaire pour xcas, au dernier r{\'e}sultat pour
maple. Les commentaires sont \verb|//| resp \verb|#|. L'instruction
\code{subs} prend ses arguments dans des ordres invers{\'e}s. 

Pour la configuration du "cas", je conseille de:

\noindent{\sc cocher} \code{radians}, et de

\noindent{\sc d{\'e}cocher:} \code{approx}, \code{complex},
  \verb/Cmpx_var/, \code{Sqrt}. On travaillera ainsi en mode exact
  dans le corps engendr{\'e} par les coefficients de l'expression, alors
  que si l'on coche complex ou Sqrt, on rajoute $I$ et des racines
  carr{\'e}es ce qui ne permet pas par exemple une factorisation de
  polyn{\^o}me sur un corps prescrit.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 

\medskip
\noindent{\bf II Racourcis claviers}
\begin{verbatim}
copier CTRL c 
coller: CTRL v et aussi CRTL y ou SHIFT ins
couper la selection: CTRL x
undo: CTRL z
couper ce qui suit: CTRL k (kill)
effacer toute la ligne: ECHAP
remonter/descendre dans l'historique:
SHIFT fleche haut/bas

inserer []: CTRL b
inserer {}: CTRL l
\end{verbatim}
Et pour ins{\'e}rer une nouvelle entr{\'e}e, une partie graphique, un
programme, un tableur:
\begin{center}
\code{ALT n}, \code{ALT g}, \code{ALT p}, \code{ALT t}.  
  \end{center}%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%
\exo
% !s!<c>
% -------------------------------------EXERCICE---------------------------------------------
%!s!
\qu Trouver un endroit pour d{\'e}couvrir rapidement le logiciel {\`a} partir
d'exemples: Ex pour xmaxima, la page d'accueil, pour maple: {\'e}tudier
dans le menu ``introduction'' de l'aide,  le lien 
``How to perform basic task''. Pour xcas, le menu calcul formel de
l'aide, ou le tutoriel, mais aussi/surtout l'index. 
\qusqu Comment obtenir de l'aide sur un mot donn{\'e} (par exemple sqrt) on
fait: \code{?sqrt}. Par exemple, comment
fait on $\sqrt[3]{23}$?
% !s!<c>
% Attention pour les utilisateurs de maple, root[3](23) ne marche pas, il fait juste racine carree.
%!s!
% root(3,23);
\squ Donner une valeur approch{\'e}e des r{\'e}sultats pr{\'e}c{\'e}dents. (Soit en
for\c cant xcas a {\^e}tre en flottants (Ex \code{23.} ou \code{approx(23)}), soit avec \code{evalf}).
%root(3,23.);evalf(root(3,23.));root(3,approx(23))
\squ Trouver la syntaxe des constantes r{\'e}elles ou complexes $\pi$, $e$,
$i$ (o{\`u} $i^2=-1$). Faire afficher les $1000$ premi{\`e}res d{\'e}cimales de $\pi$.   
%evalf(Pi,1000);
\squ Faire \code{?digits}. Que faut il faire pour travailler par
d{\'e}faut avec $1000$ chiffres?
% !s!<c>
% Attention mettre plusieurs Digits:= sur une meme ligne a l'air de poser probleme
%!s!
% Digits:=1000;
% sqrt(2.0);
% Digits:=10;
% sqrt(3.0);
\qusqu Attribuer {\`a} la variable $P$ la forme d{\'e}velopp{\'e}e du polyn{\^o}me
suivant $(2x+1)^2\frac{x^5-1}{x-1}$. (On aura peut {\^e}tre aussi besoin
de faire simplifier les r{\'e}sultats)
% P:=expand(simplify((2*x+1)^2*(x^5-1)/(x-1)));
\squ Essayer \code{factor(P);} Sur quel corps xcas a t'il travaill{\'e}?
\squ Factoriser  $x^{12}-1$ dans $\rela[x]$. D{\'e}duire de certaines
factorisations la valeur du polyn{\^o}me cyclotomique $\Phi_{12}$?
% factor(X^12-1);
% !s!<c>
% phi12 est le facteur qui n'apparait pas dans: 
%!s!
% factor(X^6-1);factor(X^4-1);
\squ On pose $a=e^{\frac{2i\pi}{12}}$. V{\'e}rifiez que $a^{12}$ vaut bien
$1$ pour xcas.
\squ Factorisez $P$ dans $\reel[x]$
et dans $\complex[x]$. Peut t'on esp{\'e}rer un r{\'e}sultat exact?
% complex_mode:=1;factor(P*1.1);factor(approx(P));
% complex_mode:=0;factor(P*1.0);factor(approx(P,5));factor(P);
\squ Factoriser $X^{12}-1$ sur $\ratio[\sqrt{3}]$ et sur $\ratio[\sqrt{3},i]$.
% factor(X^12-1,sqrt(3));
% factor(X^12-1,[sqrt(3),I]);
% !s!<c>
% selon les versions, cFactor(...,a) est plus sur si l'on veut etre sur que I a ete utilise. (en fait ca veut  plutot dire Q[I,a] factor)
% !s!
% cFactor(X^12-1,sqrt(3));#est probablement plus sur
\exo
% !s!<c>
% -------------------------------------EXERCICE---------------------------------------------
%!s!
\qu Exprimer $\cos 5a$ en fonction de $\cos a$.
% trigexpand(cos(5*a));
\qu Calculer $\int_0^{\frac{\pi}{2}} \frac{\cos 5x}{2+\sin x}dx$,
ainsi qu'une primitive $P$ de $\frac{\cos 5x}{2+\sin x}$. D{\'e}river $P$
et v{\'e}rifiez que c'est correct.
% normal(int(cos(5*x)/(2+sin(x)),x=0..Pi/2));#simplify ne marche pas.
%%                     -209 ln(2) + 209 ln(3) - 254/3
% P:=int(cos(5*x)/(2+sin(x)),x);
% !s!<c>
% La forme developpee avant l'integration est plus simple:
% !s!
% P:=int(trigexpand(cos(5*x)/(2+sin(x))),x);
% simplify(diff(P,x)-cos(5*x)/(2+sin(x)));
%%%%%%%%%%%%%%%%%%%%%%%%%% 
\exotitre{Initiation {\`a} la g{\'e}om{\'e}trie} 
% !s!<c>
% -------------------------------------EXERCICE---------------------------------------------
%!s!
\qusqu Ouvrir un {\'e}cran de g{\'e}om{\'e}trie, dessiner  les sommets d'un
pentagone r{\'e}gulier gr{\^a}ce aux affixes de ses sommets. On pourra
utiliser une suite. On pourra deviner les syntaxes en cr{\'e}ant des
objets {\`a} la souris.
% !s!<g>
% zs:=exp(2*I*Pi/5);
% [seq(point(zs^i,affichage=point_width_2),i=0..4)];
\squ Dessiner un cot{\'e} de ce pentagone.
% segment(point(1),point(zs));
\squ Dessiner une droite $d$ de vecteur directeur d'affixe $e^{2i\pi/3}$
passant par $(3,0)$. Modifier sa couleur, {\`a} la souris ou dans la commande.
% d:=droite(point(3),point(3+exp(2*I*Pi/3)),'affichage'=red);
\squ Cr{\'e}er un param{\`e}tre $t$ de $[-5,3]$ gr{\^a}ce {\`a} la fonction
\code{element}, et tracer la droite perpendiculaire {\`a} $d$ passant par $(t,0)$ 
% t:=element(-5..3);
% perpendiculaire(point(t),d);
% !s!
%%%%%%%%%%%%%%%%%%%%%% 
\exotitre{Editeur de programme}
On peut cr{\'e}er des proc{\'e}dures courtes en ligne, en revanche il est
souvent plus clair d'utiliser l'{\'e}diteur de programmes.
\qu Cr{\'e}er une proc{\'e}dure \verb/puis:=proc(a,n)/ qui calcule $a^n$
ainsi: $A,B,C$ sont initialis{\'e}s respectivement {\`a} $1,a,n$, et l'on
execute tant que $C>0$:\\
si $C$ est impair \code{A:=A*B;C:=(C-1)/2;B:=B*B;}\\
sinon C:=C/2;B:=B*B;
\noindent et qui retourne $A$ 
% !s!<p>
% puis:=proc(a,n)
% local A,B,C;
% A:=1;B:=a;C:=n;
% while C>0 do
% if irem(C,2)=1 then A:=A*B;C:=(C-1)/2;B:=B*B;
% else C:=(C)/2;B:=B*B;
% fi;
% od;
% A;
% end;
% !s!
% puis(2,7);
\qusqu En utilisant \code{debug(puis(2,71)}, {\'e}tudier les valeurs de
$A,B,C$. (utiliser le bouton \code{watch}, et regarder la valeur de la
variable tout en bas.)
% debug(puis(2,71));)
\squ Comparer les passages dans les 2 cas avec l'{\'e}criture en base 2 de
$n$
% convert(71,base,2);
\exo
\qu Cr{\'e}er une fonction: $M:t \mapsto (\frac{\cos
  t}{\sin^3t},\frac{\sin t}{\sin^3t})$
% M:=t->(cos(t)/sin(t)^3,sin(t)/sin(t)^3);
\qusqu En mode g{\'e}om{\'e}trie, dessiner le point $M(\pi/2)$
\squ En utilisant \code{plotparam},d{\'e}ssiner la courbe $t\mapsto M(t)$.
% !s!<g>
% plotparam(M(t),t=0..Pi);
\squ Prendre des {\'e}l{\'e}ments $t1$ et $t2$ de $]0..\pi[$ et dessiner
$M(t1),M(t2),M(-t1-t2)$
% t1:=element(0..Pi,0.7);
% t2:=element(0..Pi,0.6);
% M1:=point(M(t1));M2:=point(M(t2));M3:=point(M(-t1-t2));
% droite(M1,M2,affichage=blue);
%!s!
\squ Dessiner la droite $M(t1),M(t2)$.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 
\exo
% !s!<c>
% -------------------------------------EXERCICE---------------------------------------------
%!s!
\qu Choisir un nombre premier $p$ {\`a} 10 chiffres, et un nombre $e$
inversible modulo $p-1$. En utilisant \code{powmod} quel est le temps
de calcul de $12345^{54321} [p]$? En d{\'e}duire une estimation du temps de
calcul d'une table  $e \mapsto 12345^e [p]$ pour \linebreak$e\wedge (p-1) =1$.
% p:=nextprime(10^10); 
% time(powmod(12345,987654321,p));
% !s!<c>
% Calculer toutes les puissances de 12345 serait de l'ordre d'environ
% 10^10 fois  le temps precedent 
%!s!
\qu Choisir un entier $b$ et rendre publique $(b,b^e [p])$
\qu Remarquer que les lettres $A\dots Z$ ont des codes ASCII
cons{\'e}cutifs. Comment obtenir les codes de chaque lettre d'un mot? (et
si l'on veut que $A$ soit repr{\'e}sent{\'e} par $0$ et $Z$ par $25$?)
% message:="ABCDA, Remarquez que des lettres identiques ne sont pas codees de la meme maniere!";asc(message);
% asc(messsage)-[seq(65,i=1..length(message))];
\qu Votre voisin choisit un message, tire des $k$ au hasard et code
chaque lettre $x$ avec $(b^k [p],x.(b^e)^k) [p])$ (sans connaitre $e$,
seulement avec $b$ et $b^e$
% b:=12345;e:=54321; igcd(e,p-1); B:=powmod(b,e,p);
% l:=asc(message);k:=[seq(rand(50),i=1..length(message))];
% C:=[seq([(b^k[i]) mod p,(l[i]*B^k[i]) mod p],i=1..length(message))];#le message crypte
\qusqu Calculer (via une fonction du type bezout) l'inverse de $e$
dans $\rela/(p-1)\rela$ 
%igcdex(e,p-1)[1];#NB:cette question etait inutile pour decrypter.
%ee:=p-1-e;#c'est -e [p-1] qui nous interesse 
\squ D{\'e}coder le message gr{\^a}ce {\`a} $e$.
% !s!<c>
% L'astuce est que (B^k)=((b^e)^k) qui vaut par commutativit{\'e}  des la
% composition des application B:x->x^k et A:x->x^e  ((b^k)^e). 
%Le principe a retenir, est qu'en crypto on a juste besoin
%d'operations A,B qui  commutent, et que la donnee de A de donne pas
%A^(-1)  
%!s!
% decrypt:=[seq(irem(powmod(C[i][1],ee,p)*C[i][2],p),i=1..length(message))];
% char(decrypt);
\squ Pr{\'e}parer un  expos{\'e} de 15 minutes expliquant la m{\'e}thode et son
int{\'e}r{\^e}t. (temps pour crypter, d{\'e}cryper avec et sans $e$. Statitiques
sur les lettres du message crypt{\'e}.)
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 
\exo Construire 2 cercles  $C_i(O_i,r_i)$, {\'e}tudier comment
trouver le centre d'une homoth{\'e}tie envoyant $C_1$ sur $(C_2)$, et en
d{\'e}duire comment construire les tangentes communes aux 2
cercles. Pr{\'e}parer une illustration en vue d'un petit expos{\'e}.
% !s!<c>
% -------------------------------------EXERCICE-----------------------------------------
% !s!<c>
%Stategie: On cherche le centre o d'une homothetie transformant C1 en
%C2, en suite on recupere le point de contact en exprimant qu'il est  
%le sommet d'un triange rectable de base [oO2]. Attention, inter rend
%un objet de type groupe de points, meme s'il y a unicite, pour 
%choisir un point dans l'intersection on utilise inter_unique
%!s!<g>
% O1:=point(-2);O2:=point(2);r1:=1;
% r2:=element(1.2..5,2);#Attention a ne pas faire de cercles de rayons infinis
% C1:=cercle(O1,r1);
% C2:=cercle(O2,r2);
% m:=point(O1+I);droite(O1,m,affichage=dot_line)#un point de C1 non sur (O1O2)
% dm:=parallele(O2,droite(O1,m),affichage=dot_line);
% n:=inter_unique(dm,C2);
% droite(m,n);o:=inter_unique(droite(m,n),droite(O1,O2));
% C:=cercle(O2,o,affichage=dot_line);t2:=inter_unique(C,C2)
% T:=droite(o,t2,affichage=(red+line_width_2));
% !s!
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%% 
\newpage
\end{multicols}

\end{document}

