Función power en C: potencias con for loop
Clase 3 de 12 • Curso de Funciones en C
Contenido del curso
Clase 3 de 12 • Curso de Funciones en C
Contenido del curso
Jesús Ignacio García Fernández
Juan Pablo Perez
Irving Juárez
Víctor Hugo Morales Martínez
Franco Pignanelli
Brandon Argel Verdeja Domínguez
Luis Alejandro Vera Hernandez
bruno guerra solano
Cristian Blandon
Javi Felices
Adrián de los Reyes
Raúl Esteban Santacruz Gómez
Sebastian Garcia Ospina
Matias Arce
Iván Roberto Rivas Celeita
Leandro Tenjo
Anthony Smith Quispe De la cruz
Leandro Tenjo
José Manuel Sánchez Lazo
Pol Valle
Santiago Tellez Hernandez
Camila Balbuena
Leonardo Véliz
Irving Juárez
Eban Sayago Melián
Hector Murcia Forero
Gabriel Obregón
Eduardo Vladimir Azanza Lutsak
Juana Saavedra
CRISTIAN BARBERO PÉREZ
Jose Fernando Peréz
FABIAN PEREZ
Ejemplo del código donde escribo 4 funciones:
Notas:
#include <unistd.h> void putchar(char a) { write(1, &a, 1); } void putstr(char *a) { int i; i = 0; while(a[i] != '\0') { putchar(a[i]); i++; } } int power (int base, int n) { int i; int resultado; i = 0; resultado = 1; while (i++ < n) { resultado *= base; } return (resultado); } int main (void) { int i; i = 0; while(i < 4) { putstr("i = "); putchar('0' + i); putstr(" resultado de la potencia = "); putchar('0' + power(2,i)); putchar('\n'); i++; } return (0); }
resultado
i = 0 resultado de la potencia = 1 i = 1 resultado de la potencia = 2 i = 2 resultado de la potencia = 4 i = 3 resultado de la potencia = 8
Bonito ejemplo.
Esta bien que utilices el while en vez del for, digo, para practicar, pero como sabemos cuantos van a ser las veces que vamos a iterar el bucle, no tiene mucho sentido usarlo
El código está bien, el único problema es que es a la hora de llamar la función el profesor volteo los parámetros cambiando de lugar el exponente y la base.
Debería ser así:
// i = base, exp = exponente printf("n = %d, El resultado de la potencia a la %i es = %d\n",i,exp,power(i,exp));
Suerte <3
Claro, y si además nombraba a la variable N como exponente sería todo mas claro y tendrían una mejor clase
Con el código que está en los archivos y enlaces no da el resultado que debería, está un 0 en vez de un 1, les paso el código con la función funcionando correctamente y unos pequeños cambios😄
#include <stdio.h> int power(int base, int n); int main() { int i, n = 2; for (i = 0; i < 10; i++) { printf("%d ^ %d = %d\n",n , i, power(n,i)); } return 0; } int power(int base, int n) { int i, p; p = 1; for (i = 1; i <= n; i++) { p = p * base; } return p; }
Gracias!
si ya se me hacia raro, tanto a si que me hizo reconsiderar mis bases en matemáticas
¡Hola! Les comparto una bella implementación recursiva :) Aquí el Repl.
#include <stdio.h> int numberPower(unsigned int base, unsigned int exponente){ if(exponente == 0) return 1; if(exponente == 1) return base; return base * numberPower(base, exponente - 1); } int main(void) { unsigned int base; unsigned int exponente; int resultado; printf("Ingresa la base:\n"); scanf("%u", &base); printf("Ingresa el exponente:\n"); scanf("%u", &exponente); resultado = numberPower(base, exponente); printf("\nEl resultado es: %d", resultado); return 0; }
Muy práctico y muy bien llevado el ejemplo, gracias :)
No me parecio un buen ejemplo la verdad, se pierde el hilo de lo que se quiere explicar
me he esforzado bastante para lograr entender al instructor.
Es que siento que no se da a entender mucho, deberia utilizar programas que a uno le ayuden a que sea mas sencillo, power point, cualquier cosa
Cómo usar las funciones
Primero que nada debemos mencionar que como buena practica declaramos las funciones arriba del main y abajo de este las declaramos para darle más orden. Es decir, arriba solo la nombramos con sus parametros y abajo con su codigo completo.
Para llamar una función escribimos su nombre, luego parentesis y los parametros a enviar en caso que los tenga.
Ejemplo de uso:
#include <stdio.h> int power(int base, int n); int main() { int i; for (i = 0; i < 10; i++) { printf("n = %d El resultado de la potencia = %d\n",i, power(2,i) ); } return 0; } int power(int base, int n) { int i, p; p = 1; for (i = 1; i <= n; i++) { p = p * base; } return p; }
en python o javascript primero se declaran (construyen) y luego se invocan o ejecutan
¿Por qué no declarar e inicializar la función en un solo lugar?
Lo que hace el profesor es una convención de C, pero también puedes declararlas e inicializarlas por supuesto. Hay que decir que en C cuando estas trabajando con varios módulos de códigos tendrás que generar dos archivos:
En los ficheros de cabecera lo que harás será declarar los prototipos de la función y en los ficheros de implementación se escribe los cuerpos de nuestras funciones.
Excelente dato. Gracias. Si había probado que si servia, pero no sabia si era una mala practica o algo así.
También es valido poner solo el tipo de dato en los parámetros dónde se declara la función:
int potencyOfNumber(int, int); //Se declara la función
Y como sabras luego cual es la variable que tendras que usar?
No sé para qué pago esto, entiendo mejor en youtube
Buena explicación de cómo funcionan las potencias pero se te olvidó que TODO número elevado a n potencia SIEMPRE comienza elevándose por el exponente CERO (0), tal cual como aparece en tu código, en la primera iteración el exponente cero (2⁰) es MENOR (i =1 > n = 0) que la condición del for, por lo tanto en esta primera vuelta no se cumple la condición y da 1 porque la variable está inicializada en 1 al inicio de la función. Podrá ser un dato poco interesante porque en la práctica nunca elevamos el exponente a la cero pero tuve que ver la explicación dos veces para entender cómo funciona ya que hasta ahora no había entendido porque todo número elevado a la cero siempre daba uno y el código que escribiste en la función de la potencia lo explica perfectamente bien.
Les dejo mi ejemplo, yo lo hice un poco mas didáctico
#include <stdio.h> int potencia(int base, int potencia){ unsigned int resultado = base; for(int i = 1; i < potencia; i++){ resultado *= base; } return resultado; } int main(void){ int base, power; printf("Ingresa la base: "); scanf("%d", &base); printf("Ingresa la potencia: "); scanf("%d", &power); printf("El resultado es: %d \n", potencia(base, power)); return 0; }
Agregué al código la posibilidad de elegir la base y el exponente. Ademas, trabajé con un ciclo while, que me resulta mas cómodo para este tipo de operaciones.
#include <stdio.h> int power(int base, int n); int main() { int i; printf("Eliga la base para la potencia: "); scanf("%d", &i); int p; printf("Ahora, elija el exponente: "); scanf("%d", &p); printf("El numero elegido es %d, el exponente %d, por lo tanto el resultado de la potencia es %d\n", i, p, power(i, p)); return 0; } int power(int base, int e) { int i = 1, result = 0; while (i<e) { if (result<base) { result = base * base; } else { result = result * base; } i++; } return result; }```
La declaración de función se requiere solamente para evitar la generación de errores al compilar, solo en algunos casos, al no considerar el orden en que se definen las funciones. Veamos ejemplos para comprender:
#include <stdio.h> void repetir_potencia(int base, int pot1, int pot2) { for (int i = pot1; i <= pot2; i++) printf("%d elevado a la %d es igual a %d\n", base, i, potencia(base, i)); } int potencia(int base, int ex) { if (base == 0 && ex == 0) { printf("Error: base y potencia iguales a cero!\n"); return -1; } if (ex < 0) { printf("Error: potencia menor a cero!\n"); return -2; } int result = 1; while (ex--) result *= base; return result; } int main() { int t; t = potencia(0, 0); t = potencia(0, -1); int b = 3, p = 3; t = potencia(b, p); printf("%d elevado a la %d es igual a %d.\n", b, p, t); repetir_potencia(2, 0, 4); return 0; }
En el ejemplo anterior se genera error al compilar debido a que la función llamada (potencia) está definida después de la función llamadora (repetir_potencia). Si se intercambia el orden de sus definiciones el error desaparece.
Los anterior evidencia que toda función llamada debe definirse antes de la función llamadora y esto suele ser un dolor de cabeza en casos en que se incrementa la cantidad de funciones que se llaman entre sí. La solución es sencilla: declarar todas las funciones al comienzo y posteriormente definirlas en cualquier orden. Ya no se presentará dicho problema.
#include <stdio.h> void repetir_potencia(int, int, int); int potencia(int, int); void repetir_potencia(int base, int pot1, int pot2) { for (int i = pot1; i <= pot2; i++) printf("%d elevado a la %d es igual a %d\n", base, i, potencia(base, i)); } int potencia(int base, int ex) { if (base == 0 && ex == 0) { printf("Error: base y potencia iguales a cero!\n"); return -1; } if (ex < 0) { printf("Error: potencia menor a cero!\n"); return -2; } int result = 1; while (ex--) result *= base; return result; } int main() { int t; t = potencia(0, 0); t = potencia(0, -1); int b = 3, p = 3; t = potencia(b, p); printf("%d elevado a la %d es igual a %d.\n", b, p, t); repetir_potencia(2, 0, 4); return 0; }
📘Función power en C
🏷️ Declaración inicial
#include <stdio.h>
int power(int base, int n);
🔹 Se incluye la librería estándar de entrada/salida.
🔹 Se declara la función power que calculará potencias.
🛠️ Función main
📌 Qué hace: controla el programa y muestra resultados.
🔄 Bucle for (i = 0 → 9):
➡️ Llama a power(2, i)
➡️ Imprime en pantalla:
n = <i> El resultado de la potencia = <resultado>
👉 Objetivo: mostrar las potencias de 2 desde 202^0 hasta 292^9.
⚡ Función power
int power(int base, int n)
{
int i, p;
p = 1;
for (i = 1; i <= n; i++)
{
p = p * base;
}
return p;
}
🔎 Paso a paso
👉 Traducción matemática:
power(base,n)=basenpower(base, n) = base^n
🖥️ Ejemplo de salida en consola
n = 0 El resultado de la potencia = 1
n = 1 El resultado de la potencia = 2
n = 2 El resultado de la potencia = 4
n = 3 El resultado de la potencia = 8
...
n = 9 El resultado de la potencia = 512
💡 Idea clave
🔹 La función power implementa el cálculo de potencias a mano con un bucle multiplicativo.
🔹 Muestra cómo construir una operación matemática sin usar la función pow() de <math.h>.
Alguien me podría ayudar con la explicacion del porque:
i <= n? n no es igual a cero y i igual a 1?
O que valor toma n en la primera iteración?
Como puedo integrar un scanf al código? Es decir, para que el valor de la base lo ponga el usuario
Hola, lo puedes hacer así:
int base; printf("Ingresa la base por favor: "); scanf("%d", &base);
Le quite la función que se declaro al principio debajo de la biblioteca de pronto porque en la ultima version de C, C23 ya no es necesario, al retirarla funcion de esa zona permitio compilar y lo hizo correctamente.
Supongo que se usa un ciclo for para introducirnos en los ciclos, pero se pudo haber hecho mucho mas sencillo elevando la potencia a la "n"