
Avant de construire l'algorithme, regardons comment calculer $m$ et $p$ en fonction de $a$, $b$, $c$ et $d$ :

\begin{itemize}
\item
$A\in(d)\iff f(a)=b\iff am+p=b$; 

\item
$B\in(d)\iff f(c)=d\iff cm+p=d$. 
\end{itemize}

En soustrayant les deux équations, on a:
\[
am-cm=b-d \qquad\text{d'où}\qquad m = \dfrac{b-d}{a-c}\text{si }a\neq c.
\]
Ensuite, on part de l'égalité $am+p=b$ (par exemple) pour écrire :
\[
p=b-am=b-a\times\dfrac{b-d}{a-c}.
\]
Si $a=c$ cela signifie que les deux points on la même abscisse ($x=a$) et donc qu'ils appartiennent à la droite verticale d'équation $x=a$.

\begin{enumerate}
\item Un algorithme possible est le suivant :
\begin{algo}{}
\begin{algoentries}
Saisir a, b, c et d
\end{algoentries}
\begin{algobody}
\begin{algoif}{a $\neq$ c}
m prend la valeur (b-d)/(a-c)
p prend la valeur b-a*m
Afficher : "La droite a pour équation y = "
Afficher m
Afficher "x + "
Afficher p
\ifelse
Afficher : "La droite a pour équation x = "
Afficher a
\end{algoif}
\end{algobody}
\end{algo}

\newpage

\item Un algorithme Python possible est le suivant:

\begin{lstlisting}
a = float(input("Saisir l'abscisse de A :"))
b = float(input("Saisir l'ordonnée de A :"))
c = float(input("Saisir l'abscisse de B :"))
d = float(input("Saisir l'ordonnée de B :"))
if (a != c): # si a est différent de c alors on fait...
        m = (b-d)/(a-c)
        p = b - a*m
        if (m != 0): # si m n'est pas égale à zéro...
                if (p==0): # si l'ordonnée à l'origine est nulle...
                        print("f(x)=",m,"x") # ... on n'affiche pas p
                else: # ... sinon
                        if (p > 0): # si p est positif...
                                print("f(x)=",m,"x+",p)
                        else: #... sinon (si p est négatif) on n'affiche pas le signe "+" avant
                                print("f(x)=",m,"x",p)
        else: # cas d'un droite horizontale
                print("f(x)=",p)
else: # cas d'une droite verticale
        print("La droite a pour équation x=",a)
\end{lstlisting}

\paragraph*{Explications.}
\begin{itemize}
\item la commande \texttt{input} permet de saisir quelque chose au clavier;
\item la commande \texttt{float} permet de convertir ce que l'on a saisi en nombre réel.
\end{itemize}
\end{enumerate}