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

rapport phase 2 terminé

parent d9a1dbbf
Aucune branche associée trouvée
Aucune étiquette associée trouvée
Aucune requête de fusion associée trouvée
\begin{Verbatim}[commandchars=\\\{\}] \begin{Verbatim}[commandchars=\\\{\}]
\PYG{k}{let} \PYG{n}{roue} \PYG{o}{=} \PYG{o}{[}\PYG{l+s+sc}{\PYGZsq{} \PYGZsq{}}\PYG{o}{;}\PYG{l+s+sc}{\PYGZsq{}A\PYGZsq{}}\PYG{o}{;}\PYG{l+s+sc}{\PYGZsq{}B\PYGZsq{}}\PYG{o}{;}\PYG{l+s+sc}{\PYGZsq{}C\PYGZsq{}}\PYG{o}{;}\PYG{l+s+sc}{\PYGZsq{}D\PYGZsq{}}\PYG{o}{;}\PYG{l+s+sc}{\PYGZsq{}E\PYGZsq{}}\PYG{o}{;}\PYG{l+s+sc}{\PYGZsq{}F\PYGZsq{}}\PYG{o}{;}\PYG{l+s+sc}{\PYGZsq{}G\PYGZsq{}}\PYG{o}{;}\PYG{l+s+sc}{\PYGZsq{}H\PYGZsq{}}\PYG{o}{;}\PYG{l+s+sc}{\PYGZsq{}I\PYGZsq{}}\PYG{o}{;}\PYG{l+s+sc}{\PYGZsq{}J\PYGZsq{}}\PYG{o}{;}\PYG{l+s+sc}{\PYGZsq{}K\PYGZsq{}}\PYG{o}{;}\PYG{l+s+sc}{\PYGZsq{}L\PYGZsq{}}\PYG{o}{;}\PYG{l+s+sc}{\PYGZsq{}M\PYGZsq{}}\PYG{o}{;}\PYG{l+s+sc}{\PYGZsq{}N\PYGZsq{}}\PYG{o}{;}\PYG{l+s+sc}{\PYGZsq{}O\PYGZsq{}}\PYG{o}{;}\PYG{l+s+sc}{\PYGZsq{}P\PYGZsq{}}\PYG{o}{;}\PYG{l+s+sc}{\PYGZsq{}Q\PYGZsq{}}\PYG{o}{;}\PYG{l+s+sc}{\PYGZsq{}R\PYGZsq{}}\PYG{o}{;} \PYG{k}{let} \PYG{n}{roue} \PYG{o}{=} \PYG{o}{[}\PYG{l+s+sc}{\PYGZsq{} \PYGZsq{}}\PYG{o}{;}\PYG{l+s+sc}{\PYGZsq{}A\PYGZsq{}}\PYG{o}{;}\PYG{l+s+sc}{\PYGZsq{}B\PYGZsq{}}\PYG{o}{;}\PYG{l+s+sc}{\PYGZsq{}C\PYGZsq{}}\PYG{o}{;}\PYG{l+s+sc}{\PYGZsq{}D\PYGZsq{}}\PYG{o}{;}\PYG{l+s+sc}{\PYGZsq{}E\PYGZsq{}}\PYG{o}{;}\PYG{l+s+sc}{\PYGZsq{}F\PYGZsq{}}\PYG{o}{;}\PYG{l+s+sc}{\PYGZsq{}G\PYGZsq{}}\PYG{o}{;}\PYG{l+s+sc}{\PYGZsq{}H\PYGZsq{}}\PYG{o}{;}\PYG{l+s+sc}{\PYGZsq{}I\PYGZsq{}}\PYG{o}{;}\PYG{l+s+sc}{\PYGZsq{}J\PYGZsq{}}\PYG{o}{;}\PYG{l+s+sc}{\PYGZsq{}K\PYGZsq{}}\PYG{o}{;}\PYG{l+s+sc}{\PYGZsq{}L\PYGZsq{}}\PYG{o}{;}
\PYG{l+s+sc}{\PYGZsq{}S\PYGZsq{}}\PYG{o}{;}\PYG{l+s+sc}{\PYGZsq{}T\PYGZsq{}}\PYG{o}{;}\PYG{l+s+sc}{\PYGZsq{}U\PYGZsq{}}\PYG{o}{;}\PYG{l+s+sc}{\PYGZsq{}V\PYGZsq{}}\PYG{o}{;}\PYG{l+s+sc}{\PYGZsq{}W\PYGZsq{}}\PYG{o}{;}\PYG{l+s+sc}{\PYGZsq{}X\PYGZsq{}}\PYG{o}{;}\PYG{l+s+sc}{\PYGZsq{}Y\PYGZsq{}}\PYG{o}{;}\PYG{l+s+sc}{\PYGZsq{}Z\PYGZsq{}}\PYG{o}{]} \PYG{l+s+sc}{\PYGZsq{}M\PYGZsq{}}\PYG{o}{;}\PYG{l+s+sc}{\PYGZsq{}N\PYGZsq{}}\PYG{o}{;}\PYG{l+s+sc}{\PYGZsq{}O\PYGZsq{}}\PYG{o}{;}\PYG{l+s+sc}{\PYGZsq{}P\PYGZsq{}}\PYG{o}{;}\PYG{l+s+sc}{\PYGZsq{}Q\PYGZsq{}}\PYG{o}{;}\PYG{l+s+sc}{\PYGZsq{}R\PYGZsq{}}\PYG{o}{;}\PYG{l+s+sc}{\PYGZsq{}S\PYGZsq{}}\PYG{o}{;}\PYG{l+s+sc}{\PYGZsq{}T\PYGZsq{}}\PYG{o}{;}\PYG{l+s+sc}{\PYGZsq{}U\PYGZsq{}}\PYG{o}{;}\PYG{l+s+sc}{\PYGZsq{}V\PYGZsq{}}\PYG{o}{;}\PYG{l+s+sc}{\PYGZsq{}W\PYGZsq{}}\PYG{o}{;}\PYG{l+s+sc}{\PYGZsq{}X\PYGZsq{}}\PYG{o}{;}\PYG{l+s+sc}{\PYGZsq{}Y\PYGZsq{}}\PYG{o}{;}\PYG{l+s+sc}{\PYGZsq{}Z\PYGZsq{}}\PYG{o}{]}
\end{Verbatim} \end{Verbatim}
Aucun aperçu pour ce type de fichier
...@@ -12,6 +12,7 @@ ...@@ -12,6 +12,7 @@
\usepackage{graphicx} \usepackage{graphicx}
\usepackage[a4paper]{geometry} \usepackage[a4paper]{geometry}
\usepackage{minted} \usepackage{minted}
\usepackage{listings}
\hypersetup{ \hypersetup{
colorlinks, colorlinks,
...@@ -56,15 +57,40 @@ la première ligne comportera un entier n donnant le nombre d'antennes disponibl ...@@ -56,15 +57,40 @@ la première ligne comportera un entier n donnant le nombre d'antennes disponibl
la deuxième ligne comportera le message lui-même.\\ 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.
\clearpage
\section{Architecture du projet}
\begin{lstlisting}
> ipf_s2/
| > doc/
| | rapport.pdf
| | rapport.tex
| > src/
| | main.ml
| | tests.ml
| [> bin/]
| | main.out
| | tests.out
| Makefile
| README.md
| (...)
\end{lstlisting}
\paragraph{} Les dossiers entre crochets \verb|[]| sont des dossiers créés par la compilation (partielle ou complète), les noms entre parenthèses \verb|()| sont là pour indiquer que des dossiers/fichiers ne sont pas précisés.
\section{Phase 1} \section{Phase 1}
\subsection{Objectifs}
Dans cette phase nous avons accès à une seule antenne, on analyse uniquement a seconde entrée standard.
\subsection{Fonctionnement général du script} \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}
let roue = [' ';'A';'B';'C';'D';'E';'F';'G';'H';'I';'J';'K';'L';'M';'N';'O';'P';'Q';'R'; let roue = [' ';'A';'B';'C';'D';'E';'F';'G';'H';'I';'J';'K';'L';
'S';'T';'U';'V';'W';'X';'Y';'Z'] 'M';'N';'O';'P';'Q';'R';'S';'T';'U';'V';'W';'X';'Y';'Z']
\end{minted} \end{minted}
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.\\
...@@ -84,8 +110,26 @@ La fonction \textbf{commande} agit par récurrence sur la liste de caractères l ...@@ -84,8 +110,26 @@ La fonction \textbf{commande} agit par récurrence sur la liste de caractères l
\section{Phase 2} \section{Phase 2}
\subsection{Objectifs}
Le changement de place d'une roue ('N' ou 'P') prennant 3 secondes et la sélection d'une antenne ('Sn' où n est le numéro de l'antenne à activer) prennant 1 seconde, l'objectif devient donc d'optimiser le temps de calcul pour l'envoi d'un message. (l'émission 'E' d'une commande à une antenne prend 5s)\\
La première entrée sera le nombre d'antennes disponibles et la seconde entrée restera le message à envoyer (en majuscule).\\
\subsection{Fonctionnement général du script} \subsection{Fonctionnement général du script}
J'introduit d'abord la fonction [\textbf{quelle\_roue} l c i] où l est la liste de roue actuelle, c le caractère à traduire et i l'indice de la roue sur laquelle on est à l'entrée de la fonction. Cette fonction choisi dans l la roue qui donne le plus petit nombre de cran à tourner pour avoir c peu importe le sens.\\
Une autre fonction à introduire est la fonction [\textbf{tourner\_list} c n i l] qui en utilisant \textbf{tourne} de la phase 1 tourne n fois la roue d'indice i dans le sens de c ('N' ou 'P') dans l.\\
Pour cette phase j'ai donc créé la fonction [\textbf{commande2} (n,m)] où n est le nombre d'antennes et m le message à traduire. Cette fonction crée une liste de n roues en phase initiale puis fait le calcul par la récurrence décrite ci-dessous : \\
\begin{itemize}
\item à la première itération, on choisi la roue à utiliser grâce à la fonction \textbf{quelle\_roue} on traduit le premier caractère de la liste en sa commande (une string) grâce à la fonction \textbf{translate} de la phase 1 puis tourne la roue choisie dans la liste de roues dans le bon sens et le bon nombre de cran avec la fonction \textbf{tourner\_list}.
\item à la $n^{ieme}$ iteration, le $n^{ieme}$ caractère est traduit en sa commande (en une string) de même que pour la première itération en utilisant la liste de roues obtenue après la $(n-1)^{ieme}$ itération puis envoie à l'itération suivant la liste de roues bien modifiée.
\end{itemize}
\section{Idées d'optimisation du code} \section{Idées d'optimisation du code}
......
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