Francciones en Java


SUBMITTED BY: almon

DATE: Dec. 18, 2015, 5:39 p.m.

FORMAT: Java

SIZE: 4.8 kB

HITS: 1595

  1. public class Fraccion{
  2. /* Los atributos de la clase Fraccion son el numerador y el denominador
  3. que por definicion son numeros enteros */
  4. int num;
  5. int denom;
  6. //Metodos Constructores
  7. //Constructor simple
  8. public Fraccion(){
  9. num = 0;
  10. denom = 1;
  11. }
  12. //Constructor para fracciones enteras
  13. public Fraccion(int num) {
  14. this.num = num;
  15. denom = 1;
  16. }
  17. //Constructor general
  18. public Fraccion(int num, int denom){
  19. this.num = num;
  20. this.denom = denom;
  21. }
  22. /*Funcion para entrada de datos por teclado */
  23. public static Fraccion datos(){
  24. String numc ="";
  25. String denomc ="";
  26. Fraccion f=new Fraccion();
  27. String fraccionDato =
  28. Terminal.leeCadena("\nIntroduce una fraccion: ");
  29. /* Buscamos el lugar que ocupa en la cadena el simbolo "/" */
  30. int pos = fraccionDato.indexOf('/');
  31. /* Si es un numero entero no se encuentra "/" y asigna a "pos" un -1 */
  32. if(pos==-1) {
  33. int num1 =
  34. Integer.valueOf(fraccionDato.trim()).intValue();
  35. f= new Fraccion(num1);
  36. }
  37. else {
  38. for(int i=0;i<pos;i++)
  39. numc+=fraccionDato.charAt(i);
  40. /* El denominador esta entre (pos+1) y la longitud de la cadena */
  41. for(int i=(pos+1);i<fraccionDato.length();i++)
  42. denomc+=fraccionDato.charAt(i);
  43. /* Convertimos las dos cadenas en los enteros num y denom */
  44. int num = Integer.valueOf(numc.trim()).intValue();
  45. int denom = Integer.valueOf(denomc.trim()).intValue();
  46. f = new Fraccion(num,denom);
  47. }
  48. return f;
  49. }
  50. public static Fraccion suma(Fraccion a, Fraccion b){
  51. /* Se devuelve una fraccion y los argumentos son fracciones */
  52. /* Se inicializa primero la fraccion que va a contener el resultado */
  53. Fraccion c = new Fraccion();
  54. c.num = (a.num*b.denom)+(a.denom*b.num);
  55. c.denom = a.denom*b.denom;
  56. return c;
  57. }
  58. public static Fraccion producto(Fraccion a, Fraccion b){
  59. Fraccion c = new Fraccion();
  60. c.num = a.num*b.num;
  61. c.denom = a.denom*b.denom;
  62. return c;
  63. }
  64. public static Fraccion inversa(Fraccion a){
  65. /* Para obtener la inversa basta con cambiar numerador por denominador */
  66. if(a.num>=0) return new Fraccion(a.denom,a.num);
  67. else return new Fraccion(-a.denom,-a.num);
  68. }
  69. public static Fraccion cociente(Fraccion a, Fraccion b){
  70. /* Para calcular el cociente se obtiene la fraccion producto de la primera
  71. fraccion, por la inversa de la segunda fraccion */
  72. return producto(a,inversa(b));
  73. }
  74. public static Fraccion potencia(Fraccion a) {
  75. Fraccion c = new Fraccion();
  76. double exponente = Terminal.leeReal("Exponente al que se eleva: ");
  77. c.num = (int) Math.pow((double)a.num,Math.abs(exponente));
  78. c.denom = (int) Math.pow((double)a.denom,Math.abs(exponente));
  79. if(exponente<0) c=Fraccion.inversa(c);
  80. return c;
  81. }
  82. public String toString(){
  83. /* Se devuelve una cadena con el numerador y denominador y en medio
  84. el signo "/" de division */
  85. if(denom==1) return " "+num;
  86. else return num+"/"+denom;
  87. }
  88. private int mcd(){
  89. /* El mcd de numerador y denominador es una funcion privada de la clase
  90. fraccion que se obtiene por el metodo de Euler y que nos sirve para la
  91. simplificacion de fracciones */
  92. int u = Math.abs(num); //Se usa valor absoluto por si hay negativos
  93. int v = Math.abs(denom);
  94. if(v==0) return u;
  95. int r;
  96. /* "r" va a ser el resto de cada division */
  97. while(v!=0){
  98. r = u%v;
  99. u = v;
  100. v = r;
  101. }
  102. return u;
  103. }
  104. public Fraccion simplificar(){
  105. /* Se devuelve una nueva fraccion con sus terminos divididos por el
  106. mcd de numerador y denominador */
  107. return new Fraccion(num/mcd(),denom/mcd());
  108. }
  109. }

comments powered by Disqus