Suma de potencias de x en Java

Más ejercicios resueltos

Si deseas revisar más ejercicios resueltos, haz click en el siguiente botón. 

A continuación presentamos la solución al problema del cálculo de la suma de potencias en Java. Si deseas ver el enunciado del problema, haz click en el siguiente enlace.

Lectura de datos

La lectura de datos en Java la realizaremos con la clase \texttt{Scanner}. Instanciamos el objeto  \texttt{reader} de dicha clase y procedemos a la lectura. Usaremos la variable \texttt{x} para leer el valor de x. Para leer el valor de n usaremos la variable \texttt{n}. Para leer la variable \texttt{x} usamos el método \texttt{nextDouble}. Para la variable \texttt{n} usaremos el método \texttt{nextInt}.

package suma_potencias_x;

import java.util.Scanner;

public class Suma_Potencias_X {

    public static void main(String[] args) {
        double x;
        int n;
        System.out.printf("Ingrese el valor de x(|x|<1): ");
        Scanner reader = new Scanner(System.in);
        x = reader.nextDouble();
        System.out.printf("Ingrese la cantidad de términos: ");
        n = reader.nextInt();
    }
} 

Validación de datos de entrada

Para implementar la validación del valor de \texttt{x} usaremos una selectiva doble. Colocaremos como condición del \texttt{if}, \texttt{abs(x)>=1}. Recuerda que el valor absoluto se obtiene usando el método \texttt{abs} el cual debe importar de \texttt{java.lang.Math.abs}.

package suma_potencias_x;

import static java.lang.Math.abs;
import java.util.Scanner;

public class Suma_Potencias_X {

    public static void main(String[] args) {
        double x;
        int n;
        System.out.printf("Ingrese el valor de x(|x|<1): ");
        Scanner reader = new Scanner(System.in);
        x = reader.nextDouble();
        System.out.printf("Ingrese la cantidad de términos: ");
        n = reader.nextInt();

        if (abs(x) >= 1) {
            System.out.printf("Valor de x incorrecto%n");
        } else {

            }
        }
    }
} 

Control de flujo de la iteración

Para el control de la iteración usaremos un ciclo iterativo con entrada controlada. La variable de control será \texttt{i}, la cual ha sido inicializada con \texttt{0}. Para el caso del incremento, se ha usado el operador unario \texttt{++}. \texttt{i++} equivale a la instrucción \texttt{i=i+1}.

package suma_potencias_x;

import static java.lang.Math.abs;
import java.util.Scanner;

public class Suma_Potencias_X {

    public static void main(String[] args) {
        double x;
        int n;
        System.out.printf("Ingrese el valor de x(|x|<1): ");
        Scanner reader = new Scanner(System.in);
        x = reader.nextDouble();
        System.out.printf("Ingrese la cantidad de términos: ");
        n = reader.nextInt();

        if (abs(x) >= 1) {
            System.out.printf("Valor de x incorrecto%n");
        } else {
            int i = 0;
            while (i < n) {

                i++;
            }
        }
    }
} 

Inicialización de la sumatoria

Para acumular los valores de la sumatoria usaremos la variable \texttt{suma}, la cual la hemos definido como un real de doble precisión (\texttt{double}). La inicializamos con el valor de \texttt{0}.

package suma_potencias_x;

import static java.lang.Math.abs;
import java.util.Scanner;

public class Suma_Potencias_X {

    public static void main(String[] args) {
        double x;
        int n;
        System.out.printf("Ingrese el valor de x(|x|<1): ");
        Scanner reader = new Scanner(System.in);
        x = reader.nextDouble();
        System.out.printf("Ingrese la cantidad de términos: ");
        n = reader.nextInt();

        if (abs(x) >= 1) {
            System.out.printf("Valor de x incorrecto%n");
        } else {
            int i = 0;
            double suma = 0;
            while (i < n) {

                i++;
            }
        }
    }
} 

Acumulando la sumatoria

Para calcular el término de la sumatoria usamos la expresión \texttt{pow(x,i)}. Recuerde que el método \texttt{pow} (disminutivo de power en inglés) permite elevar un número a cualquier potencia. Para poder usar este método, se debe importar el mismo desde \texttt{java.lang.Math.pow}.

Para la acumulación en la variable \texttt{suma}, se ha usado el operador de asignación \texttt{+=}. \texttt{suma+=pow(x,i)} equivale a la instrucción \texttt{suma=suma+pow(x,i)}.

package suma_potencias_x;

import static java.lang.Math.abs;
import static java.lang.Math.pow;
import java.util.Scanner;

public class Suma_Potencias_X {

    public static void main(String[] args) {
        double x;
        int n;
        System.out.printf("Ingrese el valor de x(|x|<1): ");
        Scanner reader = new Scanner(System.in);
        x = reader.nextDouble();
        System.out.printf("Ingrese la cantidad de términos: ");
        n = reader.nextInt();

        if (abs(x) >= 1) {
            System.out.printf("Valor de x incorrecto%n");
        } else {
            int i = 0;
            double suma = 0;
            while (i < n) {
                suma += pow(x, i);
                i++;
            }
        }
    }
} 

Mostrando el resultado final

Finalmente presentamos el valor de la sumatoria calculada, al finalizar el ciclo iterativo.

package suma_potencias_x;

import static java.lang.Math.abs;
import static java.lang.Math.pow;
import java.util.Scanner;

public class Suma_Potencias_X {

    public static void main(String[] args) {
        double x;
        int n;
        System.out.printf("Ingrese el valor de x(|x|<1): ");
        Scanner reader = new Scanner(System.in);
        x = reader.nextDouble();
        System.out.printf("Ingrese la cantidad de términos: ");
        n = reader.nextInt();

        if (abs(x) >= 1) {
            System.out.printf("Valor de x incorrecto%n");
        } else {
            int i = 0;
            double suma = 0;
            while (i < n) {
                suma += pow(x, i);
                i++;
            }
            System.out.printf("El valor de 1/(1-x) es: %f%n", suma);
        }
    }
} 

Alternativa de solución usando for

La instrucción \texttt{for} en Java funciona como un ciclo iterativo con entrada controlada. En esta instrucción, los 3 pasos para configurar el control de flujo se realizan en la misma línea, haciendo la lectura más amigable. Es por esto que es la instrucción preferida por muchos programadores.

Como podrá notar, lo único que cambia en relación al programa anterior, es el control de flujo.

package suma_potencias_x;

import java.util.Scanner;

public class Suma_Potencias_X_v2 {

    public static void main(String[] args) {
        double x;
        int n;
        System.out.printf("Ingrese el valor de x(|x|<1): ");
        Scanner reader = new Scanner(System.in);
        x = reader.nextDouble();
        System.out.printf("Ingrese la cantidad de términos: ");
        n = reader.nextInt();

        if (abs(x) >= 1) {
            System.out.printf("Valor de x incorrecto%n");
        } else {            
            double suma = 0;
            for(int i=0; i<n; i++)            
                suma += pow(x, i);               
            System.out.printf("El valor de 1/(1-x) es: %f%n", suma);
        }
    }
} 

Conclusión

Hemos presentado en este artículo, una propuesta de solución al cálculo de la suma de las potencias de x en Java. Se ha utilizado para el control de flujo la estructura iterativa y realizándose el control mediante un ciclo con entrada controlada. Podrá descargar las soluciones propuestas en el repositorio GitHub de iterando++ a través de los siguiente enlaces: para la primera versión usar este enlace  y para la segunda versión usar este enlace

Hemos preparado otros artículos adicionales en donde describimos al detalle la implementación de este problema en PSeInt y otros lenguajes de programación. Te invitamos a leer los siguientes artículos de iterando++

Si te interesa profundizar en Java, el mejor libro que hay es Effective Java de Joshua Bloch. Uno de los libros favoritos de los que se inician en Java es Java: Learn Java in One Day and Learn It Well de  Jamie Chan.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *