Suma de potencias de x en ANSI C

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 ANSI C. Si deseas ver el enunciado del problema, haz click en el siguiente enlace.

Lectura de datos

La lectura de datos en ANSI C la realizaremos con la función \texttt{scanf}. Recuerde que para poder usar esta función, se debe incluir el archivo de cabecera \texttt{stdio.h} (Standard Input Output). Usaremos la variable \texttt{x} para leer el valor de x. Para leer el valor de n usaremos la variable \texttt{n}.

#include <stdio.h>

int main() {
    double x;
    int n;
    printf("Ingrese el valor de x(|x|﹤1): ");
    scanf("%lf", &x);
    printf("Ingrese la cantidad de términos: ");
    scanf("%d", &n);
} 

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{fabs(x)>=1}. Recuerde que la función \texttt{fabs} retorna el valor absoluto de un número real y además se encuentra declarada en \texttt{math.h}.

#include <stdio.h>
#include <math.h>

int main() {
    double x;
    int n;
    printf("Ingrese el valor de x(|x|<1): ");
    scanf("%lf", &x);
    printf("Ingrese la cantidad de términos: ");
    scanf("%d", &n);

    if (fabs(x) >= 1)
        printf("Valor de x incorrecto\n");
    else {

    }
    return 0;
} 

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}.

#include <stdio.h>
#include <math.h>

int main() {
    double x;
    int n;
    printf("Ingrese el valor de x(|x|<1): ");
    scanf("%lf", &x);
    printf("Ingrese la cantidad de términos: ");
    scanf("%d", &n);

    if (fabs(x) >= 1)
        printf("Valor de x incorrecto\n");
    else {
        int i = 0;
        while (i < n) {

            i++;
        }
    }
    return 0;
} 

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}.

#include <stdio.h>
#include <math.h>

int main() {
    double x;
    int n;
    printf("Ingrese el valor de x(|x|<1): ");
    scanf("%lf", &x);
    printf("Ingrese la cantidad de términos: ");
    scanf("%d", &n);

    if (fabs(x) >= 1)
        printf("Valor de x incorrecto\n");
    else {
        int i = 0;
        double suma = 0;
        while (i < n) {

            i++;
        }
    }
    return 0;
} 

Acumulando la sumatoria

Para calcular el término de la sumatoria usamos la expresión \texttt{pow(x,i)}. Recuerde que la función \texttt{pow} (disminutivo de power en inglés) permite elevar un número a cualquier potencia. La declaración de esta función se encuentra en el archivo de cabecera \texttt{math.h}

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)}.

#include <stdio.h>
#include <math.h>

int main() {
    double x;
    int n;
    printf("Ingrese el valor de x(|x|<1): ");
    scanf("%lf", &x);
    printf("Ingrese la cantidad de términos: ");
    scanf("%d", &n);

    if (fabs(x) >= 1)
        printf("Valor de x incorrecto\n");
    else {
        int i = 0;
        double suma = 0;
        while (i < n) {
            suma += pow(x, i);
            i++;
        }
    }
    return 0;
} 

Mostrando el resultado final

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

#include <stdio.h>
#include <math.h>

int main() {
    double x;
    int n;
    printf("Ingrese el valor de x(|x|<1): ");
    scanf("%lf", &x);
    printf("Ingrese la cantidad de términos: ");
    scanf("%d", &n);

    if (fabs(x) >= 1)
        printf("Valor de x incorrecto\n");
    else {
        int i = 0;
        double suma = 0;
        while (i < n) {
            suma += pow(x, i);
            i++;
        }
        printf("El valor de 1/(1-x) es: %lf\n", suma);
    }
    return 0;
} 

Alternativa de solución usando for

La instrucción \texttt{for} en ANSI C 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.

#include <stdio.h>
#include <math.h>

int main() {
    double x;
    int n;
    printf("Ingrese el valor de x(|x|<1): ");
    scanf("%lf", &x);
    printf("Ingrese la cantidad de términos: ");
    scanf("%d", &n);

    if (fabs(x) >= 1)
        printf("Valor de x incorrecto\n");
    else {
        int i;
        double suma = 0;
        for (i = 0; i < n; i++)
            suma += pow(x, i);
        printf("El valor de 1/(1-x) es: %lf\n", suma);
    }
    return 0;
} 

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 ANSI C. 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 quieres profundizar en el lenguaje ANSI C, no hay mejor libro que C Programming Language de Brian Kernighan  y Dennis Ritchie. Es un libro clásico escrito por el creador del lenguaje C. Uno de los libros favoritos de los que inician en ANSI C es  C Programming Absolute Beginner’s Guide de Greg Perry y Dean Miller.

Deja una respuesta

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