Skip to content
Extraits de code Groupes Projets
Valider d9a1dbbf rédigé par Loïc Wikle DUBARD's avatar Loïc Wikle DUBARD
Parcourir les fichiers

rapport phase 1 fini

parent 56eb9ad5
Aucune branche associée trouvée
Aucune étiquette associée trouvée
Aucune requête de fusion associée trouvée
Aucun aperçu pour ce type de fichier
...@@ -10,7 +10,7 @@ ...@@ -10,7 +10,7 @@
\usepackage{hyperref} \usepackage{hyperref}
\usepackage{xcolor} \usepackage{xcolor}
\usepackage{graphicx} \usepackage{graphicx}
\usepackage[a4paper,left=1cm,right=1cm,top=2cm,bottom=2cm]{geometry} \usepackage[a4paper]{geometry}
\usepackage{minted} \usepackage{minted}
\hypersetup{ \hypersetup{
...@@ -57,7 +57,9 @@ la deuxième ligne comportera le message lui-même.\\ ...@@ -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. Le programme affichera donc une suite de commandes permettant d'émettre le message.
\section{Phase 1} \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) : Le principe est le suivant : je défini la roue comme une liste des caractères (en majuscule) :
\begin{minted}{ocaml} \begin{minted}{ocaml}
...@@ -67,21 +69,25 @@ Le principe est le suivant : je défini la roue comme une liste des caractères ...@@ -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.\\ 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} \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 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 \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} \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} \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. \\ 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. \\
......
...@@ -8,6 +8,7 @@ open Main;; ...@@ -8,6 +8,7 @@ open Main;;
(*Résultat de la phase 1*) (*Résultat de la phase 1*)
Printf.printf "------Résultats de la phase 1------\n";;
let input=parse_input();; let input=parse_input();;
let com = commande input roue;; let com = commande input roue;;
print_string (com);; print_string (com);;
...@@ -17,6 +18,7 @@ Printf.printf "\n %d s\n" (temps_commande com);; ...@@ -17,6 +18,7 @@ Printf.printf "\n %d s\n" (temps_commande com);;
(*@ensure : test commande_phase 2*) (*@ensure : test commande_phase 2*)
Printf.printf "------Résultats de la phase 2------\n";;
let com2 = commande2 input;; let com2 = commande2 input;;
print_string com2;; print_string com2;;
Printf.printf "\n %d s \n" (temps_commande com2);; Printf.printf "\n %d s \n" (temps_commande com2);;
0% Chargement en cours ou .
You are about to add 0 people to the discussion. Proceed with caution.
Terminez d'abord l'édition de ce message.
Veuillez vous inscrire ou vous pour commenter