| Ver tema anterior :: Ver siguiente tema | | Autor | Mensaje |
|---|
MasterKiller
Registrado: 26 Sep 2007 Mensajes: 13
| Publicado: 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
| Publicado: 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  _________________ Diario de un pre-informático |
| | Volver arriba | |  | guimel
Registrado: 17 Oct 2007 Mensajes: 11
| Publicado: 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
| Publicado: 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
| Publicado: 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 | |  | | |
| No puede crear mensajes No puede responder temas No puede editar sus mensajes No puede borrar sus mensajes No puede votar en encuestas
|
|
| |