El ejercicio de División con Restas Sucesivas en Java es un ejercicio interesante, ya que aplicaremos conceptos básicos como Ciclos y Métodos, el algoritmo se basa en restar el dividendo con el divisor hasta que el dividendo sea mayor o igual que el divisor ó el residuo sea menor que el divisor, el cociente sera llevado por un contador; un claro ejemplo es lo siguiente:
Como se puede apreciar el proceso lo automatizamos con un ciclo, donde este nos genere el resultado, el algoritmo de este ejercicio en java es el siguiente:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 | import javax.swing.JOptionPane; public class Divisiones { public static void main(String[] args) { String c1, c2, resul; int a, b; c1 = JOptionPane.showInputDialog( null, "Dividendo : "); //pedimos el primer numero c2 = JOptionPane.showInputDialog( null, "Divisor : "); //pedimos el segundo numero a = Integer.parseInt(c1); b = Integer.parseInt(c2); resul = divRestasSuc(a, b); //asignamos el resultado a una variable para mostrarla JOptionPane.showMessageDialog(null, resul); // mostramos el resultado System.exit(0); } public static String divRestasSuc(int n1, int n2){//metodo para realizar la resta sucesiva int c=0; String ax="Dividendo: "+n1+"n" + "Divisor: "+n2; c = 0; while( n1 >= n2){ //ciclo para la resta sucesiva n1 = n1 - n2; c++; //variable cociente o resultado } ax+="nn Resultado: "+c; return ax; } } |
import javax.swing.JOptionPane; public class Divisiones { public static void main(String[] args) { String c1, c2, resul; int a, b; c1 = JOptionPane.showInputDialog( null, "Dividendo : "); //pedimos el primer numero c2 = JOptionPane.showInputDialog( null, "Divisor : "); //pedimos el segundo numero a = Integer.parseInt(c1); b = Integer.parseInt(c2); resul = divRestasSuc(a, b); //asignamos el resultado a una variable para mostrarla JOptionPane.showMessageDialog(null, resul); // mostramos el resultado System.exit(0); } public static String divRestasSuc(int n1, int n2){//metodo para realizar la resta sucesiva int c=0; String ax="Dividendo: "+n1+"n" + "Divisor: "+n2; c = 0; while( n1 >= n2){ //ciclo para la resta sucesiva n1 = n1 - n2; c++; //variable cociente o resultado } ax+="nn Resultado: "+c; return ax; } }
Si probamos la aplicación con una división de 17 en 3 (17 / 3) veremos el siguiente resultado:
División con Resta Sucesiva y Resultado con Decimales
Ahora bien, hagamos algo mas complejo este ejercicio, pongamos como requisito que se muestre el resultado con decimales si el usuario lo desea, en otras palabras, que el resultado anterior sea 5.6. Siendo este el nuevo requerimiento tendremos el siguiente algoritmo:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 | import javax.swing.JOptionPane; public class Divisiones { int D, d, C; //D = Dividendo, d = Divisor, C = Cociente public static void main(String[] args) { Divisiones trin = new Divisiones(); trin.ingrDatos(); System.exit(0); } public void ingrDatos(){ String c1, c2, ax; int op, dividendo; c1 = JOptionPane.showInputDialog( null, "Dividendo : "); //pedimos el primer numero c2 = JOptionPane.showInputDialog( null, "Divisor : "); //pedimos el segundo numero D = Integer.parseInt(c1); d = Integer.parseInt(c2); dividendo = D; C = divRestasSuc(D, d);//obtenemos el cociente ax="Dividendo: "+dividendo+"nDivisor: "+d+"n"; if(D!=0){ op = JOptionPane.showConfirmDialog(null, "Desea obtener decimales"); if(op == JOptionPane.YES_OPTION){ ax+="Resultado: "+C+","+divRestasSuc(D*10, d);//agregamos 0 (cero) al residuo y //lo dividimos entre el divisor para el primer decimal JOptionPane.showMessageDialog(null, ax); } else{ ax+="Cociente: "+C+"nResiduo: "+D; JOptionPane.showMessageDialog(null, ax); } } else{ ax+="Cociente: "+C+"nResiduo: "+D; JOptionPane.showMessageDialog(null, ax); } } public int divRestasSuc(int n1, int n2){//metodo para realizar la resta sucesiva int c=0; c = 0; while( n1 >= n2){ //ciclo para la resta sucesiva n1 = n1 - n2; c++; //variable cociente o resultado } D=n1; return c; } } |
import javax.swing.JOptionPane; public class Divisiones { int D, d, C; //D = Dividendo, d = Divisor, C = Cociente public static void main(String[] args) { Divisiones trin = new Divisiones(); trin.ingrDatos(); System.exit(0); } public void ingrDatos(){ String c1, c2, ax; int op, dividendo; c1 = JOptionPane.showInputDialog( null, "Dividendo : "); //pedimos el primer numero c2 = JOptionPane.showInputDialog( null, "Divisor : "); //pedimos el segundo numero D = Integer.parseInt(c1); d = Integer.parseInt(c2); dividendo = D; C = divRestasSuc(D, d);//obtenemos el cociente ax="Dividendo: "+dividendo+"nDivisor: "+d+"n"; if(D!=0){ op = JOptionPane.showConfirmDialog(null, "Desea obtener decimales"); if(op == JOptionPane.YES_OPTION){ ax+="Resultado: "+C+","+divRestasSuc(D*10, d);//agregamos 0 (cero) al residuo y //lo dividimos entre el divisor para el primer decimal JOptionPane.showMessageDialog(null, ax); } else{ ax+="Cociente: "+C+"nResiduo: "+D; JOptionPane.showMessageDialog(null, ax); } } else{ ax+="Cociente: "+C+"nResiduo: "+D; JOptionPane.showMessageDialog(null, ax); } } public int divRestasSuc(int n1, int n2){//metodo para realizar la resta sucesiva int c=0; c = 0; while( n1 >= n2){ //ciclo para la resta sucesiva n1 = n1 - n2; c++; //variable cociente o resultado } D=n1; return c; } }
Una vez ejecutemos el anterior código veremos el siguiente resultado:
Comparando el resultado con el de la calculadora del SO, veremos que coincide el primer dígito, si realizamos la comprobación 5,6 * 3 el resultado sera 16.8, este resultado es valido si aproximamos al siguiente valor osea, 17 🙂
public static double RestaRecursiva(double dividendo, double divisor) throws ArithmeticException{
if (divisor == 0) {
throw new ArithmeticException(«ERROR: No se puede dividir » + dividendo + » entre » + divisor);
//System.out.println(«ERROR: No se puede dividir » + dividendo + » entre » + divisor );
//return Integer.MIN_VALUE;// Error por division
} else {
if ((dividendo < divisor)) {
return 0;
} else {
// <– el valor 1 en el retorno es la correccion del sistema.
return (1 + RestaRecursiva(dividendo – divisor, divisor));
}
}
}
No me sale, a menos que este colocando mal las cantidades. Les agradezco su ayuda
Hola amigo, mirando la operación que necesitas me arroja el mismo resultado con la calculadora del SO (Windows) y la aplicación.
excelente eso no lo sabia gracias por compartir