ACTIVIDAD OPCIONAL - PARIDAD

11:20 Unknown 0 Comments

CALCULO DE PARIDAD


Esta actividad consiste en el desarrollo de una pequeña aplicación ejecutable que rellena una matriz de 4*5 simulando el envío de una transmisión de datos. El programa rellena la matriz de forma automática y calcula la paridad. Permite la modificación de un bit que permite la introducción de un fallo de forma manual, el programa puede detectar ese fallo y corregir la matriz en consecuencia.

El programa cuenta de tres clases como se puede ver a continuación:


La clase ejecutar se compone únicamente del método main que llamará a nuestro menú, que estará en la clase MenuDeOpciones y que sera la que lleve todo el programa a cabo.

public class Ejecutar {

 public static void main(String[] args) {
  MenuDeOpciones m = new MenuDeOpciones();
  m.menu();
 }
}



La clase ventana sera la encargada de crearnos la ventana sobre la que luego vamos a escribir y mostrar todo el programa.

public class Ventana extends JFrame implements ActionListener {

 /**
  * 
  */
 private static final long serialVersionUID = 1L;
 public int i = 0;
 public JTextArea a = new JTextArea();
 public JTextField b = new JTextField();

 public Ventana() {
  setBounds(0, 0, 500, 625);
  setResizable(false);
  setLayout(null);
  setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

  a.setBounds(0, 0, 500, 500);
  a.setEditable(false);
  add(a);

  b.setBounds(0, 525, 200, 30);

  add(b);
  b.addActionListener(this);
 }

 public void escribir(String texto) {
  a.append(texto);
 }

 public void setTexto() {
  a.setText("");
 }

 @Override
 public void actionPerformed(ActionEvent e) {
  // TODO Auto-generated method stub
  i = Integer.parseInt(b.getText());
  b.setText("");
 }

 public int getI() {
  return i;
 }

 public void setI() {
  i = 0;
 }
}

La clase más importante de este proyecto es MenuDeOpciones donde se realizan los cálculos necesarios para la ejecución del programa en todas sus opciones.

public class MenuDeOpciones {

 private int[][] matriz;

 private Random azar;
 private int[][] matriz2 = new int[6][5];
 private int paridad = 0;
 private int[][] matriz3 = new int[6][5];
 private Ventana v = new Ventana();
 private int opcion;

 public MenuDeOpciones() {
  matriz = new int[5][4];

  azar = new Random();
  v.setVisible(true);
 }

 public void menu() {
  v.escribir("MENU DE OPCIONES\n");
  v.escribir("-----------------\n");
  v.escribir("1.RELLENAR MATRIZ\n");
  v.escribir("2.GENERAR 20 + 10 BITS\n");
  v.escribir("3.MODIFICAR UN BIT\n");
  v.escribir("4.COMPROBAR\n");
  v.escribir("5.CORREGIR/MOSTRAR MATRIZ ORIGINAL\n");
  v.escribir("6.MOSTRAR BITS EN MATRIZ\n");
  v.escribir("7.SALIR\n");

  while (opcion != 7) {
   opcion = v.getI();
   try {

    Thread.sleep(100);
   } catch (InterruptedException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
   }
   if (funcionamiento() == true) {
    switch (opcion) {
    case 1:
     rellenarMatriz();
     break;
    case 2:
     generar();
     break;
    case 3:
     modificar();
     break;
    case 4:
     comprobar();
     break;
    case 5:
     corregir();
     break;
    case 6:
     mostrar(matriz);
     break;
    case 7:
     salir();
    default:
     v.escribir("");
    }
    v.setI();
    v.escribir("MENU DE OPCIONES\n");
    v.escribir("-----------------\n");
    v.escribir("1.RELLENAR MATRIZ\n");
    v.escribir("2.GENERAR 20 + 10 BITS\n");
    v.escribir("3.MODIFICAR UN BIT\n");
    v.escribir("4.COMPROBAR\n");
    v.escribir("5.CORREGIR/MOSTRAR MATRIZ ORIGINAL\n");
    v.escribir("6.MOSTRAR BITS EN MATRIZ\n");
    v.escribir("7.SALIR\n");
    opcion = v.getI();
   }

  }
 }

 private void salir() {
  v.setTexto();
  try {
   v.escribir("PROCESO TERMINADO");
   Thread.sleep(2000);
  } catch (InterruptedException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }

  System.exit(0);

 }

 private void mostrar(int[][] t) {
  v.setTexto();

  for (int i = 0; i <= t.length - 1; i++) {
   for (int j = 0; j <= t[0].length - 1; j++) {
    v.escribir(t[i][j] + "\t");
   }
   v.escribir("\n");
  }
  v.setI();
  v.escribir("\n");
 }

 private void corregir() {
  if (paridad == 0) {
   paridadPar();
  } else {
   paridadImpar();
  }
  mostrar(matriz2);
 }

 private void comprobar() {

  // PARIDAD PAR

  if (paridad == 0) {
   int conta = 0;
   for (int i = 0; i < matriz.length; i++) {
    for (int j = 0; j < matriz[0].length; j++) {
     matriz3[i][j] = matriz[i][j];
    }
   }
   for (int i = 0; i < matriz.length; i++) {

    for (int j = 0; j < matriz[0].length; j++) {
     if (matriz[i][j] == 1) {
      conta++;
     }
    }
    if (conta % 2 == 0) {
     matriz3[i][4] = 0;
     conta = 0;
    } else {
     matriz3[i][4] = 1;
     conta = 0;
    }

   }

   for (int i = 0; i < matriz.length - 1; i++) {

    for (int j = 0; j < matriz.length; j++) {
     if (matriz[j][i] == 1) {
      conta++;
     }
    }
    if (conta % 2 == 0) {
     matriz3[5][i] = 0;
     conta = 0;
    } else {
     matriz3[5][i] = 1;
     conta = 0;
    }

   }
   for (int i = 0; i <= matriz3.length - 1; i++) {
    for (int j = 0; j <= matriz3[0].length - 1; j++) {
     if (matriz3[i][j] == matriz2[i][j]) {
      conta++;
     }

    }
   }
   if (conta == 30) {

    v.escribir("COMPROBACION CORRECTA\n");
   } else {
    v.escribir("COMPROBACION ERRONEA\n");
   }

  }

  // PARIDAD IMPAR
  if (paridad == 1) {
   int conta = 0;
   for (int i = 0; i < matriz.length; i++) {
    for (int j = 0; j < matriz[0].length; j++) {
     matriz3[i][j] = matriz[i][j];
    }
   }
   for (int i = 0; i < matriz.length; i++) {

    for (int j = 0; j < matriz[0].length; j++) {
     if (matriz[i][j] == 1) {
      conta++;
     }
    }
    if (conta % 2 == 0) {
     matriz3[i][4] = 1;
     conta = 0;
    } else {
     matriz3[i][4] = 0;
     conta = 0;
    }

   }

   for (int i = 0; i < matriz.length - 1; i++) {

    for (int j = 0; j < matriz.length; j++) {
     if (matriz[j][i] == 1) {
      conta++;
     }
    }
    if (conta % 2 == 0) {
     matriz3[5][i] = 1;
     conta = 0;
    } else {
     matriz3[5][i] = 0;
     conta = 0;
    }

   }
   for (int i = 0; i <= matriz3.length - 1; i++) {
    for (int j = 0; j <= matriz3[0].length - 1; j++) {
     if (matriz3[i][j] == matriz2[i][j]) {
      conta++;
     }

    }
   }
   if (conta == 30) {

    v.escribir("COMPROBACION CORRECTA\n");
   } else {
    v.escribir("COMPROBACION ERRONEA\n");
   }
  }

 }

 private void modificar() {
  int f = 0;
  int c = 0;
  v.setTexto();
  v.escribir("INTRODUZCA LA FILA NUMERO A MODIFICAR\n");
  try {

   Thread.sleep(2000);
   f = v.getI();
  } catch (InterruptedException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }
  v.escribir("INTRODUZCA LA COLUMNA NUMERO A MODIFICAR\n");
  try {

   Thread.sleep(2000);
   c = v.getI();
  } catch (InterruptedException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }
  v.escribir("INTRODUZCA EL NUEVO VALOR\n");
  try {
   Thread.sleep(2000);
   matriz[f][c] = v.getI();

  } catch (InterruptedException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }
 }

 private void generar() {
  v.setTexto();
  v.escribir("0.PARIDAD PAR\n");
  v.escribir("1.PARIDAD IMPAR\n");

  while (opcion != 0 && opcion != 1) {
   opcion = v.getI();
   try {
    Thread.sleep(100);
   } catch (InterruptedException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
   }

   switch (opcion) {
   case 0:
    paridadPar();
    break;
   case 1:
    paridadImpar();
    break;
   default:
    v.escribir("");
   }

  }

  v.setI();
  // v.setTexto();

 }

 private void paridadImpar() {
  int conta = 0;
  paridad = 1;
  for (int i = 0; i < matriz.length; i++) {
   for (int j = 0; j < matriz[0].length; j++) {
    matriz2[i][j] = matriz[i][j];
   }
  }
  for (int i = 0; i < matriz.length; i++) {

   for (int j = 0; j < matriz[0].length; j++) {
    if (matriz[i][j] == 1) {
     conta++;
    }
   }
   if (conta % 2 == 0) {
    matriz2[i][4] = 1;
    conta = 0;
   } else {
    matriz2[i][4] = 0;
    conta = 0;
   }

  }

  for (int i = 0; i < matriz.length - 1; i++) {

   for (int j = 0; j < matriz.length; j++) {
    if (matriz[j][i] == 1) {
     conta++;
    }
   }
   if (conta % 2 == 0) {
    matriz2[5][i] = 1;
    conta = 0;
   } else {
    matriz2[5][i] = 0;
    conta = 0;
   }

  }
  mostrar(matriz2);
  v.escribir("\n");
 }

 private void paridadPar() {
  paridad = 0;
  int conta = 0;
  for (int i = 0; i < matriz.length; i++) {
   for (int j = 0; j < matriz[0].length; j++) {
    matriz2[i][j] = matriz[i][j];
   }
  }
  for (int i = 0; i < matriz.length; i++) {

   for (int j = 0; j < matriz[0].length; j++) {
    if (matriz[i][j] == 1) {
     conta++;
    }
   }
   if (conta % 2 == 0) {
    matriz2[i][4] = 0;
    conta = 0;
   } else {
    matriz2[i][4] = 1;
    conta = 0;
   }

  }

  for (int i = 0; i < matriz.length - 1; i++) {

   for (int j = 0; j < matriz.length; j++) {
    if (matriz[j][i] == 1) {
     conta++;
    }
   }
   if (conta % 2 == 0) {
    matriz2[5][i] = 0;
    conta = 0;
   } else {
    matriz2[5][i] = 1;
    conta = 0;
   }

  }
  mostrar(matriz2);
  v.escribir("\n");
 }

 private void rellenarMatriz() {
  for (int i = 0; i < matriz.length; i++) {
   for (int j = 0; j < matriz[0].length; j++) {
    matriz[i][j] = azar.nextInt(2);
   }
  }
  v.setI();
  v.setTexto();

 }

 private boolean funcionamiento() {
  opcion = v.getI();
  if (opcion > 0 && opcion <= 7) {
   return true;
  }
  return false;
 }

}



Para descargar el ejecutable del programa y la carpeta del proyecto Pinche Aqui.

0 comentarios: