e elevado a la x en 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 e^x 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: ");
    scanf("%lf", &x);
    printf("Ingrese la cantidad de términos: ");
    scanf("%d", &n);

    return 0;
} 

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{n>=24}

#include <stdio.h>

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

    if (n >= 24)
        printf("La cantidad de términos debe ser menor a 24\n");
    else {

    }
    return 0;
}
 

Control de flujo de la iteración

Para el control de la iteración usaremos un ciclo iterativo con salida 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>

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

    if (n >= 24)
        printf("La cantidad de términos debe ser menor a 24\n");
    else {
        int i = 0;
        do {

            i++;
        } while (i < n);
    }
    return 0;
} 

Inicialización de la sumatoria​

Para acumular los valores de la sumatoria usaremos la variable \texttt{sumatoria}, 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>

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

    if (n >= 24)
        printf("La cantidad de términos debe ser menor a 24\n");
    else {
        int i = 0;
        double sumatoria = 0;
        do {

            i++;
        } while (i < n);
    }
    return 0;
} 

Calculando el factorial

Procedemos ahora a calcular el factorial. A pesar que el factorial por su definición es un número natural, la hemos representado como un número real de doble precisión (\texttt{double}). ¿Por qué hemos hecho esto? Pues el real de doble precisión tiene más rango de representación que el entero (\texttt{int}) y el entero largo (\texttt{long}). 

Para la productoria en la variable \texttt{factorial}, se ha usado el operador de asignación \texttt{*=}. \texttt{factorial*=i} equivale a la instrucción \texttt{factorial=factorial*i}.

#include <stdio.h>

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

    if (n >= 24)
        printf("La cantidad de términos debe ser menor a 24\n");
    else {
        int i = 0;
        double sumatoria = 0;
        double factorial = 1;
        do {
            if (i != 0)
                factorial *= i;
            i++;
        } while (i < n);
    }
    return 0;
} 

Acumulando la sumatoria

Para calcular el término de la sumatoria usamos la expresión \texttt{pow(x,i)/factorial}. 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{sumatoria}, se ha usado el operador de asignación \texttt{+=}. \texttt{sumatoria += pow(x,i)/factorial} equivale a la instrucción \texttt{sumatoria = sumatoria + pow(x,i)/factorial}

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

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

    if (n >= 24)
        printf("La cantidad de términos debe ser menor a 24\n");
    else {
        int i = 0;
        double sumatoria = 0;
        double factorial = 1;
        do {
            if (i != 0)
                factorial *= i;
            sumatoria += pow(x, i) / factorial;
            i++;
        } while (i < n);
    }
    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: ");
    scanf("%lf", &x);
    printf("Ingrese la cantidad de términos: ");
    scanf("%d", &n);

    if (n >= 24)
        printf("La cantidad de términos debe ser menor a 24\n");
    else {
        int i = 0;
        double sumatoria = 0;
        double factorial = 1;
        do {
            if (i != 0)
                factorial *= i;
            sumatoria += pow(x, i) / factorial;
            i++;
        } while (i < n);
        printf("e^x = %lf\n", sumatoria);
    }
    return 0;
} 

Conclusión

Hemos presentado en este artículo, una propuesta de solución al cálculo de la e elevado a la x en ANSI C. Se ha utilizado para el control de flujo la estructura iterativa y realizándose el control mediante un ciclo con salida controlada. Podrá descargar las soluciones propuestas en el repositorio GitHub de iterando++ a través del siguiente 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 *