Test Foro de elhacker.net SMF 2.1

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:

#include <stdio.h>
#include "potencia.h"

int potencia (int num1, int num2);

int main ()
{

int num1 = 0;
int num2 = 0;

potencia (num1, num2);

return 0;
}


int potencia (int num1, int num2)
{

int valor ;

printf ("BASE:\n");
printf ("Introduzca un número no negativo: ");
 scanf ("\n%d", &num1);
printf ("EXPONENTE:\n");
printf ("Introduzca un número no negativo: ");
 scanf ("\n%d", &num2);

 valor = num1 ^ num2;
 printf("%d elevado a %d es %d\n", num1, num2, valor);


return valor;
}


pero no se porque esta expresión no funciona  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:

#ifndef POTENCIA_H
#define POTENCIA_H

/*Textos a utilizar en la funcion printf*/
#define T_BASE              "BASE:\n"
#define T_EXPONENTE         "EXPONENTE:\n"
#define T_RESULTADO         "%d elevado a %d es %d\n"
#define T_INTRODUZCA_NUMERO "Introduzca un numero no negativo: "

#endif
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


#include <stdio.h>
#include "potencia.h"

int potencia (int base, int exponente);

int main(){

int num1,num2;

printf(T_INTRODUZCA_NUMERO);
scanf("%d"&num1); // base
printf(T_INTRODUZCA_NUMERO);
scanf("%d", &num2); // exponente
printf(T_RESULTADO,num1,num2,potencia(num1,num2));
}

int potencia(int base, int exponente){

if(exponente == 0){
return 1;
}else{
return base*potencia(base,expontente-1);
}
}
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:

#include <stdio.h>
#include "potencia.h"

int potencia (int base, int exponente);

int main()
{
int base;
int exponente;

potencia (base,exponente);

return 0;
}


int potencia(int base, int exponente)
{
int num1;
int num2;

        printf (T_BASE);
printf (T_INTRODUZCA_NUMERO);
scanf ("%d", &num1); // base
printf (T_EXPONENTE);
printf (T_INTRODUZCA_NUMERO);
scanf ("%d", &num2); // exponente
printf (T_RESULTADO,num1,num2,potencia(num1,num2));


      if (exponente == 0)
        {
return 1;
}
      else
        {
return base*potencia(base,exponente-1);
}
}

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
Cita de: 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:
#ifndef POTENCIA_H
#define POTENCIA_H

/*Textos a utilizar en la funcion printf*/
#define T_BASE              "BASE:\n"
#define T_EXPONENTE         "EXPONENTE:\n"
#define T_RESULTADO         "%d elevado a %d es %d\n"
...
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:
printf(T_RESULTADO, a, b, c);

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.

Cita de: eaguel en 21 Noviembre 2012, 12:58 PMEl 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:
#include <stdio.h>

void potencia(void);

int main(void)
{
  potencia();
 
  return 0;
}

void potencia(void)
{
  int x;
  int y;
  long pot;
 
  puts("Indica la base:");
  scanf("%d", &x);
 
  puts("Indica el exponente:");
  scanf("%d", &y);
 
  printf("%d^^%d", x, y);
  pot = 1;
  while (y-- > 0)
     pot *= x;
  printf(" == %d\n", pot);
}


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:


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

}