Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- public class Code3 {
- private enum Erreur {
- CORRECTION, ERREUR, CORRECT }
- private Erreur[] tab;
- private boolean gestionErreurs;
- /**
- * Constructeur
- **/
- public Code3(boolean bool){
- gestionErreurs = bool;
- }
- /**
- * Méthode coder
- **/
- public byte[][] coder(byte[] leTab) {
- byte[][] res = new byte[3][leTab.length];
- for (int i = 0; i < 3; i++){
- res[i] = leTab.clone();
- }
- return res;
- }
- /**
- * Méthode decoder
- **/
- public byte[] decoder(byte[][] leTab) {
- byte[] res = new byte[leTab[0].length];
- tab = new Erreur[leTab[0].length];
- for(int j = 0; j < tab.length; j++)
- tab[j] = Erreur.CORRECTION;
- for(int k = 0; k < leTab[0].length; k++)
- if( leTab[0][k] == leTab[1][k] && leTab[0][k] == leTab[2][k])
- tab[k] = Erreur.CORRECT;
- for(int k = 0; k < leTab[0].length; k++)
- if( leTab[0][k] != leTab[1][k] && leTab[0][k] != leTab[2][k] && leTab[1][k] != leTab[2][k])
- tab[k] = Erreur.ERREUR;
- for (int i = 0; i < leTab[0].length; i++) {
- res[i] = leTab[0][i];
- if ( leTab[0][i] != leTab[1][i] )
- if(leTab[1][i] == leTab[2][i])
- res[i] = leTab[1][i];
- }
- return res;
- }
- /**
- * getteur
- **/
- public Erreur[] getErrors() {
- //if(gestionErreurs == true)
- return tab.clone();
- }
- /**
- * TestCode3.java
- * Pour tester Code3 avec énumération.
- */
- public static void main(String[] args) {
- byte[] data = {1, 2, 3, 4, 5, 6};
- // Le paramètre true indique que l'on souhaite avoir un rapport sur les erreurs
- // et les corrections effectuées par le code correcteur (ligne "Erreurs et corrections"
- // de l'exemple d'affichage donné dans l'énoncé).
- Code3 code = new Code3(true);
- byte[][] data2 = code.coder(data);
- // Affiche le tableau codé tel qu'il aurait dû être
- // si pas d'erreur de transmission.
- System.out.println("Le tableau codé si pas d'erreur de transmission :");
- for (int i = 0; i < data2.length; i++) {
- for (int j = 0; j < data2[i].length; j++) {
- // Variante de print "à la C" étudiée dans la suite du cours
- // Vous pouvez remplacer par une simple print(data2[i][j] + ";")
- System.out.printf("%3d", data2[i][j]);
- }
- System.out.println();
- }
- // Pour simuler des erreurs de transmission
- // Erreur de transmission sur 1er et 2ème octet transmis ;
- // le code corrigera l'erreur.
- data2[0][0] = 15;
- data2[0][1] = 20;
- // Double erreur de transmission sur octet 3 transmis ;
- // le code indiquera une erreur non corrigeable.
- data2[1][2] = 10;
- data2[0][2] = 25;
- // Double erreur de transmission sur octet 4 transmis
- // mais qui fait croire à une correction possible ;
- // le résultat donné par le décodage sera erroné.
- data2[1][3] = 30;
- data2[2][3] = 30;
- // Affiche le tableau codé reçu
- System.out.println("Le tableau codé reçu :");
- for (int i = 0; i < data2.length; i++) {
- for (int j = 0; j < data2[i].length; j++) {
- System.out.printf("%3d", data2[i][j]);
- }
- System.out.println();
- }
- System.out.println("Le tableau corrigé :");
- byte[] data3 = code.decoder(data2);
- for (int i = 0; i < data3.length; i++) {
- System.out.printf("%3d", data3[i]);
- }
- System.out.println();
- System.out.println("Erreurs et corrections :");
- // C'est à vous de trouver un moyen de savoir si le décodage
- // a effectué des corrections ou a rencontré des problèmes (3 octets différents).
- Erreur[] erreurs = code.getErrors();
- for(int i = 0; i < erreurs.length; i++){
- System.out.print(erreurs[i] + " ");
- }
- }
- }
Add Comment
Please, Sign In to add comment