Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: eaguel en 21 Noviembre 2012, 09:41 am



Título: Elevar un número a una potencia en C
Publicado por: eaguel en 21 Noviembre 2012, 09:41 am
Hola, bueno días veréis estaba haciendo este programa:
Código
  1. #include <stdio.h>
  2. #include "potencia.h"
  3.  
  4. int potencia (int num1, int num2);
  5.  
  6. int main ()
  7. {
  8.  
  9. int num1 = 0;
  10. int num2 = 0;
  11.  
  12. potencia (num1, num2);
  13.  
  14. return 0;
  15. }
  16.  
  17.  
  18. int potencia (int num1, int num2)
  19. {
  20.  
  21. int valor ;
  22.  
  23. printf ("BASE:\n");
  24. printf ("Introduzca un número no negativo: ");
  25.  scanf ("\n%d", &num1);
  26. printf ("EXPONENTE:\n");
  27. printf ("Introduzca un número no negativo: ");
  28.  scanf ("\n%d", &num2);
  29.  
  30.  valor = num1 ^ num2;
  31.  printf("%d elevado a %d es %d\n", num1, num2, valor);
  32.  
  33.  
  34. return valor;
  35. }
  36.  

pero no se porque esta expresión no funciona
Código
  1.  valor = num1 ^ num2;
¿Me podéis iluminar con vuestra sabiduría ;D?


Título: Re: Elevar un número a una potencia en C
Publicado por: тαптяα en 21 Noviembre 2012, 10:15 am
Tio eres tonto o que?

Para hacer potencias en C tienes la función pow definida en la libreria math.h

Mira los errores que te da tu compilador colega


Título: Re: Elevar un número a una potencia en C
Publicado por: тαптяα en 21 Noviembre 2012, 10:18 am
http://www.cplusplus.com/reference/clibrary/cmath/pow/


Título: Re: Elevar un número a una potencia en C
Publicado por: Ruso_x en 21 Noviembre 2012, 10:18 am
Con respecto a lo que ha dicho mi compañero añado:

Busca aqui ;D

http://en.cppreference.com/w/c/numeric/math/pow

Saludos


Título: Re: Elevar un número a una potencia en C
Publicado por: eaguel en 21 Noviembre 2012, 10:45 am
El problema esta en que no puedo usar la librería libreria math.h
sino que tengo que usar el archivo .h que me dan que contiene:
Código
  1. #ifndef POTENCIA_H
  2. #define POTENCIA_H
  3.  
  4. /*Textos a utilizar en la funcion printf*/
  5. #define T_BASE              "BASE:\n"
  6. #define T_EXPONENTE         "EXPONENTE:\n"
  7. #define T_RESULTADO         "%d elevado a %d es %d\n"
  8. #define T_INTRODUZCA_NUMERO "Introduzca un numero no negativo: "
  9.  
  10. #endif
  11.  


Título: Re: Elevar un número a una potencia en C
Publicado por: Oblivi0n en 21 Noviembre 2012, 11:43 am
Asi de simple, creo que esto debería de funcionar

Código
  1. #include <stdio.h>
  2. #include "potencia.h"
  3.  
  4. int potencia (int base, int exponente);
  5.  
  6. int main(){
  7.  
  8. int num1,num2;
  9.  
  10. printf(T_INTRODUZCA_NUMERO);
  11. scanf("%d"&num1); // base
  12. printf(T_INTRODUZCA_NUMERO);
  13. scanf("%d", &num2); // exponente
  14. printf(T_RESULTADO,num1,num2,potencia(num1,num2));
  15. }
  16.  
  17. int potencia(int base, int exponente){
  18.  
  19. if(exponente == 0){
  20. return 1;
  21. }else{
  22. return base*potencia(base,expontente-1);
  23. }
  24. }
  25.  


Título: Re: Elevar un número a una potencia en C
Publicado por: eaguel en 21 Noviembre 2012, 12:21 pm
Ahora si funciona pero ¿habría alguna posibilidad de poner los printf en la función potencia sin joderlo todo?, lo he estado intentando y se me cambian los valores.


Título: Re: Elevar un número a una potencia en C
Publicado por: Oblivi0n en 21 Noviembre 2012, 12:47 pm
Si, metiendo las variables num1 y num2 en la funcion potencia, no como parametros, en caso de querer usarlas como paramatros, haciendo uso de punteros


Título: Re: Elevar un número a una potencia en C
Publicado por: eaguel en 21 Noviembre 2012, 12:58 pm
A ver si me aclaro  :-\  que estoy ya amargao con la porquería esta  :D
He hecho esto:
Código
  1. #include <stdio.h>
  2. #include "potencia.h"
  3.  
  4. int potencia (int base, int exponente);
  5.  
  6. int main()
  7. {
  8. int base;
  9. int exponente;
  10.  
  11. potencia (base,exponente);
  12.  
  13. return 0;
  14. }
  15.  
  16.  
  17. int potencia(int base, int exponente)
  18. {
  19. int num1;
  20. int num2;
  21.  
  22.        printf (T_BASE);
  23. printf (T_INTRODUZCA_NUMERO);
  24. scanf ("%d", &num1); // base
  25. printf (T_EXPONENTE);
  26. printf (T_INTRODUZCA_NUMERO);
  27. scanf ("%d", &num2); // exponente
  28. printf (T_RESULTADO,num1,num2,potencia(num1,num2));
  29.  
  30.  
  31.      if (exponente == 0)
  32.        {
  33. return 1;
  34. }
  35.      else
  36.        {
  37. return base*potencia(base,exponente-1);
  38. }
  39. }
  40.  
El problema esta en que solo realiza printf y scanf todo el rato , para solucionarlo ¿podría introducir un blucle do-while no?
Pd: Muchas gracias por tu amabilidad y ayuda Oblivi0n


Título: Re: Elevar un número a una potencia en C
Publicado por: rir3760 en 21 Noviembre 2012, 20:29 pm
El problema esta en que no puedo usar la librería libreria math.h
sino que tengo que usar el archivo .h que me dan que contiene:
Código
  1. #ifndef POTENCIA_H
  2. #define POTENCIA_H
  3.  
  4. /*Textos a utilizar en la funcion printf*/
  5. #define T_BASE              "BASE:\n"
  6. #define T_EXPONENTE         "EXPONENTE:\n"
  7. #define T_RESULTADO         "%d elevado a %d es %d\n"
  8. ...
Honestamente como ejemplo del uso de macros en C es, de parte de tu profesor, uno muy malo.

El objetivo de las macros es hacer el código fuente mas claro y fácil de seguir y, por ello, menos propenso a los errores. Considerando eso ultimo si comparamos:
Código
  1. printf(T_RESULTADO, a, b, c);
  2.  
  3. printf("%d elevado a %d es %d\n", a, b, c);
Resulta obvio que es mas difícil detectar errores en la llamada que utiliza la macro "T_RESULTADO" que en la que utiliza la literal.

El problema esta en que solo realiza printf y scanf todo el rato , para solucionarlo ¿podría introducir un blucle do-while no?
Correcto, debes cambiar el proceso de uno recursivo a uno iterativo. También hay que cambiar la función eliminando los parámetros y cambiando su tipo de retorno a "void".

El programa con las correcciones:
Código
  1. #include <stdio.h>
  2.  
  3. void potencia(void);
  4.  
  5. int main(void)
  6. {
  7.   potencia();
  8.  
  9.   return 0;
  10. }
  11.  
  12. void potencia(void)
  13. {
  14.   int x;
  15.   int y;
  16.   long pot;
  17.  
  18.   puts("Indica la base:");
  19.   scanf("%d", &x);
  20.  
  21.   puts("Indica el exponente:");
  22.   scanf("%d", &y);
  23.  
  24.   printf("%d^^%d", x, y);
  25.   pot = 1;
  26.   while (y-- > 0)
  27.      pot *= x;
  28.   printf(" == %d\n", pot);
  29. }

Edito: el uso de las macros te toca a ti. En buen plan: yo no las toco ni con un palito.

Un saludo


Título: Re: Elevar un número a una potencia en C
Publicado por: Kuko91 en 23 Noviembre 2012, 14:34 pm
Me temo que tenemos la misma practica para entregar el lunes.. Pero no se te olvida declarar la funcion leeNumero????


Título: Re: Elevar un número a una potencia en C
Publicado por: eaguel en 24 Noviembre 2012, 15:22 pm
JeJe, si ya conseguí hacerlo con la función leeNumero y con la aportación de Oblivi0n
¿Estas en la ETSI?


Título: Re: Elevar un número a una potencia en C
Publicado por: peternash en 10 Diciembre 2012, 21:39 pm
Pero esta función de potencia no puede hacer potencias de número negativo.

Yo una vez hice este ejemplo, un poco sucio, pero que te lo comparto para ver si te sirve:

Código:
double potencia (double base, int exp)
{
double dResult;

if ((base != 0) && (exp == 0))
dResult = 1;
else if ((base == 0) && (exp > 0))
dResult = 0;
else if ((exp < 0) && (base != 0))
dResult = 1 / potencia (base, -exp);
/* else if ((exp == 0) && (base == 0)) {
double num = numeric_limits<double>::quiet_NaN();
}*/
else {
for (dResult = 1; exp > 0; exp--)
{
dResult *= base;
}
}

return dResult;
}
En principio debería permitirte hacer potencias de base positiva y negativa, y de exponente positivo y negativo.
No sé si sirve con exponentes en fracciones.

EN el caso de la potencia indeterminada 00 (cero elevado a cero) aún no lo había resuelto, pero se puede utilizar una plantilla numeric_limits  para invocar la función miembro estática, 'quiet_NaN()', o hacer un return 0.0 / 0.0.


Título: Re: Elevar un número a una potencia en C
Publicado por: aramis en 13 Mayo 2019, 23:58 pm
si no queres usar las math podes hacer lo siguiente

#include<stdio.h>

main(){
   
   int potencia=1,base,exponente,i;
   printf("ingrese numero base\n");
   scanf("%i", &base);
   printf("ingrese exponente\n");
   scanf("%i", &exponente);
   for(i=0;i<exponente;i++){
      potencia=potencia*base;
   }
   printf("la potencia es: %i\n" , potencia);

}