01.06.2013 Views

Appel initial : Le premier appel de la fonction.

Appel initial : Le premier appel de la fonction.

Appel initial : Le premier appel de la fonction.

SHOW MORE
SHOW LESS

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;;

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!