From 51acd05767c8aec4012a63367dcd4cd5b6db2bb1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lo=C3=AFc=20Wikle=20Dubard?= <loic.dubard@ensiie.fr> Date: Tue, 12 Mar 2019 17:09:29 +0100 Subject: [PATCH] reformulation des commentaires --- src/main.ml | 59 ++++++++++++++++++++++++++++++++++++----------------- 1 file changed, 40 insertions(+), 19 deletions(-) diff --git a/src/main.ml b/src/main.ml index 94d35d4..db6e005 100644 --- a/src/main.ml +++ b/src/main.ml @@ -5,7 +5,9 @@ * date : 03-03-2019 * *) -(* [split_string s] retourne la liste de caracteres correspondant à la chaine [s] *) +(* + * @ensure : retourne la liste de caracteres correspondant à la chaine [s] + *) let split_string s = let rec aux i n = if i >= n @@ -14,11 +16,9 @@ let split_string s = in aux 0 (String.length s);; -(* [parse_input ()] lit deux lignes sur l'entree standard du programme. - La premiere doit comporter un entier, la seconde une chaine de caracteres. - Retourne un couple composé de l'entier de la premiere ligne et de la liste des caracteres de la seconde. - - Leve l'exception [Failure "int_of_string"] si la premiere ligne ne represente pas un entier. +(* @ensure : lit deux lignes sur l'entree standard du programme et Retourne un couple composé de l'entier de la premiere ligne et de la liste des caracteres de la seconde. + * @require : La premiere doit comporter un entier, la seconde une chaine de caracteres. + * @exception : Leve l'exception [Failure "int_of_string"] si la premiere ligne ne represente pas un entier. *) let parse_input () = @@ -33,7 +33,10 @@ print_elt 1 (parse_input());;*) (*définition de la roue*) let roue = ' '::'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'::[];; -(*[first_to_last c n roue] tourne la roue n fois vers la gauche si c='N' et vers la droite si c='P'*) +(* + * @ensure : tourne la roue n fois vers la gauche si c='N' et vers la droite si c='P' + * @exception : renvoie l'exception RoueVide si la roue en entree est vide. + *) exception RoueVide;; let rec tourner c n roue = if n = 0 then roue @@ -43,8 +46,11 @@ let rec tourner c n roue = else if c='P' then List.rev (tourner 'N' n (List.rev roue)) else roue;; -(*[char_to_index i a r] cherche récursivement l'indice du charactère a dans la roue r - * i doit être 0 pour que ça marche*) +(* + * @ensure : cherche récursivement l'indice du charactère a dans la roue r + * @require : i doit être 0 au premier appel de la fonction pour que ça marche + * @exception : leve l'exception BadCharacter si le charactère n'a pas été trouvé dans la roue + *) exception BadCharacter;; let rec char_to_index i a r= match r with @@ -52,14 +58,17 @@ let rec char_to_index i a r= | e::l -> if a = e then i else char_to_index (i+1) a l;; -(*[translate c roue] traduit le charactère c en sa commande en fonction de la roue 'roue' - * la limite d'optimalité pour choisir entre P et N est le charactère 'M' qui demande 13N et 14P*) +(* @ensure : traduit le charactère c en sa commande en fonction de la roue 'roue' + * la limite d'optimalité pour choisir entre P et N est le charactère 'M' qui demande 13N et 14P + *) let translate c roue = let n = char_to_index 0 c roue in if (n < 14) then String.concat "" ((String.make n 'N')::"E"::[]),n else String.concat "" ((String.make (27-n) 'P')::"E"::[]),(27-n);; -(*[commande (i,l) roue] prend le résultat de l'input et renvoie la commande complète associée'*) +(* + * @ensure : prend le résultat de l'input et renvoie la commande complète associée + *) exception InputVide;; let rec commande (i,l) roue = match l with | [] -> "" @@ -73,14 +82,18 @@ print_string (com);; (************************************************************Début de la phase 2************************************************************) -(*[temps_lettre l] retourne le temps necessaire pour l'emission de la commmande partielle l*) +(* + * @ensure : retourne le temps necessaire pour l'emission de la commmande partielle l + *) let temps_lettre l = if (l='N' || l='P') then 3 else if l='S' then 1 else if l='E' then 5 else 0;; -(*[temps_commande s] retourne le temps necessaire à l'emission de la commande complète s*) +(* + * @ensure : retourne le temps necessaire à l'emission de la commande complète s + *) let temps_commande s = let liste_char = split_string s in let rec tps l = match l with @@ -95,13 +108,17 @@ Printf.printf "\n %d s\n" (temps_commande com);; let liste_roues=roue::[] -(*[make_liste_index l c] renvoie la liste des indices où se trouve le charactère c dans chaque roue de l*) +(* + * @ensure : renvoie la liste des indices où se trouve le charactère c dans chaque roue de l + *) let rec make_liste_index l c = match l with | [] -> [] | e::r -> (char_to_index 0 c e)::(make_liste_index r c);; -(*[quelle_roue l c] renvoi l'indice de la roue (dans la liste de roues l) avec laquelle il est plus rapide de traduire c*) +(* + * @ensure : renvoi l'indice de la roue (dans la liste de roues l) avec laquelle il est plus rapide de traduire c + *) let quelle_roue l c index_init = let index = (char_to_index 0 c roue) in let m = (if index < 14 then index else 27-index) in @@ -117,7 +134,9 @@ let quelle_roue l c index_init = index_min m (List.length l) 0 (make_liste_index l c);; -(*[tourner_list m c n i l] tourne n fois dans le sens de c la roue d'indice i dans la liste de roues l*) +(* + * @ensure : tourne n fois dans le sens de c la roue d'indice i dans la liste de roues l + *) let rec tourner_list c n i l = if i >= (List.length l) then List.append l (roue::[]) else match l with @@ -125,7 +144,9 @@ let rec tourner_list c n i l = | e::t -> if i = 0 then (List.append ((tourner c n e)::[]) t) else (List.append (e::[]) (tourner_list c n (i-1) t));; -(*[commande_phase2 (i,l) roue] traduit le message l en commande en selectionnant pour chaque lettre la bonne antenne*) +(* + * @ensure : traduit le message l en commande en selectionnant pour chaque lettre la bonne antenne + *) let rec commande_phase2 (i,l) liste_roues index_init = match l with | [] -> "" | e::t -> let index = quelle_roue liste_roues e index_init in @@ -136,7 +157,7 @@ let rec commande_phase2 (i,l) liste_roues index_init = match l with Printf.printf "%d\n" index; String.concat "" (sres::(commande_phase2 (i,t) new_liste index)::[]);; -(*test commande_phase2*) +(*@ensure : test commande_phase 2*) let com2 = commande_phase2 input liste_roues 0;; print_string com2;; Printf.printf "\n %d s \n" (temps_commande com2);; -- GitLab