// fltk 7Fl_Tile 44 -2357 714 31 [ // fltk N4xcas23Comment_Multiline_InputE 44 -2357 714 30 Definition du corps fini a 256 elements, a son generateur et zero son neutre , // fltk N4xcas10Log_OutputE 44 -2327 714 1 ] , // fltk 7Fl_Tile 44 -2324 714 78 [ // fltk N4xcas19Multiline_Input_tabE 44 -2324 714 34 G:=GF(2,8); , // fltk N4xcas10Log_OutputE 44 -2290 714 1 , // fltk N4xcas8EquationE 44 -2289 714 43 GF(2,x^8-x^6-x^4-x^3-x^2-x-1,x,undef) ] , // fltk 7Fl_Tile 44 -2244 714 71 [ // fltk N4xcas19Multiline_Input_tabE 44 -2244 714 27 a:=G(x); , // fltk N4xcas10Log_OutputE 44 -2217 714 1 , // fltk N4xcas8EquationE 44 -2216 714 43 GF(2,x^8-x^6-x^4-x^3-x^2-x-1,x,x) ] , // fltk 7Fl_Tile 44 -2171 714 73 [ // fltk N4xcas19Multiline_Input_tabE 44 -2171 714 29 zero:=G(0); , // fltk N4xcas10Log_OutputE 44 -2142 714 1 , // fltk N4xcas8EquationE 44 -2141 714 43 GF(2,x^8-x^6-x^4-x^3-x^2-x-1,x,0) ] , // fltk 7Fl_Tile 44 -2096 714 31 [ // fltk N4xcas23Comment_Multiline_InputE 44 -2096 714 30 Les elements du corps fini sont les f(k) pour k variant de 0 a 255 , // fltk N4xcas10Log_OutputE 44 -2066 714 1 ] , // fltk 7Fl_Tile 44 -2063 714 136 [ // fltk N4xcas19Multiline_Input_tabE 44 -2063 714 29 f(k):=ifte(k==0,zero,a^k); , // fltk N4xcas10Log_OutputE 44 -2034 714 64 // Parsing f£// Warning: zero a declared as global variable(s) compiling f££ , // fltk N4xcas8EquationE 44 -1970 714 43 (k)->expr("if (k==0) zero; else a^k; ",0) ] , // fltk 7Fl_Tile 44 -1925 714 31 [ // fltk N4xcas23Comment_Multiline_InputE 44 -1925 714 30 On se fixe ici le nombre maximal d'erreurs que l'on peut corriger , // fltk N4xcas10Log_OutputE 44 -1895 714 1 ] , // fltk 7Fl_Tile 44 -1892 714 72 [ // fltk N4xcas19Multiline_Input_tabE 44 -1892 714 28 t:=2; , // fltk N4xcas10Log_OutputE 44 -1864 714 1 , // fltk N4xcas8EquationE 44 -1863 714 43 2 ] , // fltk 7Fl_Tile 44 -1818 714 31 [ // fltk N4xcas23Comment_Multiline_InputE 44 -1818 714 30 Polynome generateur du code , // fltk N4xcas10Log_OutputE 44 -1788 714 1 ] , // fltk 7Fl_Tile 44 -1785 714 77 [ // fltk N4xcas19Multiline_Input_tabE 44 -1785 714 33 g:=product(poly1[1,-a^k],k=(1 .. (2*t))); , // fltk N4xcas10Log_OutputE 44 -1752 714 1 , // fltk N4xcas8EquationE 44 -1751 714 43 poly1[1,GF(2,x^8-x^6-x^4-x^3-x^2-x-1,x,x^4+x^3+x^2+x),GF(2,x^8-x^6-x^4-x^3-x^2-x-1,x,x^7+x^6+x^4+x^3),GF(2,x^8-x^6-x^4-x^3-x^2-x-1,x,x^5+1),GF(2,x^8-x^6-x^4-x^3-x^2-x-1,x,x^5+x+1)] ] , // fltk 7Fl_Tile 44 -1706 714 31 [ // fltk N4xcas23Comment_Multiline_InputE 44 -1706 714 30 Message a coder [1,5,2,1] represente par le polynome correspondant par f , // fltk N4xcas10Log_OutputE 44 -1676 714 1 ] , // fltk 7Fl_Tile 44 -1673 714 76 [ // fltk N4xcas19Multiline_Input_tabE 44 -1673 714 32 l:=map(poly1[1,5,2,1],f); , // fltk N4xcas10Log_OutputE 44 -1641 714 1 , // fltk N4xcas8EquationE 44 -1640 714 43 [GF(2,x^8-x^6-x^4-x^3-x^2-x-1,x,x),GF(2,x^8-x^6-x^4-x^3-x^2-x-1,x,x^5),GF(2,x^8-x^6-x^4-x^3-x^2-x-1,x,x^2),GF(2,x^8-x^6-x^4-x^3-x^2-x-1,x,x)] ] , // fltk 7Fl_Tile 44 -1595 714 31 [ // fltk N4xcas23Comment_Multiline_InputE 44 -1595 714 30 On ajoute en fin de message 2*t zeros , // fltk N4xcas10Log_OutputE 44 -1565 714 1 ] , // fltk 7Fl_Tile 44 -1562 714 78 [ // fltk N4xcas19Multiline_Input_tabE 44 -1562 714 34 l1:=poly1[op(l),seq(zero,2*t)]; , // fltk N4xcas10Log_OutputE 44 -1528 714 1 , // fltk N4xcas8EquationE 44 -1527 714 43 poly1[GF(2,x^8-x^6-x^4-x^3-x^2-x-1,x,x),GF(2,x^8-x^6-x^4-x^3-x^2-x-1,x,x^5),GF(2,x^8-x^6-x^4-x^3-x^2-x-1,x,x^2),GF(2,x^8-x^6-x^4-x^3-x^2-x-1,x,x),GF(2,x^8-x^6-x^4-x^3-x^2-x-1,x,0),GF(2,x^8-x^6-x^4-x^3-x^2-x-1,x,0),GF(2,x^8-x^6-x^4-x^3-x^2-x-1,x,0),GF(2,x^8-x^6-x^4-x^3-x^2-x-1,x,0)] ] , // fltk 7Fl_Tile 44 -1482 714 31 [ // fltk N4xcas23Comment_Multiline_InputE 44 -1482 714 30 puis on fait la division euclidienne par le polynome generateur du code , // fltk N4xcas10Log_OutputE 44 -1452 714 1 ] , // fltk 7Fl_Tile 44 -1449 714 75 [ // fltk N4xcas19Multiline_Input_tabE 44 -1449 714 31 g1:=rem(l1,g); , // fltk N4xcas10Log_OutputE 44 -1418 714 1 , // fltk N4xcas8EquationE 44 -1417 714 43 poly1[GF(2,x^8-x^6-x^4-x^3-x^2-x-1,x,x^7+x^2),GF(2,x^8-x^6-x^4-x^3-x^2-x-1,x,x^7+x^6+x^2),GF(2,x^8-x^6-x^4-x^3-x^2-x-1,x,x^7+x^6+x^4+x+1),GF(2,x^8-x^6-x^4-x^3-x^2-x-1,x,x^7+x^5+x^4+x)] ] , // fltk 7Fl_Tile 44 -1372 714 77 [ // fltk N4xcas19Multiline_Input_tabE 44 -1372 714 33 rem(l1-g1,g); , // fltk N4xcas10Log_OutputE 44 -1339 714 1 , // fltk N4xcas8EquationE 44 -1338 714 43 poly1[] ] , // fltk 7Fl_Tile 44 -1293 714 31 [ // fltk N4xcas23Comment_Multiline_InputE 44 -1293 714 30 On ajoute (ou retranche c'est pareil) g1 a l1, r1 est divisible par g, on transmet r1 , // fltk N4xcas10Log_OutputE 44 -1263 714 1 ] , // fltk 7Fl_Tile 44 -1260 714 72 [ // fltk N4xcas19Multiline_Input_tabE 44 -1260 714 28 r1:=l1+g1; , // fltk N4xcas10Log_OutputE 44 -1232 714 1 , // fltk N4xcas8EquationE 44 -1231 714 43 poly1[GF(2,x^8-x^6-x^4-x^3-x^2-x-1,x,x),GF(2,x^8-x^6-x^4-x^3-x^2-x-1,x,x^5),GF(2,x^8-x^6-x^4-x^3-x^2-x-1,x,x^2),GF(2,x^8-x^6-x^4-x^3-x^2-x-1,x,x),GF(2,x^8-x^6-x^4-x^3-x^2-x-1,x,x^7+x^2),GF(2,x^8-x^6-x^4-x^3-x^2-x-1,x,x^7+x^6+x^2),GF(2,x^8-x^6-x^4-x^3-x^2-x-1,x,x^7+x^6+x^4+x+1),GF(2,x^8-x^6-x^4-x^3-x^2-x-1,x,x^7+x^5+x^4+x)] ] , // fltk 7Fl_Tile 44 -1186 714 31 [ // fltk N4xcas23Comment_Multiline_InputE 44 -1186 714 30 Ici on rajoute 1 ou 2 erreurs pour tester la correction d'erreurs , // fltk N4xcas10Log_OutputE 44 -1156 714 1 ] , // fltk 7Fl_Tile 44 -1153 714 74 [ // fltk N4xcas19Multiline_Input_tabE 44 -1153 714 30 r2:=r1+poly1[a,zero,zero,a^5,zero]; , // fltk N4xcas10Log_OutputE 44 -1123 714 1 , // fltk N4xcas8EquationE 44 -1122 714 43 poly1[GF(2,x^8-x^6-x^4-x^3-x^2-x-1,x,x),GF(2,x^8-x^6-x^4-x^3-x^2-x-1,x,x^5),GF(2,x^8-x^6-x^4-x^3-x^2-x-1,x,x^2),GF(2,x^8-x^6-x^4-x^3-x^2-x-1,x,0),GF(2,x^8-x^6-x^4-x^3-x^2-x-1,x,x^7+x^2),GF(2,x^8-x^6-x^4-x^3-x^2-x-1,x,x^7+x^6+x^2),GF(2,x^8-x^6-x^4-x^3-x^2-x-1,x,x^7+x^6+x^5+x^4+x+1),GF(2,x^8-x^6-x^4-x^3-x^2-x-1,x,x^7+x^5+x^4+x)] ] , // fltk 7Fl_Tile 44 -1077 714 31 [ // fltk N4xcas23Comment_Multiline_InputE 44 -1077 714 30 Calcul du polynome syndrome , // fltk N4xcas10Log_OutputE 44 -1047 714 1 ] , // fltk 7Fl_Tile 44 -1044 714 74 [ // fltk N4xcas19Multiline_Input_tabE 44 -1044 714 30 s:=poly1[seq('horner(r2,a^(2*t-k))',k=0..(2*t-1))]; , // fltk N4xcas10Log_OutputE 44 -1014 714 1 , // fltk N4xcas8EquationE 44 -1013 714 43 poly1[GF(2,x^8-x^6-x^4-x^3-x^2-x-1,x,x^7+x^6+x^5+x^3+x^2+1),GF(2,x^8-x^6-x^4-x^3-x^2-x-1,x,x^4+x^3),GF(2,x^8-x^6-x^4-x^3-x^2-x-1,x,x^5+x^4+x^3+x^2+x),GF(2,x^8-x^6-x^4-x^3-x^2-x-1,x,x^6+x^5)] ] , // fltk 7Fl_Tile 44 -968 714 31 [ // fltk N4xcas23Comment_Multiline_InputE 44 -968 714 30 Programme pour calculer le polynome localisateur , // fltk N4xcas10Log_OutputE 44 -938 714 1 ] , // fltk 7Fl_Tile 44 -935 714 519 [ // fltk N4xcas7EditeurE 44 -935 714 335 734 , gf_bez(s,t):={ // s polynome liste, t entier local q,R0,R1,R2,v0,v1,v2; // R0=x^2t, R1=s, on ne calcule pas les u R0:=poly1[G(1),seq(zero,2*t)]; // x^2t R1:=s; v0:=poly1[]; v1:=poly1[G(1)]; for (;degree(R1)>=t;){ q:=quo(R0,R1); R2:=R0-q*R1; v2:=v0-q*v1; R0:=R1; R1:=R2; v0:=v1; v1:=v2; } return v1,R1; // c'est le polynome localisateur et w }; diff_poly(l):={ // derivee d'un polynome liste local s,j; s:=degree(l); res:=poly1[0$s]; for (j:=0;j