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 17

Preguntas 6

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad? Crea una cuenta o inicia sesión.

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

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

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

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

me he esforzado bastante para lograr entender al instructor.

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 }

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.

#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