Crea una cuenta o inicia sesión

¡Continúa aprendiendo sin ningún costo! Únete y comienza a potenciar tu carrera

Cómo usar las funciones

3/12
Recursos

Aportes 33

Preguntas 7

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad?

Ejemplo del código donde escribo 4 funciones:

  1. función putchar que escribe una letra, enviada por argumento
  2. función putstr que escribe un array de letras, enviado por argumento
  3. función power que calcula la potencia de un número, enviando un argumento base y un argumento exponente.
  4. función main donde se ejecuta el programa principal.

Notas:

  • no utilicé printf, de la libreria stdio.h
  • no utilicé bucle for sino bucle while
  • separo las declaraciones de las inicializaciones
#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

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 ❤️

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

¡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;
}

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.

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

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

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;
}```
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"
Hice mi propia version modificando el printf y agregando una variable donde almacenar el base. y renombrando el exponente. Creo que se entiende mejor asi: ```js #include <stdio.h> int power(int base, int exp); int main(){ int base = 2; int i; for (i = 0; i < 10; i++) { printf("El resultado de la potencia de %d elevado a la %d = %d\n",base, i,power(base,i)); } return 0; } //el último resultado del for es el valor que toma el return p y de vuelve como resultado de la función int power(int base, int exp){ int i, p; p = 1; for (i = 1; i <= exp; i++) { p = p * base; } return p; } ```Y recordar que como explican mas abajo tambien: En la primera iteración, el exponente cero (2⁰) es menor que la condición del for (i = 1 > n = 0), por lo que no se cumple la condición y la función devuelve 1, ya que la variable se inicializa en 1.
```js #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 es = %d\n", i, power(2, i)); return 0; } int power(int base, int n) { if(n == 0) return 1; if(n == 1) return base; return base * power(base, n - 1); } ```#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 es = %d\n", i, power(2, i));        return 0;} int power(int base, int n) {    if(n == 0)        return 1;    if(n == 1)        return base;        return base \* power(base, n - 1);}
Si a alguien le interesa como elevar un numero a una potencia arbitraria con las librerias standar del lenguaje, les dejo el codigo. ```js #include <stdio.h> #include <string.h> #define MAX 10000 // maximum size of the result void power(int base, int n, int *result, int *result_size) { result[0] = 1; // initialize result *result_size = 1; // Perform base^n for (int x = 0; x < n; x++) { int carry = 0; for (int i = 0; i < *result_size; i++) { int prod = result[i] * base + carry; result[i] = prod % 10; // Store last digit of 'prod' in result carry = prod / 10; // Put rest in carry } // Put carry in result and increase result size while (carry) { result[(*result_size)++] = carry % 10; carry = carry / 10; } } } int main() { int result[MAX]; int result_size; for (int i = 0; i < 7000; ++i) { memset(result, 0, sizeof(result)); // reset result array power(2, i, result, &result_size); printf("%d ", i); // print the result in reverse order for (int j = result_size - 1; j >= 0; j--) printf("%d", result[j]); printf("\n"); } return 0; } ```
Si a alguien le interesa como elevar un numero a una potencia arbitraria con las librerias standar del lenguaje, les dejo el codigo. ```js #include <stdio.h> #include <string.h> #define MAX 10000 // maximum size of the result void power(int base, int n, int *result, int *result_size) { result[0] = 1; // initialize result *result_size = 1; // Perform base^n for (int x = 0; x < n; x++) { int carry = 0; for (int i = 0; i < *result_size; i++) { int prod = result[i] * base + carry; result[i] = prod % 10; // Store last digit of 'prod' in result carry = prod / 10; // Put rest in carry } // Put carry in result and increase result size while (carry) { result[(*result_size)++] = carry % 10; carry = carry / 10; } } } int main() { int result[MAX]; int result_size; for (int i = 0; i < 999999; ++i) { memset(result, 0, sizeof(result)); // reset result array power(2, i, result, &result_size); printf("%d ", i); // print the result in reverse order for (int j = result_size - 1; j >= 0; j--) printf("%d", result[j]); printf("\n"); } return 0; } ```*#include* \<stdio.h>*#include* \<string.h> *#define* MAX 10000 *// maximum size of the result* void power(int *base*, int *n*, int \**result*, int \**result\_size*){    result\[0] = 1; *// initialize result*    \*result\_size = 1;     *// Perform base^n*    *for* (int x = 0; x < n; x++)    {        int carry = 0;        *for* (int i = 0; i < \*result\_size; i++)        {            int prod = result\[i] \* base + carry;            result\[i] = prod % 10; *// Store last digit of 'prod' in result*            carry = prod / 10;     *// Put rest in carry*        }         *// Put carry in result and increase result size*        *while* (carry)        {            result\[(\*result\_size)++] = carry % 10;            carry = carry / 10;        }    }} int main(){    int result\[MAX];    int result\_size;     *for* (int i = 0; i < 999999; ++i)    {        memset(result, 0, sizeof(result)); *// reset result array*        power(2, i, result, \&result\_size);         printf("%d ", i);        *// print the result in reverse order*        *for* (int j = result\_size - 1; j >= 0; j--)            printf("%d", result\[j]);        printf("\n");    }     *return* 0;}
a⁰ = 1, entonces en el for de la function debería haber como condición : `i < n;` pero hay <= lo que hace que cuando pasemos 0 como n este entrara a la bucle almenos una vez y entonces probocara p = p \* base ( 1 = 1 \* 2) Creo que este error no ha sido corregido
*/\*return-name function-name(parametrer declaration, if any){    declarations     statements }\*/* \#include \<stdio.h> int power(int base, int n); *//aqui se declara la variable y mas adelante la escribimos* 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) *//aqui escribimos la variable que previamente declaramos*{    int i, p;    p = 1;    for ( i = 1; i <= n; i++)    {        p = p \* base;    }     return p; *// siempre que tengamos una función hay que decirle que vamos a retornar para tener un resultaso adecuado.*    }

Para utilizar funciones en C, primero debes definir la función y luego llamarla en tu programa. La definición de una función consta de su tipo de retorno, su nombre y sus parámetros. Por ejemplo, una función que calcula la suma de dos números enteros se puede definir de la siguiente manera:

int sum(int a, int b) {
    return a + b;
}

Para llamar a esta función en tu programa, simplemente ingresa su nombre seguido de los argumentos que deseas pasar a la función:

int resultado = sum(3, 5);

En este ejemplo, la variable resultado contendrá el valor de 8, que es la suma de 3 y 5.

Muy buena clase

La verdad que esta clase no fue para nada clara

Funciono!

Ejemplo de forma recursiva de hacerlo

#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 piotencia =%d\n",i,power(2,i));
    }
    return 0;
    
}

int power(int base,int n){
    if (n ==0){
        return 1;
    }
    if (n==1){
        return base;
    }
    else{
        return base*power(base,n-1);
    }
}

que interesante!!!

  • Las funciones se deben declarar en la parte superior junto con las variables, ya que sirve para que el compilador sepa que esa función existe y si se usa mas adelante en el código sepa que es.
  • Siempre que se escribe código se debe decir que variables son las que se van a retornar, sino va a tomar el primer dato que se encuentre.

Después de hacer pruebas con el código del profesor; me di cuenta de que no me salía, pues 2^1 = 2; y con el código de la clase me salía 2^1 = 1; les comparto una ligera correción:

#include <stdio.h>

float power(float base, float n);

float main(){
    printf("%lf\n", power(2,1));
    return 0;
}

float power(float base, float n){
    int i;
    float p =1;
    for (i = 1; i < n; i++)
    {
        p = p * base;
    };
    return p;
}

Para aclarar algo sobre la corrida en frio, no se incrementa ‘i’ inmediatamente luego de que se cumple la condición del ‘for’ sino después de las instrucciones del bloque (después de cada ciclo).

#include <stdio.h>

// Hace la potencia de dos nuemros enteros
int power(int base, int exponente);

int main()
{
    for (int exponente = 0; exponente < 10; exponente++)
    {
        printf("%d ^ %d = %d\n", 2, exponente, power(2, exponente));
    }
    return 0;
}

int power(int base, int exponente)
{
    int resultado = 1;
    for (int i = 1; i <= exponente; i++)
    {
        resultado = base * resultado;
    }
    return resultado;
}

Este fue un ejercicio que se realizo en el Curso de Programación estructurada.

 1 #include <stdio.h>
  2 #include <stdlib.h>
  3
  4 int calcularPotencia(int base, int exponente)
  5 {
  6     int resultado = 1;
  7
  8     for (int i=1; i<=exponente; i++)
  9     {
 10         resultado *= base;
 11         printf("%i elevado a la %i = %i\n", base, i, resultado);
 12     }
 13
 14     return resultado;
 15 }
 16
 17 float convertirMoneda(float importe)
 18 {
 19     float resultado = 0.0;
 20     float tipoCambio = 20.40;
 21     resultado = importe / tipoCambio;
 22     return resultado;
 23 }
 24
 25 int main() {
 26     int opt, base, exponente;
 27     float moneda;
 28
 29     printf("Funciones:\n");
 30     printf("(1) Calcula potencia numero\n");
 31     printf("(2) Convertir pesos mexicanos a dolares\n");
 32
 33     scanf("%i", &opt);
 34
 35     switch (opt)
 36     {
 37         case 1:
 38             printf("Ingresa la base: \n");
 39             scanf("%i", &base);
 40
 41             printf("Ingresa el exponente: \n");
 42             scanf("%i", &exponente);
 43
 44             printf("El resultado es: %i \n", calcularPotencia(base, exponente));
 45             break;
 46         case 2:
 47             printf("Ingresa el importe a convertir: \n");
 48             scanf("%f", &moneda);
 49
 50             printf("El resultado es: %.2f \n", convertirMoneda(moneda));
 51             break;
 52         default:
 53             printf("opcion incorrecta");
 54     }
 55 }
#include <stdio.h>

int power(int base, int n);

int main()
{
    int base, n;
    printf("Enter base and n: ");
    scanf("%d %d", &base, &n);
    printf("%d^%d = %d\n", base, n, power(base, n));
    return 0;
}

int power(int base, int n)
{
    int result = 1;
    for (int i = 0; i < n; i++)
    {
        result *= base;
    }
    return result;
}

muy buen a clase

excelente clase las funciones ahorran muchas lineas de codigo