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 20

Preguntas 6

Ordenar por:

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

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

me he esforzado bastante para lograr entender al instructor.

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

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

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

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