Blog de Investigación & Desarrollo (R&D) académico-universitaria en la carrera de Ciencia de la Computación, en la escuela de Informática de la Universidad Nacional de Trujillo - Trujillo, Perú
No existen imposibles... tan sólo existen NP's
viernes, 14 de diciembre de 2007
Bienvenida?
A pesar de tener distintos websites a mi cargo (desde el hi5, el msn-live-space, mi cuenta en youtube, otro live-space, de mi página ~grgs en el servidor de la escuela de Informática-UNT, y esta página nato.gs q google me ofrece por mi cuenta de gmail...
Me atrevo a crear una página más, pero con nuevo contenido: académico, universitario =)
x eso mismo... esta es una bienvenida! ;)
jueves, 1 de diciembre de 2005
Clase IU_Principal [Algoritmo de Booth]
IU_Principal.java:
Esta clase implementará los métodos de manejo de interfaces y eventos, para visualizar las operaciones del algoritmo de Booth de una manera visualmente más atractiva.
A continuación, el detalle de lo que se usó para implementarlo.
Atributos:
- private JButton btnCalcular;
Es el botón con el cual se verifica que los datos ingresados sean correctos, y según eso, llama al algoritmo de Booth para calcular el resultado. - private JButton btnLimpiar;
Limpia los campos de texto para ingresar una nueva operación. - private JTextArea txaOperaciones;
Reporta paso a paso, las operaciones del algoritmo de Booth. - private JTextField txtMultiplicando;
Donde se ingresa el valor en base decimal del multiplicando de la operación. - private JTextField txtMultiplicandoBin;
Donde se reporta el multiplicando en binario. - private JTextField txtMultiplicador;
Donde se ingresa el valor en base decimal del multiplicador de la operación. - private JTextField txtMultiplicadorBin;
Donde se reporta el multiplicador en binario. - private JTextField txtMultiplicacion;
Donde se reporta a manera de cadena, la operación de forma: "a x b". - private JTextField txtResultado;
Donde se reporta el resultado de la operación, en base decimal. - private JTextField txtResultadoBin;
Donde se reporta el resultado de la operación en binario.
Métodos:
- IU_Principal() : constructor
Descripción: Inicializa todos los atributos, y ubicación en la interfaz de los elementos gráficos (Swing).
Entrada: Cadena que representa un número en binario.
Salida: Entero que representa el correspondiente valor en decimal. - btnCalcularActionPerformed(java.awt.event.ActionEvent evt) : void
Descripción: Convierte un número decimal, a un número binario.
Entrada: evento a manejar.
Salida: Vacío. - btnLimpiarActionPerformed(java.awt.event.ActionEvent evt) : void
Descripción: Establece los valores de los cuadros de texto en vacío, limpiándolos para realizar un nuevo cálculo, y poniendo el foco (requestFocus) en el txtMultiplicando.
Entrada: evento a manejar.
Salida: Vacío. - validarValoresEntrada() : boolean
Descripción: Verifica que los datos ingresados sean exclusivamente numéricos/enteros y no de ningún otro tipo. También verifica que (en este caso) sean menores de 256, para normalizar las cadenas de números binarios a 9 bits (8 normales + 1 bit de signo)
Entrada: Vacío.
Salida: Valor booleano, que indica si los datos ingresados son númericos/enteros, menores a 256 (verdadero) o no cumplen esas restricciones (devuelve falso). - actualizarTextArea(String cadena) : void
Descripción: Actualiza el JTextArea txaOperaciones, añadiendo (append) la cadena de entrada.
Entrada: Cadena de texto a ser reportada dentro del textArea, siendo añadida en la última línea.
Salida: Vacío.
Los campos de texto deshabilitados, son los de tipo "reporte" para que el usuario no los pueda modificar.Clase AlgoritmoBooth [Algoritmo de Booth]
AlgoritmoBooth.java:
Esta clase implementará todos los métodos propios del algoritmo de Booth, que no estén considerados en la clase OperacionesBinarias.java.
Algunos métodos se trabajarán por sobrecarga (overloading) para simplificar codificación.
Los métodos son estáticos porque depende de ningún atributo de la clase (los cuales no tiene)
- algoritmo(String multiplicando, String multiplicador) : String
Descripción: Implementa el algoritmo de Booth, haciendo uso de todas las funciones previamente implementadas en la clase OperacionesBinarias para calcular el resultado correspondiente.
Adicionalmente, muestra los datos, el procedimiento y operaciones, y el resultado en modo consola.
Entrada: 2 cadenas representando números binarios.
Salida: Cadena que representa el número binario del producto. - algoritmo(int multiplicando, int multiplicador) : int
Descripción: Recibe los datos a operar del tipo entero, los convierte en binario (cadenas), los normaliza (en tamaño), llama a String:algoritmo con esos valores, y el valor retornado, lo transforma a entero y lo devuelve.
Entrada: 2 enteros, números a operar.
Salida: Entero, valor del resultado de la operación (producto). - algoritmo(IU_Principal interfaz, String multiplicando, String multiplicador) : String
Descripción: Implementa el algoritmo de Booth, haciendo uso de todas las funciones implementadas en la clase OperacionesBinarias para calcular el resultado correspondiente.
Adicionalmente, muestra los datos, el procedimiento y operaciones, y el resultado en modo consola, y utiliza el parámetro interfaz para actualizar el textArea donde reporta las operaciones del algoritmo.
Entrada: 2 cadenas representando números binarios.
Salida: Cadena que representa el número binario del producto.
Respecto al algoritmo principal, éste es el procedimiento:
Se le han suprimido los códigos de impresión, y formato de impresión para hacerlo legible, y enfocándome únicamente en el código del mismo algoritmo de Booth.
- {
- String resultado="";
- S=OperacionesBinarias.completarDerecha(S);
- int i=0,n=multiplicando.length();
- char ultimo, penultimo;
- char cadena[]=new char[2*n];
- for(i=0;i<n;i++)
- {
- ultimo=P.charAt(P.length()-1);
- penultimo=P.charAt(P.length()-2);
- if(penultimo=='0' && ultimo=='0')
- {
- // No realizar ninguna acción
- }
- else
- {
- if(penultimo=='0' && ultimo=='1')
- {
- // P termina en [0 1] -> P = P + A
- P=OperacionesBinarias.suma(P, A);
- }
- else
- if(penultimo=='1' && ultimo=='0')
- {
- // P termina en [1 0] -> P = P + S = P - A
- P=OperacionesBinarias.suma(P, S);
- }
- else
- {
- // No realizar ninguna acción
- }
- }
- P=OperacionesBinarias.desplazarDerecha(P);
- }
- for(i=0;i<2*n;i++)
- {
- cadena[i]=P.charAt(i);
- }
- // devuelve el resultado, quitandole el ULTIMO bit
- return resultado;
- }
Clase OperacionesBinarias [Algoritmo de Booth]
OperacionesBinarias.java:
Es la clase que implementará todos los métodos (estáticos) que van a ser útiles para manipular números binarios.
Los métodos son estáticos porque depende de ningún atributo de la clase (los cuales no tiene)
- bin2dec(String numeroBinario) : int
Descripción: Convierte un número binario, a un número decimal.
Entrada: Cadena que representa un número en binario.
Salida: Entero que representa el correspondiente valor en decimal. - dec2bin(int numeroDecimal) : String
Descripción: Convierte un número decimal, a un número binario.
Entrada: Entero que representa el valor decimal del número.
Salida: Cadena que representa el correspondiente valor en binario. - complementoA2(String binario) : String
Descripción: Convierte un número binario a su representación en complemento a 2.
Entrada: Cadena que representa un número en binario.
Salida: Cadena que representa el número binario en complemento a 2. - rellenarCeros(String numeroBinario, int tamañoDeseado) : String
Descripción: Estandariza los tamaños de las cadenas a tratar, a un tamaño deseado de bits.
Entrada: Cadena que representa un número en binario, entero del tamaño deseado de la cadena.
Salida: Cadena de tamaño estandarizado. - desplazarDerecha(String numeroBinario) : String
Descripción: Método propio del algoritmo de Booth, desplaza los bits a la derecha, manteniendo el bit de signo.
Entrada: Cadena que representa un número en binario.
Salida: Cadena con sus bits desplazados. - suma(String sumando, String sumador) : String
Descripción: Suma 2 números en binario (en cadenas)
Entrada: 2 cadenas representando números binarios.
Salida: Cadena que representa el número binario de la suma. - completarDerecha(String cadena) : String
Descripción: Método propio del algoritmo de Booth, rellena de ceros a la derecha para darle a la cadena de entrada la forma del resultado (de n bits del dato de entrada, a 2n+1 bits del dato de salida)
Entrada: Cadena representando un número binario.
Salida: Cadena de longitud 2n+1, donde n+1 ceros adheridos a la derecha. - completarIzquierda(String cadena) : String
Descripción: Método propio del algoritmo de Booth, rellena de ceros a la izquierda para darle a la cadena de entrada la forma del resultado (de n bits del dato de entrada, a 2n+1 bits del dato de salida)
Entrada: Cadena representando un número binario.
Salida: Cadena de longitud 2n+1, donde n+1 ceros adheridos a la izquierda. - formatoBinario(String cadena) : String
Descripción: Método que separa cada 4 bits con un espacio " " el número binario, para darle mayor legibilidad.
Entrada: Cadena representando un número binario.
Salida: Cadena con formato binario legible.
Suscribirse a:
Entradas (Atom)