diff --git a/doc/rapport.pdf b/doc/rapport.pdf index 87876f5607dbd3d0678eed14eef6c58d8bd20c60..1169fd5938da9bd3196f4557da6070ad2e5c8e36 100644 Binary files a/doc/rapport.pdf and b/doc/rapport.pdf differ diff --git a/doc/rapport.tex b/doc/rapport.tex index 7e33c317ed1cbab6182bd5be32638e711d176995..6f210e047bef8069659d98417ed954913481c32a 100644 --- a/doc/rapport.tex +++ b/doc/rapport.tex @@ -10,7 +10,7 @@ \usepackage{hyperref} \usepackage{xcolor} \usepackage{graphicx} -\usepackage[a4paper,left=1cm,right=1cm,top=2cm,bottom=2cm]{geometry} +\usepackage[a4paper]{geometry} \usepackage{minted} \hypersetup{ @@ -57,7 +57,9 @@ la deuxième ligne comportera le message lui-même.\\ Le programme affichera donc une suite de commandes permettant d'émettre le message. \section{Phase 1} -\subsection{Démarche générale} + +\subsection{Fonctionnement général du script} + Le principe est le suivant : je défini la roue comme une liste des caractères (en majuscule) : \begin{minted}{ocaml} @@ -67,21 +69,25 @@ Le principe est le suivant : je défini la roue comme une liste des caractères Puis, je demande à l'utilisateur le message à traduire grâce aux fonctions [parse\_input ()] et [split\_string s] fournies par le professeur.\\ -Le couple (n:int,l:char list) ainsi obtenu est passé dans la fonction [commande (n,l) roue].\\ +Le couple (n:int,l:char list) ainsi obtenu est passé dans la fonction [\textbf{commande} (n,l) roue].\\ -On introduit alors la fonction [translate c roue] qui se charge de renvoyer la commande correspondant à l'envoi de la lettre c:char, sous forme de string. (Il suffit pour cela de récupérer l'indice (noté i) du caractère c dans roue et de renvoyer i fois 'N' si i<14 sinon 27-i fois 'P').\\ +On introduit alors la fonction [\textbf{translate} c roue] qui se charge de renvoyer la commande correspondant à l'envoi de la lettre c:char, sous forme de string et le nombre de déplacement de la roue à faire. (Il suffit pour cela de récupérer l'indice (noté i) du caractère c dans roue et de renvoyer i fois 'N' si i<14 sinon 27-i fois 'P').\\ -On introduit aussi la fonction [tourner c n roue] +On introduit aussi la fonction [\textbf{tourner} c n roue] dont le but est de retourner le nouvel état de la roue en tournant n fois (par récurrence) vers la gauche si c='N' et vers la droite si c='P'. \\ -Cette nouvelle fonction agit par récurrence sur la liste de caractères l de cette manière :\\ +La fonction \textbf{commande} agit par récurrence sur la liste de caractères l de cette manière :\\ \begin{itemize} - \item à la première itération, on traduit le premier caractère de la liste en sa commande (une string) grâce à la fonction translate qui renvoie un couple () - \item à la $n^ieme$ iteration, le $n^ieme$ caractère est traduit en sa commande (en une string) en utilisant la roue + \item à la première itération, on traduit le premier caractère de la liste en sa commande (une string) grâce à la fonction \textbf{translate} puis tourne la roue dans le bon sens et le bon nombre de cran avec la fonction \textbf{tourner}. + \item à la $n^{ieme}$ iteration, le $n^{ieme}$ caractère est traduit en sa commande (en une string) en utilisant la roue obtenue après la $(n-1)^{ieme}$ itération puis tourne la roue de même que à la première itération. \end{itemize} -\section{Fonctionnement général du script} -\section{Tests} + +\section{Phase 2} +\subsection{Fonctionnement général du script} + + + \section{Idées d'optimisation du code} Au lieu de choisir la roue à utiliser lettre après lettre, on peut tracer un arbre n-aire (où n est le nombre de roues) et trouver le chemin le plus court pour la phrase a traduire. On optimiserai le temps d'execution du programme non pas lettre par lettre mais pour toute la phrase. \\ diff --git a/src/user.ml b/src/user.ml index c59d7cf97b588f44d022c83a1ab8868cdfb55d81..5d2480f89aa60bf4317323f55c7b6ceda89f9424 100644 --- a/src/user.ml +++ b/src/user.ml @@ -8,6 +8,7 @@ open Main;; (*Résultat de la phase 1*) +Printf.printf "------Résultats de la phase 1------\n";; let input=parse_input();; let com = commande input roue;; print_string (com);; @@ -17,6 +18,7 @@ Printf.printf "\n %d s\n" (temps_commande com);; (*@ensure : test commande_phase 2*) +Printf.printf "------Résultats de la phase 2------\n";; let com2 = commande2 input;; print_string com2;; Printf.printf "\n %d s \n" (temps_commande com2);;