jueves, 1 de diciembre de 2005

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.

  1. public static String algoritmo(String multiplicando, String multiplicador)
  2. {
  3. String resultado="";
  4. String A=OperacionesBinarias.completarDerecha(multiplicando);
  5. String S=OperacionesBinarias.complementoA2(multiplicando);
  6. S=OperacionesBinarias.completarDerecha(S);
  7. String P=OperacionesBinarias.completarIzquierda(multiplicador);
  8. int i=0,n=multiplicando.length();
  9. char ultimo, penultimo;
  10. char cadena[]=new char[2*n];
  11. for(i=0;i<n;i++)
  12. {
  13. ultimo=P.charAt(P.length()-1);
  14. penultimo=P.charAt(P.length()-2);
  15. if(penultimo=='0' && ultimo=='0')
  16. {
  17. // No realizar ninguna acción
  18. }
  19. else
  20. {
  21. if(penultimo=='0' && ultimo=='1')
  22. {
  23. // P termina en [0 1] -> P = P + A
  24. P=OperacionesBinarias.suma(P, A);
  25. }
  26. else
  27. if(penultimo=='1' && ultimo=='0')
  28. {
  29. // P termina en [1 0] -> P = P + S = P - A
  30. P=OperacionesBinarias.suma(P, S);
  31. }
  32. else
  33. {
  34. // No realizar ninguna acción
  35. }
  36. }
  37. P=OperacionesBinarias.desplazarDerecha(P);
  38. }
  39. for(i=0;i<2*n;i++)
  40. {
  41. cadena[i]=P.charAt(i);
  42. }
  43. resultado=String.valueOf(cadena);
  44.  
  45. // devuelve el resultado, quitandole el ULTIMO bit
  46. return resultado;
  47. }


3 comentarios:

  1. El primer if no es necesario, el ultimo else tampoco.

    Y los otros dos if, los podes convertir en uno simplemente poniendo que penultimo sea distinto de ultimo.

    Suerte!

    ResponderEliminar
  2. 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.
    Saludos 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.

    ResponderEliminar
  3. en que compilador lo ejecutas???

    ResponderEliminar