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 鈥榠鈥 inmediatamente luego de que se cumple la condici贸n del 鈥榝or鈥 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