/
Inicio :: Foros

 F.A.Q.F.A.Q.                  Conéctese para revisar sus mensajesConéctese para revisar sus mensajes   

funciones de potencias...

 
      Índice del Foro elrincondelc.com -> Principiantes C/C++
Ver tema anterior :: Ver siguiente tema  
AutorMensaje
MasterKiller



Registrado: 26 Sep 2007
Mensajes: 13

MensajePublicado: 22/10/2007 10:33 am
Título: funciones de potencias...

Bueno amigos...
kiero hacerles una consulta...

yo tengo 3 metodos para poder sacar la potencia de dos numeros....

Primera:
Código:

// Función que obtiene la potencia de a,b usando una función predefinida pow la cual viene incluida en la libreria math.h
Retorna la formula pow(a, b)
//------------------------------
int potencial(int a, int b)
 {     return( pow( a,b) ); }
//-----------------------------


Segunda
Código:

// Función que obtiene la potencia de a,b en forma de productos sucesivos

//----------------------------
int potencia2(int a, int b)
{ int p=1,i;
   for(i=1;i<=b;i++)
      {p = p * a;}
  return(p);
}
//---------------------------



Tercero
Código:

// Función que obtiene la potencia de ab en forma de productos recurrentes, lleva por parámetro a y b

//-----------------------------
int potencia3(int a, int b)
{ int p=0;
   if(b==1){p = a;}
else {p = a * potencia3(a, b-1);}
return(p);
}
//----------------------------


Bueno... esa son las 3 funciones que tengo para calcular la potencia... pero nesesito una cuarta forma.....
que sea distinta a estas...
nose si alguno de ustedes tienen algun otro metodo....
si alguien tiene otro metodo porfavor serian tan amable de compartirlo conmigo... se lo agradeceria....

el unico detalle es que si colocan un algoritmo... porfavor lo podrian explicar???.... para entender el concepto de como funciona.


Por ejemplo.... la segunda potencia... tiene una explicacion asi...:

// Función que obtiene la potencia de a,b en forma de productos sucesivos
• a^b = a * a * a * a * a *...* a producto b-veces
• Por ejemplo: si a= 3 y b = 6
Entonces a^b = 3^6 = 3*3*3*3*3*3 que equivale al producto de 6 veces 3
• Por lo tanto se visualiza un ciclo de 1 a b-veces la suma de a
suma = 0 //se inicializa la suma a cero


Eso es mas o menos lo que me interesa a mi!



Bueno amigos..... espero que puedan ayudarme con este problemilla!....

Se les agradece


Bye
Volver arriba
jonan_1988



Registrado: 12 Abr 2005
Mensajes: 48

MensajePublicado: 22/10/2007 11:57 am
Título:

Podría hacerse con sumas sucesivas, mejor con un ejemplo:

2^3 = 2*2*2 = (2+2)*2 = (2+2)+(2+2)

Espero que haya quedado claro, el algoritmo te lo dejo como ejercicio personal Laughing
_________________
Diario de un pre-informático
Volver arriba
guimel



Registrado: 17 Oct 2007
Mensajes: 11

MensajePublicado: 22/10/2007 1:10 pm
Título:

Hola,
A ver qué te parece este:

Una potencia a^n puede expresarse como a^(n/2) * a^(n/2) si n es un número par o como a * a^(n/2) * a^(n/2). Esto permite una solución recursiva mejorada que ahorra aproximadamente la mitad de productos.

El siguiente código se puede afinar más, pero es suficiente para ilustrar la idea:

Código:


int potencia( int a, unsigned b );
int potaux( int a, unsigned b);


int potaux( int a, unsigned b)
{
   unsigned subpot = b/2;

   int res;

   if ( subpot > 1 )
   {
      int tmp = potencia( a, subpot);
      res = tmp * tmp;
   }
   else
   {               
      if ( b == 2 )
      {
         res = a * a;
      }
      else
      {
         res = 1;
      }
   }

   return( res );
}
int potencia( int a, unsigned b )
{
   int res;

   if (b & 1)
   {
      if ( b == 1 )
      {
         res = a;
      }
      else
      {
         res = a * potaux(a, b-1 );
      }
   }
   else
   {
      res = potaux(a, b);
   }

   return res;
}




Habría que invocar a la funcion potencia(a, b) para elevar a a b. Esta función sólo se encarga de filtrar los casos especiales:

1- Que el exponente sea impar - devuelve a * potaux(a, b-1)
2- Que el exponente sea 1 - devuelve a
3- Que el exponente sea 0 - devuelve 1


En cuanto a potaux, es la función que eleva A a B, siendo B un exponente positivo par.
_________________
Las ciencias de la computación están tan poco relacionadas con las computadoras como la astronomía con los telescopios

Edsger Dijkstra
Volver arriba
digies



Registrado: 18 Nov 2005
Mensajes: 240
Ubicación: Cono Sur

MensajePublicado: 22/10/2007 3:59 pm
Título:

Tal vez otra manera de hacerlo es utilizando las propiedades logarítmicas y exponenciales, y relacionarlas a ambas mediante una fórmula matemática.

Un saludo
Volver arriba
MasterKiller



Registrado: 26 Sep 2007
Mensajes: 13

MensajePublicado: 22/10/2007 8:01 pm
Título:

Muchas gracias amigos...
tenia una idea de hacerlo por suma sucesiva....
pero no sabia como era...
pero gracias por todo!......

Volver arriba
      Índice del Foro elrincondelc.com -> Principiantes C/C++
Página 1 de 1Todas las horas están en GMT - 8 Horas

 
No puede crear mensajes
No puede responder temas
No puede editar sus mensajes
No puede borrar sus mensajes
No puede votar en encuestas

(c) ElRincondelC.com

Un proyecto de UrlanHeat.com