

\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}

% Chemin vers les figures

\graphicspath{{/home/moi/Photos/Tehessin/}{/home/moi/Figures/FigSTI/}{/home/moi/Figures/FigXCAS/}}




%\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

\def\R{{\mathbb R}} % les réels
\def\Q{{\mathbb Q}} % les rationnels
\def\Z{{\mathbb Z}} % les entiers relatifs
\def\D{{\mathbb D}} % les décimaux
\def\N{{\mathbb N}} % les entiers naturels
\def\C{{\mathbb C}} % les complexes
\def\c{{\mathscr C}} % pour les courbes
\def\Pl{\mathscr{P}} % pour les plans
\def\Oij{$\left(O;~\vec{i},~\vec{j}\right)$} % pour nommer un repère (O;i,j)
\def\cad{c'est-à-dire}
\def\e{\mathrm{e}} %pour écrire correctement le nombre e
\def\i{\mathrm{i}} %pour écrire correctement le nombre i
\def\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 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{TEST D'APPARTENANCE D'UN POINT À UNE DROITE }}{\Large \emph{Premiers pas sur XCAS... }}



\textbf{Compétences mathématiques\::}\par
	\hspace{1cm} $\bullet$  Début du cours sur les fonctions. Équations réduites de
        droites. Fonctions affines.

\textbf{Compétences informatiques\::}\par
	\hspace{1cm} $\bullet$   Découverte des procédures, du test «~SI...ALORS...SINON~»

\textbf{Prérequis\::}\par
	\hspace{1cm} $\bullet$  Rien de particulier.

\lignetirets



\procedure{\linewidth}{Le problème}{Le but de notre séance est de créer un programme qui teste l'appartenance d'un point de coordonnées (X,Y) à une droite d'équation $y=ax+b$.
On veut qu'il nous donne la réponse si on se contente de lui   rentrer dans l'ordre les coefficients $a$ et $b$ puis les coordonnées X et Y. }


\partie \textbf{DÉCOUVERTE}\\

\begin{enumerate}

\item  \textbf{Allumons l'ordinateur }\\

Je pense que vous en êtes capables...

Vous avez cliqué sur l'icône correspondant à \Prog{XCAS}. Vous voyez normalement ceci, à la couleur
près~:


\begin{center}
  \includegraphics[width=\textwidth]{saisiedepart.eps}
\end{center}





Si tel n'est pas le cas, allez dans le menu \code{Cfg->configuration du CAS->niveau} et choisissez
\code{Universite} car vous êtes très fort(e).

Dans ce même onglet \code{Cfg}, vous pouvez modifier la taille de la police, les couleurs.

Nous voici prêts à programmer.


\item \textbf{Que voulons-nous que l'ordinateur fasse~?}\\

Nous voudrions donner uniquement comme renseignements à l'ordinateur les coefficients $a$ et $b$ de
l'équation réduite de la droite et les coordonnées (X,Y) du point à tester. Pour que \Prog{XCAS} comprenne ce que l'on veut de lui, il faudra parler son langage.


\item \textbf{Procédure}\\


Une procédure est une sorte de  fonction informatique qui a un nom,  un début et une fin et qui
dépend d'un certain nombre de variables fournis par l'utilisateur. On peut par exemple appeler notre
procédure \code{pointsurdroite} et son  squelette ressemblera à \c ca~:

\begin{lstlisting}
pointsurdroite(a,b,X,Y):={  // c'est le titre du programme...
                            // On indique qu'on rentrera dans l'ordre a,b,X et Y
                            // il faudra rentrer des instructions ici
  }                         // marque la fin du programme
\end{lstlisting}

\item \textbf{Fonction}\\


Notre but est de vérifier si $2X+1=Y$. Il faut donc d'abord faire calculer $2X+1$ par
l'ordinateur. On introduit donc une fonction comme on a l'habitude de le faire en cours. Donnons un
nom à la fonction affine associée à la droite~:~soit $f~:~x\mapsto 2x+1$. La syntaxe est
pratiquement la même pour \Prog{XCAS}~:

\begin{lstlisting}
f:=x->2*x+1
\end{lstlisting}


Alors, pour calculer par exemple l'image de 4 par \code{f} on rentre


\begin{lstlisting}
f(4)
\end{lstlisting}

Ben oui, $2\times 4+1=9$.

\item \textbf{SI...ALORS...SINON}\\


Que faites-vous pour savoir si un point appartient à une droite donnée ?

SI ..................  ALORS .............................. SINON....................................

\Prog{XCAS} parle presque la même langue~:

\begin{lstlisting}
si (la condition à tester)
alors action 1; 
sinon action2; 
fsi;     // pour dire que c'est fini...
\end{lstlisting}

Nous y sommes presque....

\item \textbf{Variables locales}\\


La variable \code{f} que nous introduisons \textit{à l'intérieur} du programme n'est pas rentrée par
l'utilisateur : c'est l'ordinateur qui la crée suite à nos instructions. On n'en a plus besoin en
dehors du programme et on va donc libérer la case mémoire où elle se trouvait. On dit que c'est une variable locale.

On l'introduit par~:

\begin{lstlisting}
local f;
\end{lstlisting}





\end{enumerate}


\partie \textbf{LE PROGRAMME...}

\begin{enumerate}
\item \textbf{Récapitulons   }\\


\begin{itemize}

\item Une ligne pour introduire le programme
\begin{lstlisting}
pointsurdroite(a,b,X,Y):={ 
\end{lstlisting}

\item une ligne pour introduire la variable locale~:


\begin{lstlisting}
local f;
\end{lstlisting}

\item une ligne pour dire qui est \code{f}~:



\begin{lstlisting}
f:=x->a*x+b
\end{lstlisting}

En effet, on rentre $f$ de la manière la plus générale car on veut pouvoir
traiter toutes les fonctions affines.

\item le c\oe ur du programme~:



\begin{lstlisting}
si (f(X)==Y) alors "le point appartient à la droite"; 
sinon "le point n'appartient pas à la droite"; 
fsi;
\end{lstlisting}



L'égalité sur \Prog{XCAS} est traitée par \code{==}. 

Pour faire comprendre qu'on rentre une phrase que l'ordinateur n'a pas besoin de lire mais qui est
juste là pour aider l'utilisateur, on la met entre guillemets \verb+" "+.

\item on ferme la procédure~:



\begin{lstlisting}
}:;
\end{lstlisting}

\end{itemize}



\item \textbf{Comment «~rentrer~» le programme}

On ouvre une fenêtre de programmation en tapant simultanément sur \Alt et \keystroke{p}.
On rentre les lignes précédente en n'hésitant pas à passer souvent à la ligne pour que le programme
soit lisible. Les mots-clés s'affichent en couleur.

Quand on pense que tout va bien, on clique sur \keystroke{OK}. Si un message d'erreur apparaît, il
indique
le numéro de ligne et donne une explication très succincte en anglais. C'est souvent une faute de
frappe.
Relisez bien le script. Si le problème persiste, appelez votre charmant professeur...


\item \textbf{Comment l'utiliser ?}\\

On a cliqué sur \keystroke{OK} et on est sorti de la fenêtre de programmation. 


Pour savoir si le point de coordonnées (2;5) appartient à la droite d'équation $y=3x+1$, on rentre~:

\begin{lstlisting}
pointsurdroite(3,1,2,5)
\end{lstlisting}

On fait ensuite d'autres essais.





\item \textbf{Un peu d'esthétique... }\\


Au lieu de répondre impersonnellement \og  le point appartient à la droite \fg, on aimerait obtenir la réponse \og le point de coordonnées (2,5) appartient à la droite d'équation $y=3x+1$\fg.

\c Ca devrait être possible car les coordonnées du point et les coefficients de l'équation sont stockés par \Prog{XCAS} sous les appellations $a$, $b$, X et Y.

Il suffit ensuite de savoir que \Prog{XCAS} \og colle \footnote{On dit concatène}\fg les morceaux de \og phrases\fg à l'aide du symbole \code{+}.

Cela donne donc~: 


\begin{lstlisting}
"Le point de coordonnées (" + X +" , "+ Y +") appartient à la droite d'équation y="+ a +"x +"+ b; 
\end{lstlisting}

\textbf{ATTENTION !}  On ne met pas X entre guillemets car X doit être lu par \Prog{XCAS} et traduit par la
              valeur qu'on aura rentré en 3\textsuperscript{e} position.



\end{enumerate}


\partie \textbf{TRACÉ}\\



On peut aussi demander d'afficher le point de coordonnées (X,Y) et la droite d'équation $y=ax+b$. Pour cela, on utilise \code{point} et \code{graphe}~:

\begin{lstlisting}
D:=graphe(f(t),t);  
A:=point(X,Y);  
\end{lstlisting}

Pour régler l'affichage du point en plus gros pour bien le voir en rouge~:


\begin{lstlisting}
affichage(epaisseur_point_5+rouge);
\end{lstlisting}


Le programme devient alors~:


\begin{lstlisting}
pointsurdroite(a,b,X,Y):={
local f,D,A;
f:=t->a*t+b; // la fonction
affichage(epaisseur_point_5); // le point épai
  D:=graphe(f(t),t,couleur=bleu);  // On affiche D 
  A:=point(X,Y); // on affiche A
si (f(X)==Y) alors 
afficher("Le point de coordonnées ("+X+","+Y+") appartient à la droite d'équation y="+a+"x+"+b);A,D; 
sinon 
afficher("Le point de coordonnées ("+X+","+Y+") n'appartient pas à la droite d'équation
y="+a+"x+"+b);A,D; // de même si le point n'est pas au bon endroit
 fsi;
}:;
\end{lstlisting}






On a rajouté \code{afficher( )}  car nous demandons à \Prog{XCAS} de retourner à la fois la phrase et un graphique : \code{afficher( )} permet en fait d'afficher un résultat intermédiaire.

Le résultat est affiché en-dessous~:

\begin{center}
  \includegraphics[width=\textwidth]{capturedroite.eps}
\end{center}


\partie \textbf{SANS PARACHUTE...}\\


À vous d'imaginer une procédure \code{AppartientCourbe(expression,X,Y)} qui teste si un point de coordonnées (X,Y) appartient à la courbe d'équation y=expression.









\end{document}




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