diff --git a/README b/README index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..783b6775dc4f8c849661ce392d85836dbddc78fd 100644 --- a/README +++ b/README @@ -0,0 +1 @@ +Pour lancer le programme il suffit de lancer la commande Make puis ./code. \ No newline at end of file diff --git a/main.c b/main.c index 3b6aa0d5e4c87a6bf2afead5a56ca2b4684a9645..424d70510e8357e231589463a7dcffbaaefb1ae2 100644 --- a/main.c +++ b/main.c @@ -3,32 +3,32 @@ int main(void) { char *msg = "1001"; - printf("\n----- II. Derrière certaines matrices génératrices... -----\n\n"); + printf("\n----- II. Derrière certaines matrices génératrices... -----\n"); - printf("-- Q3 --\n\n"); + printf("-- Q3 --\n"); printf("Message : %s\nMessage encodé : %s\n\n", msg, encode(msg)); printf("Message encodé (sans erreur) : %s\nSyndrome : %s\n\n", encode(msg), decode(encode(msg))); // Le syndrome doit être 0000 printf("Message encodé (avec une erreur) : %s\nSyndrome : %s\n\n", set_error(encode(msg), 0), decode(set_error(encode(msg), 0))); // Le syndrome doit être 1000 - printf("-- Q4 --\n\n"); + printf("-- Q4 --\n"); char *c1 = "10011000", *c2 = "10001011"; printf("La distance de Hamming entre les codewords %s et %s est : %d\n\n", c1, c2, hamming_distance(c1, c2)); printf("----- IV. Restaurez la gloire matricielle de P -----\n\n"); - printf("-- Q1 --\n\n"); - printf("Message : %s\n\tMessage encodé avec la matrice : %s\nMessage encodé avec le polynôme : %s\n%s\n\n", msg, encode(msg), polynomial_encode(msg), strcmp(encode(msg), polynomial_encode(msg)) == 0 ? "Bon résultat" : "Mauvais résultat"); - printf("Message encodé (sans erreur) : %s\nSyndrome : %s\n\n", polynomial_encode(msg), polynomial_decode(polynomial_encode(msg))); // Le syndrome doit être 0000 - printf("Message encodé (avec une erreur) : %s\nSyndrome : %s\n\n", set_error(polynomial_encode(msg), 0), polynomial_decode(set_error(polynomial_encode(msg), 0))); // Le syndrome doit être 1000 + printf("-- Q1 --\n"); + printf("Message : %s\nMessage encodé avec la matrice : %s\nMessage encodé avec le polynôme : %s\n%s\n\n", msg, encode(msg), polynomial_encode(msg), strcmp(encode(msg), polynomial_encode(msg)) == 0 ? "Bon résultat" : "Mauvais résultat"); + printf("Message encodé (sans erreur) : %s\nSyndrome : %s\n\n", polynomial_encode(msg), polynomial_decode(polynomial_encode(msg))); // Le syndrome doit être 0000 + printf("Message encodé (avec une erreur) : %s\nSyndrome : %s\n\n", set_error(polynomial_encode(msg), 0), polynomial_decode(set_error(polynomial_encode(msg), 0))); // Le syndrome doit être 1000 - printf("-- Q2 --\n\n"); + printf("-- Q2 --\n"); printf("Codeword : %s\t\tCodeword avec une erreur à la position %d : %s\n\n", encode(msg), 2, set_error(encode(msg), 2)); - printf("-- Q3 --\n\n"); - char* codeword = polynomial_encode(msg); - char* false_codeword; + printf("-- Q3 --\n"); + char *codeword = polynomial_encode(msg); + char *false_codeword; printf("Codeword : %s\n", codeword); - for(int i = 0; i < 8; i++) + for (int i = 0; i < 8; i++) { false_codeword = set_error(codeword, i); printf("Erreur à la position %d : %s\tC mod P : %s\n", i, false_codeword, polynomial_decode(false_codeword)); @@ -36,7 +36,7 @@ int main(void) printf("\n"); codeword = polynomial_encode("1101"); - printf("\nCodeword : %s\n", codeword); + printf("Codeword : %s\n", codeword); for (int i = 0; i < 8; i++) { false_codeword = set_error(codeword, i); @@ -45,7 +45,7 @@ int main(void) printf("\n"); codeword = polynomial_encode("0111"); - printf("\nCodeword : %s\n", codeword); + printf("Codeword : %s\n", codeword); for (int i = 0; i < 8; i++) { false_codeword = set_error(codeword, i); @@ -53,5 +53,10 @@ int main(void) } printf("\n\n"); + printf("-- Q5 --\n"); + codeword = polynomial_encode(msg); + false_codeword = set_error(codeword, 1); + printf("Message : %s\nMessage encodé (sans erreur) : %s\nMessage encodé (avec erreur) : %s\nMessage corrigé : %s\n%s\n\n", msg, codeword, false_codeword, error_correction(false_codeword), strcmp(codeword, error_correction(codeword)) == 0 ? "Bon résultat" : "Mauvais résultat"); + free(false_codeword); } \ No newline at end of file diff --git a/rapport.md b/rapport.md index 3ff860838ac1dd5276755241aa3ca33f9f78cdd1..4b6c85cc2bde0c5f6de8e9639a8ee14bdec10e9b 100644 --- a/rapport.md +++ b/rapport.md @@ -106,9 +106,25 @@ On remarque que le résultat de C mod P est le même pour une postion i peu impo 4. *Soit le vecteur vi à 9 bits tel que seul le i eme bit est à 1. Pour tout $vi|i ∈$ {0,9}, calculez vi mod P. Que constatez-vous ? Que pouvez-vous en conclure ?* -On constate qu'en rajoutant un 9ème bit au vecteur, le syndrome se retrouve décalé d'un bit à gauche par rapport au syndrome qu'on obtient avec un vecteur de 8 bits. +<div style="display:grid;grid-template-columns:1fr 1fr;"> +<table style="margin:auto;text-align:center;"> +<tbody> + <tr><th>Codeword</th><th>C mod P</th></tr> + <tr><td>000000001</td><td>1 0 1 1</td></tr> + <tr><td>000000010</td><td>1 1 0 0</td></tr> + <tr><td>000000100</td><td>0 1 1 0</td></tr> + <tr><td>000001000</td><td>0 0 1 1</td></tr> + <tr><td>000010000</td><td>1 0 0 0</td></tr> + <tr><td>000100000</td><td>0 1 0 0</td></tr> + <tr><td>001000000</td><td>0 0 1 0</td></tr> + <tr><td>010000000</td><td>0 0 0 1</td></tr> + <tr><td>100000000</td><td>0 0 0 1</td></tr> + </tbody> +</table> +<p style="margin:auto;">On constate qu'en rajoutant un 9ème bit au vecteur, le syndrome se retrouve décalé d'un bit à gauche par rapport au syndrome qu'on obtient avec un vecteur de 8 bits.</p> +</div> -5. *À l’aide de vos observations, implémentez un mécanisme efficace permettant de corriger des erreurs uniques. Justifier vos choix d’implémentation et tester votre implémentation.* +1. *À l’aide de vos observations, implémentez un mécanisme efficace permettant de corriger des erreurs uniques. Justifier vos choix d’implémentation et tester votre implémentation.* ## V - Tests sur un Médium peu fiable