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;
- }
El primer if no es necesario, el ultimo else tampoco.
ResponderBorrarY los otros dos if, los podes convertir en uno simplemente poniendo que penultimo sea distinto de ultimo.
Suerte!
Bueno ojala tengas algo de tiempo ya que han pasado casi 5 años desde la publicacion de este articulo y pudieras hacernos el honor de poner el link de descarga del código fuente, creo que ha estas alturas ya habrás terminado (o casi) tu carrera y nos sería de mucha utilidad a mi y a todos los que recién estamos llevando este curso poder saber como lo hiciste tu. A mi parecer ya no existe el "esto lo hice yo sólo y no lo comparto" ya que de alguna manera todos aprendemos de todos, así como tu aprendiste de la página Emezeta. Bueno espero puedas publicar un link de descarga de tu programa, muchas gracias de antemano.
ResponderBorrarSaludos cordiales.
PD: mi email es javierob.20@gmail.com
Yo estudio Ing. de Sistemas y ojala pudieras pasármelo al menos te lo agradecería.
en que compilador lo ejecutas???
ResponderBorrar