Foro de elhacker.net

Programación => Java => Mensaje iniciado por: Dnk! en 15 Diciembre 2010, 01:29 am



Título: [JAVA] NEW Operaciones con quebrados ~ ver.2
Publicado por: Dnk! en 15 Diciembre 2010, 01:29 am
Aqui os dejo este codigo que hice de tarea. Asi que mejor que me digan que les parece, y me den muchas criticas, porque herrar es umano.  :-*

Código
  1. /* AUTOR: d3n3k4 (Dnk!)
  2.  * WEB: http://d3n3k4.blogspot.com/
  3.  * FECHA: 15/DIC/2010
  4.  * DESCRIPCION:
  5.  * - Nueva actualizacion para trabajar con quebrados (fracciones).
  6.  * - Introducido resta,multiplicacion,division de dos quebrados.
  7.  * - Con opcion a sumar,restar,multiplicar,dividir un vector de quebrados.
  8.  * NOTA: Este codigo es libre y puede ser usado,modificado... siempre y cuando se
  9.  * mantenga los creditos y comentarios del autor.
  10.  */
  11. import java.util.Scanner;
  12.  
  13. public class clsQuebrado {
  14. //Atributos
  15. private int numerador;
  16. private int denominador;
  17.  
  18. //Contructores
  19. public clsQuebrado(){
  20. this.numerador = 0;
  21. this.denominador = 0;
  22. }
  23. public clsQuebrado(int numerador,int denominador) {
  24. this.numerador = numerador;
  25. this.denominador = denominador;
  26. }
  27. //Setter&Getter
  28. public void setNumerador(int numerador) {
  29. this.numerador = numerador;
  30. }
  31. public void setDenominador(int denominador) {
  32. this.denominador = denominador;
  33. }
  34. public int getNumerador(){
  35. return this.numerador;
  36. }
  37. public int getDenominador(){
  38. return this.denominador;
  39. }
  40. /*
  41. * Calcular Maximo Comun Divisor.
  42. */
  43. private static int mcd(int a, int b) {
  44. int aux;
  45. if (a < 0)
  46. a = a * -1;
  47. if (b < 0)
  48. b = b * -1;
  49. while (b != 0) {
  50. aux = b;
  51. b = a%b;
  52. a = aux;
  53. }
  54. return a;
  55. }
  56. /*
  57. * Calcular Minimo Comum Multiplo.
  58. */
  59. private static int mcm(int a, int b) {
  60. int min = (a*b)/mcd(a,b);
  61. return min;
  62. }
  63. /*
  64. * Reducir/simplificar Quebrado.
  65. */
  66. public clsQuebrado reducir(){
  67. clsQuebrado QuebradoRed = new clsQuebrado();
  68. int max = mcd(this.getNumerador(),this.getDenominador());
  69. QuebradoRed.setDenominador(this.getDenominador()/max);
  70. QuebradoRed.setNumerador(this.getNumerador()/max);
  71. return QuebradoRed;
  72. }
  73. /*
  74. * @see java.lang.Object#toString()
  75. */
  76. public String toString(){
  77. return this.getNumerador()+"/"+this.getDenominador();
  78. }
  79. /*
  80. * Sumar 2 quebrados o vector de quebrados.
  81. */
  82. public static  clsQuebrado sumar(clsQuebrado q1,clsQuebrado q2) {
  83. clsQuebrado QuebradoRes = new clsQuebrado();
  84. int min = mcm(q1.getDenominador(),q2.getDenominador());
  85. QuebradoRes.setDenominador(min);
  86. QuebradoRes.setNumerador(q1.getNumerador()*(min/q1.getDenominador())+q2.getNumerador()*(min/q2.getDenominador()));
  87. return QuebradoRes.reducir();
  88. }
  89. public static clsQuebrado sumar(clsQuebrado[] lista) {
  90. clsQuebrado QuebradoRes = new clsQuebrado();
  91. for (int i = 0; i < lista.length; i++) {
  92. lista[i] = lista[i].reducir();
  93. }
  94. QuebradoRes = sumar(lista[0], lista[1]);
  95. for (int i = 2; i < lista.length; i++) {
  96. QuebradoRes = sumar(QuebradoRes,lista[i]);
  97. }
  98. return QuebradoRes.reducir();
  99. }
  100. /*
  101. * Idem que anterior -> restar.
  102. */
  103. public static clsQuebrado restar(clsQuebrado q1,clsQuebrado q2) {
  104. clsQuebrado QuebradoRes = new clsQuebrado();
  105. int min = mcm(q1.getDenominador(),q2.getDenominador());
  106. QuebradoRes.setDenominador(min);
  107. QuebradoRes.setNumerador(q1.getNumerador()*(min/q1.getDenominador())-q2.getNumerador()*(min/q2.getDenominador()));
  108. return QuebradoRes.reducir();
  109. }
  110. public static clsQuebrado restar(clsQuebrado[] lista) {
  111. clsQuebrado QuebradoRes = new clsQuebrado();
  112. for (int i = 0; i < lista.length; i++) {
  113. lista[i] = lista[i].reducir();
  114. }
  115. QuebradoRes = restar(lista[0], lista[1]);
  116. for (int i = 2; i < lista.length; i++) {
  117. QuebradoRes = restar(QuebradoRes,lista[i]);
  118. }
  119. return QuebradoRes.reducir();
  120. }
  121. /*
  122. * Idem que anterior -> multiplicar.
  123. */
  124. public static clsQuebrado multiplicar(clsQuebrado q1,clsQuebrado q2) {
  125. clsQuebrado QuebradoRes = new clsQuebrado(q1.getNumerador()*q2.getNumerador(),q1.getDenominador()*q2.getDenominador());
  126. return QuebradoRes.reducir();
  127. }
  128. public static clsQuebrado multiplicar(clsQuebrado[] lista) {
  129. clsQuebrado QuebradoRes = new clsQuebrado();
  130. for (int i = 0; i < lista.length; i++) {
  131. lista[i] = lista[i].reducir();
  132. }
  133. QuebradoRes = multiplicar(lista[0], lista[1]);
  134. for (int i = 2; i < lista.length; i++) {
  135. QuebradoRes = multiplicar(QuebradoRes,lista[i]);
  136. }
  137. return QuebradoRes.reducir();
  138. }
  139. /*
  140. * Idem que anterior -> dividir.
  141. */
  142. public static clsQuebrado dividir(clsQuebrado q1,clsQuebrado q2){
  143. clsQuebrado QuebradoRes = new clsQuebrado(q1.getNumerador()*q2.getDenominador(),q1.getDenominador()*q2.getNumerador());
  144. return QuebradoRes.reducir();
  145. }
  146. public static clsQuebrado dividir(clsQuebrado[] lista) {
  147. clsQuebrado QuebradoRes = new clsQuebrado();
  148. for (int i = 0; i < lista.length; i++) {
  149. lista[i] = lista[i].reducir();
  150. }
  151. QuebradoRes = dividir(lista[0], lista[1]);
  152. for (int i = 2; i < lista.length; i++) {
  153. QuebradoRes = dividir(QuebradoRes,lista[i]);
  154. }
  155. return QuebradoRes.reducir();
  156. }
  157. /*
  158. * Lee un quebrado de teclado.
  159. */
  160. public static clsQuebrado leerQuebrado(){
  161. Scanner entrada = new Scanner(System.in);
  162. clsQuebrado QuebradoRes = new clsQuebrado(entrada.nextInt(),entrada.nextInt());
  163. return QuebradoRes.reducir();
  164. }
  165. /*
  166. * Obtienes un string de la operacion total del arreglo.
  167. */
  168. public static String escribeExpresion(clsQuebrado[] lista) {
  169. String exp = "";
  170. for (int i = 0; i < lista.length; i++) {
  171. if (i > 0 && lista[i].getNumerador() >= 0)
  172. exp += "+";
  173. exp += lista[i].toString();
  174. }
  175. exp += "=";
  176. return exp;
  177. }
  178. }
  179.  

Ejemplo de uso:
Código
  1. public class ProgramaQuebrados {
  2.  
  3. public static void main(String[] args) {
  4. Quebrado q1,q2,res;
  5. System.out.println("Introduce primer quebrado:");
  6. q1 = Quebrado.leerQuebrado();
  7. System.out.println("Introduce primer quebrado:");
  8. q2 = Quebrado.leerQuebrado();
  9. System.out.println("Pruebas Operaciones");
  10. res = Quebrado.sumar(q1, q2);
  11. System.out.println(q1+" + "+q2+" = "+res);
  12. res = Quebrado.restar(q1, q2);
  13. System.out.println(q1+" - "+q2+" = "+res);
  14. res = Quebrado.multiplicar(q1, q2);
  15. System.out.println(q1+" * "+q2+" = "+res);
  16. res = Quebrado.dividir(q1, q2);
  17. System.out.println(q1+" / "+q2+" = "+res);
  18. System.out.println("Prueba sumaQuebrados y escribeExpresion");
  19. Quebrado[] lista = new Quebrado[5];
  20. lista[0] =  new Quebrado(10,20);
  21. lista[1] =  new Quebrado(10,30);
  22. lista[2] =  new Quebrado(-10,10);
  23. lista[3] =  new Quebrado(30,20);
  24. lista[4] =  new Quebrado(-10,20);
  25. res = Quebrado.sumaQuebrados(lista);
  26. System.out.print(Quebrado.escribeExpresion(lista));
  27. System.out.println(res);
  28. }
  29. }
  30.  

xDnk!


Título: Re: [JAVA] NEW Operaciones con quebrados ~ ver.2
Publicado por: sapito169 en 15 Diciembre 2010, 06:54 am
la primera letra de una clase no comiensa con mayuscula las clases no comiensan con cls los metodos mcd y mcm no tienen nada que ver deverian estar en otra clase
borra la importacion a scaner mejor crea otra clases para hacer las operaciones de lectura
aparte de eso es buen codigo es realmente extraordinario es decir que es algo que casi nunca pasa encontrar codigo que se entienda y menos a la primera  ;-)  ;-)


Título: Re: [JAVA] NEW Operaciones con quebrados ~ ver.2
Publicado por: Dnk! en 15 Diciembre 2010, 09:18 am
UPs gran fallo el de las mayus, se me paso, justo al final lo cambie sin coprobar. Las funciones de lectura tienes razon, lo pense asi pero como era tarde se me paso. XD.

Pero no veo porque tengo k sacar de la clase el maximo comun divisor y el minimo comun multiplo?.

Saludos!


Título: Re: [JAVA] NEW Operaciones con quebrados ~ ver.2
Publicado por: sapito169 en 15 Diciembre 2010, 17:45 pm
si un metodo de una clase usa variables pasadas como parametro y no usa ninguna de las globalas te esta gritando que deberia estar en otra clase asi puedes reusar esa funcion en cualquier parte que quieras


Título: Re: [JAVA] NEW Operaciones con quebrados ~ ver.2
Publicado por: Dnk! en 15 Diciembre 2010, 18:04 pm
Tienes razon, pero la logica del objeto necesita de esas funciones internas para poder realizar el proceso. No se si me entiendes, yo a ti si pero difiero en esa parte.

La clase necesita trabajar con esos metodos para realizarlo, no lo veo logico fuera.

EDITO: Una posible solucion, seria crear otra clase, y desde la clase Quebrado llamar a estos metodos no?