Appel initial : Le premier appel de la fonction.
Appel initial : Le premier appel de la fonction.
Appel initial : Le premier appel de la fonction.
You also want an ePaper? Increase the reach of your titles
YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.
5°/ Ecrire une <strong>fonction</strong> qui, à partir d'une liste, permet <strong>de</strong> créer une nouvelle liste comportant<br />
le même nombre d'éléments, dont le <strong>premier</strong> élément est égal à <strong>la</strong> moyenne <strong>de</strong>s <strong>de</strong>ux <strong>premier</strong>s<br />
termes <strong>de</strong> <strong>la</strong> liste, le <strong>de</strong>rnier est égal à <strong>la</strong> moyenne <strong>de</strong>s <strong>de</strong>ux <strong>de</strong>rniers termes <strong>de</strong> <strong>la</strong> liste et dont<br />
les autres sont égaux à <strong>la</strong> moyenne <strong>de</strong> trois termes, <strong>la</strong> valeur <strong>de</strong> l’élément au rang j <strong>de</strong> <strong>la</strong> liste<br />
et les valeurs <strong>de</strong>s termes immédiatement avant et après dans <strong>la</strong> liste (j-1 et j+1). On affichera<br />
les nouvelles valeurs contenues dans <strong>la</strong> liste ainsi construite. <strong>Le</strong>s moyennes se calculent à<br />
partir <strong>de</strong>s valeurs <strong>de</strong> <strong>la</strong> liste <strong>initial</strong>es. On admet que <strong>la</strong> longueur <strong>de</strong> <strong>la</strong> liste en argument est<br />
supérieure ou égale à 2.<br />
On pourra construire <strong>de</strong>s listes auxiliaires pour simplifier les calculs.<br />
let rec lisse liste =<br />
let rec calcul liste =<br />
match liste with<br />
|h1::h2::[] -> [(h1+h2)/2]<br />
|h1::h2::h3::t -> ((h1+h2+h3)/3)::calcul (h2::h3::t)<br />
|_ -> failwith "cas impossible"<br />
in<br />
match liste with<br />
|[] -> []<br />
|h::[] -> [h]<br />
|h1::h2::[] -> [(h1+h2)/2;(h1+h2)/2]<br />
|h1::h2::h3::t -> ((h1+h2)/2)::calcul liste;;<br />
let lisse liste =<br />
let rec calcul accumu<strong>la</strong>teur liste =<br />
match liste with<br />
|h1::h2::[] -> accumu<strong>la</strong>teur@[(h1+h2)/2]<br />
|h1::h2::h3::t -> calcul (accumu<strong>la</strong>teur@[(h1+h2+h3)/3]) (h2::h3::t)<br />
in<br />
match liste with<br />
|[] -> []<br />
|h::[] -> [h]<br />
|h1::h2::[] -> [(h1+h2)/2;(h1+h2)/2]<br />
|h1::h2::t -> calcul [(h1+h2)/2] liste;;<br />
let rec lissage_stable liste =<br />
let nouvelle_liste = lisse liste in<br />
if nouvelle_liste = liste then liste<br />
else lissage_stable nouvelle_liste;;