

\documentclass[11pt]{article}
\usepackage[T1]{fontenc}
\usepackage[latin1]{inputenc}          % les bons codes pour les bonnes lettres
\usepackage{listings}% pour les listings informatiques
\usepackage[frenchb]{babel}
\usepackage{keystroke}% pour les touches du clavier
\usepackage{amsmath,amsfonts,amsthm,geometry,pst-all}
\usepackage{amssymb}
\geometry{a4paper,left=1cm,right=1cm,top=1cm,bottom=1cm,noheadfoot}
\usepackage{pifont}
\usepackage{graphicx}
%\usepackage{yhmath} %pour faire un arc de cercle $\wideparen{AB}$ 
\usepackage{eurosym} % pour avoir le symbole euro \euro
\pagestyle{empty}
\setlength{\parindent}{0cm}
\usepackage{multicol}
\usepackage{slashbox} %pour barrer une cellule d'un tableau
\usepackage{color}
\usepackage{mathrsfs, wasysym} % mathscfs donne accès aux lettres curvilignes
\usepackage{pstricks,pstricks-add,pst-math,pst-xkey} % packages utiles pour le pstricks
\usepackage{multirow,colortbl,tabularx} % packages utilisés dans un tableau (tabular)
\usepackage{array}
\usepackage{calc,fp}


\makeatletter
\define@key[psset]{}{transpalpha}{\pst@checknum{#1}\pstranspalpha}
\psset{transpalpha=1}
\def\psfs@transp{%
  \addto@pscode{/Normal .setblendmode \pstranspalpha .setshapealpha }%
  \psfs@solid}
%%%%%%%%%%%%%%%%%%%%%%%%%% Ceci sert lorsqu'on remplit une figure géométrique

\newcounter{numero}
\newcommand{\partie}{
\addtocounter{numero}{1}%
\textbf{\psframebox*[fillcolor=black!60]{\textbf{\white Partie \arabic{numero}:}}}\quad}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% incrémente le numéro de la partie

\setlength\leftmargini{0.73cm}
\renewcommand{\labelenumi}{\psframebox*[fillcolor=black!25]{\textbf{\white{\arabic{enumi}.}}}}
\setlength\leftmarginii{0.40cm}
\renewcommand{\labelenumii}{\textbf{\alph{enumii}.}}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% définition des items

\newcounter{degradecadre}
\newcounter{ptinit}
\newcounter{ptfin}
\newcounter{ycadreinit}
\newcounter{ycadrefin}
\newcommand{\cadre}[2]{\begin{pspicture}(0,0)(19,1.4)
	\multido{\i=1+1}{16}{
		\multido{\n=1+1}{2}{
			\FPeval{\degradecadre}{90-\i*4}
			\FPeval{\ptinit}{1.1875*(\i-1)}
			\FPeval{\ptfin}{1.1875*(\i-1)+1.1875}
			\FPeval{\ycadreinit}{(\n-1)*1.4}
			\FPeval{\ycadrefin}{(\n-1)*1.4+0.1}
			\psframe[fillstyle=solid,fillcolor=black!\degradecadre,linestyle=none](\ptinit,\ycadreinit)(\ptfin,\ycadrefin)}}
	\psframe[fillstyle=solid,fillcolor=black!90,linestyle=none](0,0)(0.1,1.4)
	\psframe[fillstyle=solid,fillcolor=black!26,linestyle=none](18.9,0)(19,1.4)
	\rput(9.5,1){#1} \rput(9.5,0.4){#2}
\end{pspicture}\par}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% cadre et titre

\newcounter{degrade}
\newcounter{ptdepart}
\newcounter{ptfinal}
\def\lignetirets{\begin{pspicture}(0,0)(19,0.2)
	\multido{\i=1+1}{16}{
		\FPeval{\degrade}{90-\i*4}
		\FPeval{\ptdepart}{1.2*(\i-1)}
		\FPeval{\ptfinal}{1.2*(\i-1)+1}
		\psframe[fillstyle=solid,fillcolor=black!\degrade,linestyle=none](\ptdepart,0)(\ptfinal,0.2)}
\end{pspicture}\par}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% ligne tirets

\renewcommand\rmdefault{phv}

\newcommand{\procedure}[3]{
	\setlength{\arrayrulewidth}{1.8pt}
	\begin{tabularx}{#1}[t]{|X}
		\rowcolor[gray]{0.6}
		\textcolor{white}{#2}\\ 
		\cellcolor{gray!20}
		#3\\
	 \hline
	\end{tabularx}
	\setlength{\arrayrulewidth}{0.6pt}}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% crée les cadres pour Procédure; en paramètre, on met le texte

\newcommand\R{{\mathbb R}} % les réels
\newcommand\Q{{\mathbb Q}} % les rationnels
\newcommand\Z{{\mathbb Z}} % les entiers relatifs
\newcommand\D{{\mathbb D}} % les décimaux
\newcommand\N{{\mathbb N}} % les entiers naturels
\newcommand\bC{{\mathbb C}} % les complexes
\newcommand\bc{{\mathscr C}} % pour les courbes
\newcommand\Pl{\mathscr{P}} % pour les plans
\newcommand\Oij{$\left(O;~\vec{i},~\vec{j}\right)$} % pour nommer un repère (O;i,j)
\newcommand\cad{c'est-à-dire}
\newcommand\e{\mathrm{e}} %pour écrire correctement le nombre e
\renewcommand\i{\mathrm{i}} %pour écrire correctement le nombre i
\renewcommand\d{\,\text{d}} % pour avoir un d droit dans l'intégrale

\newcommand{\ve}[1]{\overrightarrow{#1}} %pour les vecteurs
\newcommand{\Cnp}[2]{\displaystyle{{#1 \choose #2}}} % pour les p parmi n
\newcommand{\systeme}[2]{\left\{\begin{array}{l}
	#1\\
	#2\\
\end{array}\right.} % pour créer un système de deux équations

\makeatletter
\newlength{\@longarc}
\newcommand{\arc}[1]{\settowidth{\@longarc}{$#1$}
	\addtolength{\@longarc}{-0.2em}
	\unitlength \@longarc
	\ensuremath{
		\stackrel{\begin{picture}(1,0.2)
			\qbezier(0,0)(0.5,0.2)(1,0)
		\end{picture}}
		{#1}
	}}

%%%%%%%%%%%%%%%%%%%%% Pour les bleaux avec tabularx

%%%%%%%%%%%%% entete tableau normal
\usepackage{tabularx}
%%%%%%% Colonne ï¿½aisse
\newcolumntype{I}{!{\vrule width 2pt}}

%%%%%%%%%%%%%%% ligne ï¿½aisse
\newlength\savedwidth
\newcommand\whline{\noalign{\global\savedwidth\arrayrulewidth
                                             \global\arrayrulewidth 2pt}%
                                 \hline
                                 \noalign{\global\arrayrulewidth\savedwidth}}


\newcolumntype{N}[1]{  I@{\vrule height.5cm width0pt depth.2cm\hspace{.5cm}}c@{\hspace{.5cm}}I@{\vrule height.5cm width0pt depth.2cm\hspace{.5cm}}c@{\hspace{.5cm}}*#1{|@{\vrule height.5cm width0pt depth.2cm\hspace{.5cm}}c@{\hspace{.5cm}}}I  }

\setlength\extrarowheight{4pt}

\renewcommand\tabularxcolumn[1]{m{#1}}  % pour centrer verticalement
\newcolumntype{Z}{>{\centering\arraybackslash}X} % pour centrer horizontalement
\newcolumntype{Y}[1]{IcIZ*{#1}{|Z} I}


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%   Pour les listings de code et les réponses du logiciel


\usepackage{bold-extra,fancyvrb}
\usepackage[scaled=0.85]{luximono}
\DefineVerbatimEnvironment{boxedverbatim}{Verbatim}{gobble=2,frame=single,framesep=4mm,label=\textit{\small
    Réponse du logiciel}}

\definecolor{0.9white}{rgb}{0.9,0.9,0.9}
\definecolor{0.2white}{rgb}{0.2,0.2,0.2}


\lstloadlanguages{XCAS}
\lstset{numbers=none,language=XCAS,xleftmargin=10pt,%
keywordstyle =\color{0.2white}\bfseries\usefont{OT1}{cmtt}{b}{n},basicstyle=\ttfamily,commentstyle=\normalfont\scriptsize\itshape,%\small,
    backgroundcolor=\color{0.9white},breaklines=true}
   

\newcommand\Prog[1]{{\bfseries\ttfamily #1}}

\newcommand{\code}[1]{\texttt{#1}}


% %%% un ; avec un peu d'espace autour pour les intervalles
\newcommand{\pv}{\ensuremath{\: ; \,}}

%%%%%%%%%%%%%%%%%%%%% pour créer un arc de cercle
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Début du document %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%



\begin{document}
\setlength{\unitlength}{1mm}

\cadre{\LARGE \emph{TABLEAUX DE SIGNES}}{\Large \emph{Cas du produit de deux facteurs affines}}



\textbf{Compétences mathématiques\::}\par
	\hspace{1cm} $\bullet$ Signe de $ax+b$. Tableau de signe.

\textbf{Compétences informatiques\::}\par
	\hspace{1cm} $\bullet$  Tableau (ou matrice).

\textbf{Prérequis\::}\par
	\hspace{1cm} $\bullet$ Écriture d'une procédure; Chaînes de caractères; Test «~si alors sinon~».

\lignetirets

\bigskip
   
\procedure{\linewidth}{Le problème}{ On  veut étudier le signe de $f(x)\times g(x)$  avec $f$ et $g$
  deux fonctions affines et en rentrant
  uniquement comme arguments $f$ et $g$ pour obtenir le tableau de signe correspondant.}

\bigskip


\partie \textbf{Étude avec «~papier-crayon~»}\\


\begin{enumerate}
\item Notre but est d'obtenir un tableau de ce style~:
\begin{center}
             \begin{tabularx}{\linewidth}{Y{4}}
	     \whline
             Valeurs de $x$ & & 1 & & 2 & \\
             \hline
             Signe de $ax+b$&3 & 4 &5 & 6 &7\\
             \hline
             Signe de $cx+d$&8 & 9 &10&11 &12\\
             \hline
             Signe du produit & 13 &14&15 &16&17\\

             \whline
             \end{tabularx}
             \end{center}
Reste à savoir comment remplir les 17 cases numérotées. 



\item Reproduisez ce tableau au brouillon (sans
les numéros~!) et remplissez-le dans le cas particulier~:~$a=-2$, $b=-3$, $c=4$ et $d=5$.


\item Faites de même avec $a=-2$, $b=-3$, $c=-4$  et $d=5$. Il reste maintenant à expliquer tout ça à
  notre ordinateur\dots

\end{enumerate}



\partie \textbf{Étude avec XCAS}\\



\bigskip
   
\procedure{\linewidth}{Le but du jeu}{ En tapant \code{signeproduit(x->-2*x+3,x->4*x+5)} on veut obtenir~:
  \[
    \left[\begin{array}{lccccc}
\mbox{valeurs de x} & \mbox{  } & \frac{-5}{4} & \mbox{  } & \frac{3}{2} & \mbox{  } \\
\mbox{signe de -2x+3} & \mbox{ + } & \mbox{ } & \mbox{ + } & 0 & \mbox{ - } \\
\mbox{signe de 4x+5} & \mbox{ - } & 0 & \mbox{ + } & \mbox{ } & \mbox{ + } \\
\mbox{signe du produit} & \mbox{ - } & 0 & \mbox{ + } & 0 & \mbox{ - }
\end{array}\right] 
  \]
}

\bigskip



\begin{enumerate}
\item  \textbf{Cases   1  et  2}~:~sachant  que   \Prog{XCAS}  sait  résoudre   les  équations  avec
  \code{resoudre(équation,variable)},  sait déterminer  le  minimum d'un  ensemble  de nombres  avec
  \code{min(x1,x2)}  et  le maximum  avec  \code{max(x1,x2)},  proposez  une méthode  pour  calculer
  \code{xmin} que nous mettrons dans la case 1 et \code{xmax}
  que nous mettrons dans la case 2.
\item \textbf{Les  tableaux}~:~pour créer un  tableau de,  par exemple, 2  lignes et 3  colonnes, on
  utilise des  «~liste de  listes~»~:~une ligne sera  représentée par  3 nombres (comme  3 colonnes)
  séparés  par des  virgules entre  crochets, la  liste  de ces  lignes étant  elle-même mise  entre
  crochets, if you see what I mean\dots

Par exemple, pour créer~:
\[
             \begin{bmatrix}
             1&2&3\\
             4&5&6\\
             7&8&9\\
             \end{bmatrix}
\]

on rentre~:

\begin{lstlisting}
[ [1,2,3],[4,5,6],[7,8,9] ]
\end{lstlisting}



Ainsi, notre procédure commencera par~:

\begin{lstlisting}
signeproduit2(f,g):={ // nom de la procédure et des paramètres
z1:=resoudre(f(x)=0)[0]; // le [0] indique qu'on prend le 1er élément de la liste des solutions.
z2:=resoudre(g(x)=0)[0]; // z comme... zéro
zmin:=min(z1,z2);
zmax:=max(z1,z2);
   [ ["valeurs de x","  ",zmin,"  ",zmax,"  "],
     
     ["signe de "+f(x),... // à vous de compléter le reste !
\end{lstlisting}

Vous vous  rappelez qu'on met du  «~texte~» (on parle  plutôt de \emph{chaîne de  caractères}) entre
guillemets et qu'on colle (on dit \emph{concatène}) des caractères avec des \code{+}.

Ainsi en  rentrant \code{"signe  de "+f(x)}, on  fera comprendre  à \Prog{XCAS} qu'il  doit afficher
\code{signe de -2x+3} si $f$ est $x\mapsto -2x+3$.

\item \textbf{Case 3}~:~on met un - ou un + au hasard avec une chance sur deux de se tromper ou bien on
  réfléchit\dots Comme  c'est le début, je  vous rappelle votre  cours~: que se passe-t-il  avant la
  valeur d'annulation de $f$?  Vous vous souvenez du test «~si\dots alors\dots sinon\dots~»~? Ici, cela donne~:

  \begin{lstlisting}
["signe de "+f(x),   si f(zmin-1)>0 alors " + "; sinon " - "; fsi, // le reste à compléter.
  \end{lstlisting}

Justifiez le test choisi.


\item \textbf{Case 4}~:~ici, on  met un zéro ou rien du tout. Comment  le savoir~? N'oubliez pas que
  cette ligne concerne le facteur $f(x)$ et qu'on teste une égalité avec \code{==}. Comme Noël est
  encore proche, voici un nouveau cadeau~:

  \begin{lstlisting}
si f(zmin)==0 alors 0; sinon " ";fsi,
  \end{lstlisting}

\item \textbf{Case 5}~:~ici, on  a besoin de tester sur un nombre  pris entre zmin et zmax~:~prenons
  par exemple leur «~milieu~»\dots Dernier cadeau~:

  \begin{lstlisting}
si f((zmin+zmax)*.5)>0 alors " + "; sinon " - "; fsi,
  \end{lstlisting}



\item \textbf{Les cases de 6 à 12}~:~on revient à l'un des trois cas précédents en adaptant un peu.


\item \textbf{Case 13}~:~que pensez-vous de ce code~:

  \begin{lstlisting}
si g(zmin-1)*f(zmin-1)>0 alors " + "; sinon " - "; fsi,
  \end{lstlisting}

\item  \textbf{Les  cases de  14  à  17}~:~les  cases  14 et  16  ne  sont  pas trop  compliquées  à
  remplir. Pour les cases 15 et 17, inspirez-vous de la case 13.


\item \textbf{Est-ce que ça marche~?} Il ne reste plus qu'à reprendre notre exemple~:


  \begin{lstlisting}
signeproduit2(x->-2*x+3,x->(4*x+5))
  \end{lstlisting}

\end{enumerate}


\partie \textbf{Généralisation}\\

\bigskip
   

On a un logiciel qui calcule comme un dieu et  on se contente de lui demander le signe du produit de
deux facteurs affines~:~ayons plus d'ambition~!

Malheureusement, cela demande un peu de  savoir faire informatique. Nous pouvons malgré tout relever
quelques  difficultés à  défaut de  vouloir les  résoudre. Qu'est-ce  qui cloche  dans  la procédure
précédente si $f(x)=x^2+1$~? Si $f(x)=x^2-1$~? Si on  a plus de deux facteurs~? Si deux facteurs ont
un zéro en commun~?

Voici  une procédure  qui règle  ces  problèmes\dots mais  qui est  un  peu plus  compliquée que  la
précédente~:

\begin{lstlisting}
signeproduit(L):={
L:=apply(f->unapply(f,x),[L])// on transforme les expressions en fonctions
n:=size(L);
Z:=NULL;
pour k de 0 jusque n-1 faire // on crée la suite des zéros 
  si size(resoudre(L[k](x)=0)>0) alors // Pour les expressions qui n'ont pas de zéros
                      pour j de 0 jusque size(resoudre(L[k](x)=0))-1 faire 
                          Z:=Z,simplifier(resoudre(L[k](x)=0)[j]);
                      fpour;
  fsi;
fpour;
Z:=sort(Z); // on classe les zéros dans l'ordre croissant 
nz:=size(Z);
pour u de 1 jusque nz-2 faire 
     si Z[u]==Z[u+1] alors Z:=Z[0..u-1],Z[u+1..nz-1];nz:=nz-1; // pour les zéros en double
     fsi;
fpour;
nz:=size(Z);
l0:=NULL;li:=NULL;lr:=NULL; // on initialise nos suites
pour m de 0 jusque nz-1 faire l0:=l0,Z[m]," ";fpour; // on crée la suite des zéros (car c'était une liste)
 [ ["valeurs de x"," ",l0 ],
   pour p de 0 jusque n-1 faire lp:=NULL; // il y aura n lignes correspondant aux n expressions. 
                                          // à chaque tour de boucle, on rajoute une ligne
     li:=li,["signe de "+L[p](x),   si L[p](Z[0]-1.0)>0 alors " + "; sinon " - "; fsi, // test pour le signe àgauche du premier zéro                                   
                           pour r de 0 jusque nz-2 faire  // boucle pour le reste des colonnes
                             lp:=lp,si simplifier(L[p](Z[r]))==0 alors 0; sinon " ";fsi, // test pour le zéro
                             si L[p]((Z[r]+Z[r+1])*.5)>0 alors " + "; sinon " - "; fsi // test pour le signe entre deux zéros
                           fpour,
                           si simplifier(L[p](Z[nz-1]))==0 alors 0; sinon " ";fsi, // test du dernier zéro
                           si L[p](Z[nz-1]+1.0)>0 alors " + "; sinon " - "; fsi // test du dernier signe à droite du dernier zéro
     ];
    fpour,  // on passe à la dernière ligne avec le même type de tests
    ["signe du produit", si product(L[s](Z[0]-1.0),s,0,n-1)>0 alors " + "; sinon " - "; fsi,0,  // on test les signes des produits cette fois
                         pour t de 0 jusque nz-2 faire 
                           lr:=lr,si product(L[s]((Z[t]+Z[t+1])*.5),s,0,n-1)>0 alors " + "; sinon " - "; fsi,0;                    
                         fpour,
                         si product(L[s](Z[nz-1]+1.0),s,0,n-1)>0 alors " + "; sinon " - "; fsi
     ]]}:;
\end{lstlisting}


Ce qui donne pour $(-2x+3)(-4x+5)(x^2-3)(x+1)(x^2-1)(\sqrt{x^2+1})(x(\cos(x)+2)$~:

\begin{lstlisting}
signeproduit(-2*x+3,-4*x+5,x^2-3,x+1,x^2-1,sqrt(x^2+1),x*(cos(x)+2)
\end{lstlisting}


\[\left[\begin{array}{lccccccccccccccc}
\mbox{valeurs de x} & \mbox{ } & -\left(\sqrt{3}\right) & \mbox{ } & -1 & \mbox{ } & 0 & \mbox{ } & 1 & \mbox{ } & \frac{5}{4} & \mbox{ } & \frac{3}{2} & \mbox{ } & \sqrt{3} & \mbox{ } \\
\mbox{signe de -2*x+3} & \mbox{ + } & \mbox{ } & \mbox{ + } & \mbox{ } & \mbox{ + } & \mbox{ } & \mbox{ + } & \mbox{ } & \mbox{ + } & \mbox{ } & \mbox{ + } & 0 & \mbox{ - } & \mbox{ } & \mbox{ - } \\
\mbox{signe de -4*x+5} & \mbox{ + } & \mbox{ } & \mbox{ + } & \mbox{ } & \mbox{ + } & \mbox{ } & \mbox{ + } & \mbox{ } & \mbox{ + } & 0 & \mbox{ - } & \mbox{ } & \mbox{ - } & \mbox{ } & \mbox{ - } \\
\mbox{signe de x{\tt\symbol{94}}2-3} & \mbox{ + } & 0 & \mbox{ - } & \mbox{ } & \mbox{ - } & \mbox{ } & \mbox{ - } & \mbox{ } & \mbox{ - } & \mbox{ } & \mbox{ - } & \mbox{ } & \mbox{ - } & 0 & \mbox{ + } \\
\mbox{signe de x+1} & \mbox{ - } & \mbox{ } & \mbox{ - } & 0 & \mbox{ + } & \mbox{ } & \mbox{ + } & \mbox{ } & \mbox{ + } & \mbox{ } & \mbox{ + } & \mbox{ } & \mbox{ + } & \mbox{ } & \mbox{ + } \\
\mbox{signe de x{\tt\symbol{94}}2-1} & \mbox{ + } & \mbox{ } & \mbox{ + } & 0 & \mbox{ - } & \mbox{ } & \mbox{ - } & 0 & \mbox{ + } & \mbox{ } & \mbox{ + } & \mbox{ } & \mbox{ + } & \mbox{ } & \mbox{ + } \\
\mbox{signe de sqrt(x{\tt\symbol{94}}2+1)} & \mbox{ + } & \mbox{ } & \mbox{ + } & \mbox{ } & \mbox{ + } & \mbox{ } & \mbox{ + } & \mbox{ } & \mbox{ + } & \mbox{ } & \mbox{ + } & \mbox{ } & \mbox{ + } & \mbox{ } & \mbox{ + } \\
\mbox{signe de x*(cos(x)+2)} & \mbox{ - } & \mbox{ } & \mbox{ - } & \mbox{ } & \mbox{ - } & 0 & \mbox{ + } & \mbox{ } & \mbox{ + } & \mbox{ } & \mbox{ + } & \mbox{ } & \mbox{ + } & \mbox{ } & \mbox{ + } \\
\mbox{signe du produit} & \mbox{ + } & 0 & \mbox{ - } & 0 & \mbox{ - } & 0 & \mbox{ + } & 0 & \mbox{ - } & 0 & \mbox{ + } & 0 & \mbox{ - } & 0 & \mbox{ + }
\end{array}\right] 
\]




\end{document}




%%% Local Variables: 
%%% mode: latex
%%% TeX-master: t
%%% End: 
