Ejercicio 04 — Función potencia(base, exp) con enteros, exp >= 0

Dificultad: amarillo · Módulo 04 (Funciones)

Enunciado

Función potencia(base, exp) con enteros, exp >= 0. Prueba con varios pares.

Diagramas de flujo

Diagrama de flujo (actividad) del ejercicio 04

Diagrama de flujo (grafo) del ejercicio 04

Cómo se resuelve

potencia(base, exp) calcula base elevado a exp multiplicando a mano, sin recurrir a pow de math.h. El prototipo es long potencia(int base, int exp);: recibe dos enteros y devuelve un long, porque una potencia crece rápido (2^10 = 1024, 10^6 = 1000000).

La mecánica es un bucle acumulador, igual que en el factorial: resultado arranca en 1 y se multiplica por base tantas veces como diga exp. El bucle for (i = 0; i < exp; i++) se repite exactamente exp veces. Si exp es 0, el bucle no se ejecuta y la función devuelve el 1 inicial, que es justo la convención base^0 = 1.

En main se prueban varios pares con dos arrays paralelos (bases[] y exps[]) recorridos a la vez: potencia(bases[i], exps[i]).

Trampa típica: usar pow(), que trabaja con double y devuelve algo como 1023.9999999998 por el redondeo de coma flotante. Para potencias de enteros, implementarla con un bucle da el resultado exacto. Ojo también con el tipo: si guardaras el resultado en int, potencias grandes desbordarían; por eso es long.

Para practicar — cópialo y complétalo

Pega este esqueleto y completa los TODO. Es la mejor forma de aprender: inténtalo antes de mirar la solución.

/*
 * Curso de C — Modulo 04: Funciones
 * Ejercicio 04 — PRACTICA (rellena los TODO)
 * Enunciado: Función potencia(base, exp) con enteros, exp >= 0. Prueba con varios pares.
 * Dificultad: amarillo
 * Compilar: gcc -std=c11 -Wall ej04_practica.c -o ej04 && ./ej04
 */
 
#include <stdio.h>
 
/* TODO: escribe el prototipo de potencia
 *   - devuelve long
 *   - recibe dos int: base y exp
 */
 
int main(void) {
    // Puedes usar esta tabla de pruebas o pedir los valores al usuario
    int bases[] = {2, 3, 5,  10, -2};
    int exps[]  = {10, 4, 3, 6,  5};
    int n = 5;
 
    /* TODO: recorre las parejas con un bucle for
     *       e imprime: "%d^%d = %ld\n"  usando potencia(bases[i], exps[i])
     */
    return 0;
}
 
/* TODO: define long potencia(int base, int exp)
 *   - caso base: exp == 0  ->  devuelve 1
 *   - caso general: multiplica base por si mismo exp veces (bucle for)
 *   - NOTA: NO uses pow() de math.h; implementalo tu
 */

Solución — cópiala y ejecútala

/*
 * Curso de C — Modulo 04: Funciones
 * Ejercicio 04 — MODELO (resuelto)
 * Enunciado: Función potencia(base, exp) con enteros, exp >= 0. Prueba con varios pares.
 * Dificultad: amarillo
 * Compilar: gcc -std=c11 -Wall ej04_modelo.c -o ej04 && ./ej04
 */
 
#include <stdio.h>
 
/* Prototipo */
long potencia(int base, int exp);
 
int main(void) {
    // Tabla de pruebas hardcodeada
    int bases[] = {2, 3, 5,  10, -2};
    int exps[]  = {10, 4, 3, 6,  5};
    int n = 5;
 
    for (int i = 0; i < n; i++) {
        printf("%d^%d = %ld\n", bases[i], exps[i], potencia(bases[i], exps[i]));
    }
    return 0;
}
 
/* Calcula base^exp de forma iterativa (exp >= 0).
 * Cualquier base^0 = 1 (incluido 0^0, por convencion). */
long potencia(int base, int exp) {
    long resultado = 1;
    for (int i = 0; i < exp; i++) {
        resultado *= base;
    }
    return resultado;
}

Ejecútalo en el navegador

▶ Abrir y ejecutar en Compiler Explorer

Se abre con la solución ya cargada; pulsa el botón de ejecutar (Run) para ver la salida. No hay que instalar nada.

Cómo usarlo

Pega el código en un fichero y ejecútalo con tu toolchain habitual (o el botón de Ejecutar de tu editor). Antes de mirar la solución, intenta completar tú el esqueleto: es la mejor forma de aprender.

Conexiones