diff --git a/bin/main.out b/bin/main.out index d3b447c6b1ffa2f84087cea4ba4064b50a1c1398..913439f0d04ae68cb6fce66b82fb9a3ca8564ce1 100755 Binary files a/bin/main.out and b/bin/main.out differ diff --git a/doc/rapport.pdf b/doc/rapport.pdf index 3cba27404a659e213906a52617aab1e1545ab82d..8e8e19c28d751a801105944ae1e60b2a9266cf6e 100644 Binary files a/doc/rapport.pdf and b/doc/rapport.pdf differ diff --git a/doc/rapport.tex b/doc/rapport.tex index 4e6c3b072c1e7f90259350395de5ed682da064ba..24cd197fa5608159a0f452e3cb954be7e8c61739 100644 --- a/doc/rapport.tex +++ b/doc/rapport.tex @@ -21,16 +21,14 @@ urlcolor={blue!80!black} } \author{Loïc DUBARD} -\title{Rapport du projet de programmation Impérative: Stackchess} +\title{Rapport du projet de programmation fonctionnelle : \\ +\textbf{DERNIÈRES NOUVELLES : LES EXTRA-TERRESTRES EXISTENT}} \begin{document} \maketitle \tableofcontents \clearpage \section*{Introduction} -\begin{center} - \textbf{DERNIÈRES NOUVELLES : LES EXTRA-TERRESTRES EXISTENT} -\end{center} Le but de ce projet est d'implanter un protocole de communication avec les habitants des mondes lointains.\\ @@ -69,6 +67,7 @@ Le programme affichera donc une suite de commandes permettant d'émettre le mess | > src/ | | main.ml | | tests.ml +| | user.ml | [> bin/] | | main.out | | tests.out @@ -104,7 +103,7 @@ On introduit aussi la fonction [\textbf{tourner} c n roue] dont le but est de 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 \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. + \item à la $n^{ieme}$ itération, 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} @@ -134,8 +133,8 @@ Pour cette phase j'ai donc créé la fonction [\textbf{commande2} (n,m)] où n e \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'exécution du programme non pas lettre par lettre mais pour toute la phrase. \\ -Cependant, cette manière de calculer le programme à envoyer aux antennes me semble très couteuse en temps et en mémoire. C'est pour cela que j'ai choisi de ne pas l'implémenter. +Cependant, cette manière de calculer le programme à envoyer aux antennes me semble très coûteuse en temps et en mémoire. C'est pour cela que j'ai choisi de ne pas l'implémenter. \end{document} diff --git a/src/.main.ml.swp b/src/.main.ml.swp new file mode 100644 index 0000000000000000000000000000000000000000..c009b3db6b016b66dc3426586b056e5266320297 Binary files /dev/null and b/src/.main.ml.swp differ diff --git a/src/.tests.ml.swp b/src/.tests.ml.swp new file mode 100644 index 0000000000000000000000000000000000000000..01958b360a204e56c8820bc68704b55951b4dcad Binary files /dev/null and b/src/.tests.ml.swp differ diff --git a/src/main.cmi b/src/main.cmi index c8d94691df1e977bf6db811f68b7705455d67f26..88e42b934ceb305123c8847bbf5445a2928f4ea7 100644 Binary files a/src/main.cmi and b/src/main.cmi differ diff --git a/src/main.cmx b/src/main.cmx index b7761fc298c37ba715858de4b32ae8a598ac9b79..a42d1c651113975f6821638f1bef8e4218654256 100644 Binary files a/src/main.cmx and b/src/main.cmx differ diff --git a/src/main.ml b/src/main.ml index 163b7f9fc180009507b99f1db1bd742a963d7eca..4a762df4bc6cf8bb3a1d1dcc6c8ddde1ce08daba 100644 --- a/src/main.ml +++ b/src/main.ml @@ -25,7 +25,7 @@ let parse_input () = print_string "Entrez le nombre d'antennes à utiliser >"; let nb_antennas = int_of_string (read_line ()) in print_string "Entrez le texte à traduire en programme (tout en majuscule et pas de ponctuation !) >"; - let phrase = read_line () in + let phrase = String.uppercase_ascii (read_line ()) in nb_antennas,split_string phrase;; (*let print_elt n (i,l) = print_char (List.nth l n);; @@ -150,7 +150,9 @@ let rec initialize_list n a = if n = 1 then [a] else if n = 0 then [] else a::(i (* * @ensure : traduit le message l en commande en selectionnant pour chaque lettre la bonne antenne *) -let commande2 (n,m) = +let commande2 (nb,m) = + let n= (if nb>(List.length m) then List.length m else nb) +in let rec commande_phase2 l liste_roues index_init = match l with | [] -> "" | e::t -> let index = quelle_roue liste_roues e index_init in diff --git a/src/main.o b/src/main.o index 9e4354d48b598e3877a309e5cf296d8ac9dd121b..b8f3410df97aea6c8cbc59a32fc87345115a8e7a 100644 Binary files a/src/main.o and b/src/main.o differ diff --git a/src/tests.ml b/src/tests.ml index 1e18efefb2cefca495b5f5a4864a4d5020bf7073..607e622393442b14f2b8b0cd6daa7647b1b4e303 100644 --- a/src/tests.ml +++ b/src/tests.ml @@ -8,11 +8,75 @@ open Main;; open Printf;; -printf "------DEBUT DES TESTS------\n";; +exception InvalidTest;; +printf "======DEBUT DES TESTS======\n";; +printf "------Tests de la phase 1------\n";; (* Test de tourner c n roue *) +printf " Fonction [tourner c n roue]\n";; +printf "Test tourner une roue vide.....";; +try( let _ = tourner 'N' 3 [] in () ) +with +| RoueVide -> printf "fait\n" +| _ -> raise InvalidTest +;; + +let list_test_roues=[ + [' ';'A';'B';'C';'D';'E';'F';'G';'H';'I';'J';'K';'L';'M';'N';'O';'P';'Q';'R';'S';'T';'U';'V';'W';'X';'Y';'Z']; + ['A';'B';'C';'D';'E';'F';'G';'H';'I';'J';'K';'L';'M';'N';'O';'P';'Q';'R';'S';'T';'U';'V';'W';'X';'Y';'Z';' ']; + ['B';'C';'D';'E';'F';'G';'H';'I';'J';'K';'L';'M';'N';'O';'P';'Q';'R';'S';'T';'U';'V';'W';'X';'Y';'Z';' ';'A']; + ['C';'D';'E';'F';'G';'H';'I';'J';'K';'L';'M';'N';'O';'P';'Q';'R';'S';'T';'U';'V';'W';'X';'Y';'Z';' ';'A';'B']; + ['D';'E';'F';'G';'H';'I';'J';'K';'L';'M';'N';'O';'P';'Q';'R';'S';'T';'U';'V';'W';'X';'Y';'Z';' ';'A';'B';'C']; + ['E';'F';'G';'H';'I';'J';'K';'L';'M';'N';'O';'P';'Q';'R';'S';'T';'U';'V';'W';'X';'Y';'Z';' ';'A';'B';'C';'D']; + ['F';'G';'H';'I';'J';'K';'L';'M';'N';'O';'P';'Q';'R';'S';'T';'U';'V';'W';'X';'Y';'Z';' ';'A';'B';'C';'D';'E']; + ['G';'H';'I';'J';'K';'L';'M';'N';'O';'P';'Q';'R';'S';'T';'U';'V';'W';'X';'Y';'Z';' ';'A';'B';'C';'D';'E';'F']; + ['H';'I';'J';'K';'L';'M';'N';'O';'P';'Q';'R';'S';'T';'U';'V';'W';'X';'Y';'Z';' ';'A';'B';'C';'D';'E';'F';'G']; + ['I';'J';'K';'L';'M';'N';'O';'P';'Q';'R';'S';'T';'U';'V';'W';'X';'Y';'Z';' ';'A';'B';'C';'D';'E';'F';'G';'H']; + ['J';'K';'L';'M';'N';'O';'P';'Q';'R';'S';'T';'U';'V';'W';'X';'Y';'Z';' ';'A';'B';'C';'D';'E';'F';'G';'H';'I']; + ['K';'L';'M';'N';'O';'P';'Q';'R';'S';'T';'U';'V';'W';'X';'Y';'Z';' ';'A';'B';'C';'D';'E';'F';'G';'H';'I';'J']; + ['L';'M';'N';'O';'P';'Q';'R';'S';'T';'U';'V';'W';'X';'Y';'Z';' ';'A';'B';'C';'D';'E';'F';'G';'H';'I';'J';'K']; + ['M';'N';'O';'P';'Q';'R';'S';'T';'U';'V';'W';'X';'Y';'Z';' ';'A';'B';'C';'D';'E';'F';'G';'H';'I';'J';'K';'L']; + ['N';'O';'P';'Q';'R';'S';'T';'U';'V';'W';'X';'Y';'Z';' ';'A';'B';'C';'D';'E';'F';'G';'H';'I';'J';'K';'L';'M']; + ['O';'P';'Q';'R';'S';'T';'U';'V';'W';'X';'Y';'Z';' ';'A';'B';'C';'D';'E';'F';'G';'H';'I';'J';'K';'L';'M';'N']; + ['P';'Q';'R';'S';'T';'U';'V';'W';'X';'Y';'Z';' ';'A';'B';'C';'D';'E';'F';'G';'H';'I';'J';'K';'L';'M';'N';'O']; + ['Q';'R';'S';'T';'U';'V';'W';'X';'Y';'Z';' ';'A';'B';'C';'D';'E';'F';'G';'H';'I';'J';'K';'L';'M';'N';'O';'P']; + ['R';'S';'T';'U';'V';'W';'X';'Y';'Z';' ';'A';'B';'C';'D';'E';'F';'G';'H';'I';'J';'K';'L';'M';'N';'O';'P';'Q']; + ['S';'T';'U';'V';'W';'X';'Y';'Z';' ';'A';'B';'C';'D';'E';'F';'G';'H';'I';'J';'K';'L';'M';'N';'O';'P';'Q';'R']; + ['T';'U';'V';'W';'X';'Y';'Z';' ';'A';'B';'C';'D';'E';'F';'G';'H';'I';'J';'K';'L';'M';'N';'O';'P';'Q';'R';'S']; + ['U';'V';'W';'X';'Y';'Z';' ';'A';'B';'C';'D';'E';'F';'G';'H';'I';'J';'K';'L';'M';'N';'O';'P';'Q';'R';'S';'T']; + ['V';'W';'X';'Y';'Z';' ';'A';'B';'C';'D';'E';'F';'G';'H';'I';'J';'K';'L';'M';'N';'O';'P';'Q';'R';'S';'T';'U']; + ['W';'X';'Y';'Z';' ';'A';'B';'C';'D';'E';'F';'G';'H';'I';'J';'K';'L';'M';'N';'O';'P';'Q';'R';'S';'T';'U';'V']; + ['X';'Y';'Z';' ';'A';'B';'C';'D';'E';'F';'G';'H';'I';'J';'K';'L';'M';'N';'O';'P';'Q';'R';'S';'T';'U';'V';'W']; + ['Y';'Z';' ';'A';'B';'C';'D';'E';'F';'G';'H';'I';'J';'K';'L';'M';'N';'O';'P';'Q';'R';'S';'T';'U';'V';'W';'X']; + ['Z';' ';'A';'B';'C';'D';'E';'F';'G';'H';'I';'J';'K';'L';'M';'N';'O';'P';'Q';'R';'S';'T';'U';'V';'W';'X';'Y']; + [' ';'A';'B';'C';'D';'E';'F';'G';'H';'I';'J';'K';'L';'M';'N';'O';'P';'Q';'R';'S';'T';'U';'V';'W';'X';'Y';'Z']; + ];; +let rec test_tourner_1 n = + if n>0 then ( + printf "Tourner %d fois dans le sens de 'N'....." (27-n); + if ((tourner 'N' (27-n) roue) = (List.nth list_test_roues (27-n))) + then ((printf "fait\n") ; (test_tourner_1 (n-1))) + else (raise InvalidTest) + ) + else (printf "\n");; + +test_tourner_1 27;; + +let rec test_tourner_2 n = + if n>0 then ( + printf "Tourner %d fois dans le sens de 'P'....." (27-n); + if ((tourner 'P' (27-n) roue) = (List.nth list_test_roues (n))) + then ((printf "fait\n") ; (test_tourner_2 (n-1))) + else (raise InvalidTest) + ) + else (printf "\n");; + +test_tourner_2 27;; (*Test de translate c roue*) +printf " Fonction [translate c roue]\n";; + + (*Test de char_to_index i c roue *) @@ -32,4 +96,4 @@ printf "------DEBUT DES TESTS------\n";; (*test commande2 (n,m) *) -printf "------FIN DES TESTS------\n";; +printf "======FIN DES TESTS=======\n";; diff --git a/src/user.ml b/src/user.ml index 5d2480f89aa60bf4317323f55c7b6ceda89f9424..ea515e169673fc7265be6b6210939d8833e8eebb 100644 --- a/src/user.ml +++ b/src/user.ml @@ -7,9 +7,9 @@ open Main;; +let input=parse_input();; (*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);;