Tema destacado: Únete al Grupo Steam elhacker.NET
Autor
|
Tema: Duda funcíon potencia (Leído 389 veces)
|
jamatbar
Desconectado
Mensajes: 28
|
Buenas, me piden que realice un programa que use la función que calcula la potencia de un número, la función potencia la tengo que crear yo, el programa compila pero no me da el resultado bien, y quisiera saber donde me equivoco, el código es el siguiente: #include <stdio.h> float potencia (float a, float b); int main () { float base; float exponente; float valor; printf("Introduce la base de la potencia\n"); scanf("%f", &base); printf("Indique el exponente\n"); scanf("%f",&exponente); valor = potencia(base,exponente); printf("La potencia de base %f y exponente %f es %f\n", base, exponente, valor); return (0); } float potencia (float a, float b) { int i=1; float valor; for(i=0; i<=b;i++) { valor=valor*a; } return (valor); } Saludos
|
|
|
|
|
En línea
|
|
|
|
naderST
Desconectado
Mensajes: 467
|
El problema está en la función ya que no inicializas la variable valor, pero esa variable está demás porque simplemente podrías hacer a*=a y retornas a y en tu for revisa la condición de parada ya que si pones 2 a la 3 tu función hará 2 a la 4.
|
|
|
|
|
En línea
|
|
|
|
jamatbar
Desconectado
Mensajes: 28
|
El problema está en la función ya que no inicializas la variable valor, pero esa variable está demás porque simplemente podrías hacer a*=a y retornas a y en tu for revisa la condición de parada ya que si pones 2 a la 3 tu función hará 2 a la 4.
Gracias, lo he editado de la siguiente manera: #include <stdio.h> float potencia (float a, float b); int main () { float base; float exponente; float valor; printf("Introduce la base de la potencia\n"); scanf("%f", &base); printf("Indique el exponente\n"); scanf("%f",&exponente); valor = potencia(base,exponente); printf("La potencia de base %f y exponente %f es %f\n", base, exponente, valor); return (0); } float potencia (float a, float b) { int i=1; for(i=0; i<=b;i++) { a*=a; } return (a); } Pero le he puesto una base 2 y elevado a 3 y me sale 65536 :S
|
|
|
|
|
En línea
|
|
|
|
naderST
Desconectado
Mensajes: 467
|
Ah disculpa lo de a*=a no funcionaria porque a se esta alterando, vuelve a poner tu variable valor pero inicializala con el valor de a y ve multiplicándola por a.
|
|
|
|
« Última modificación: 3 Diciembre 2011, 17:12 por naderST »
|
En línea
|
|
|
|
jamatbar
Desconectado
Mensajes: 28
|
Ah disculpa lo de a*=a no funcionaria porque a se esta alterando, vuelve a poner tu variable valor pero inicializala con el valor de a y ve multiplicándola por a.
Lo he hecho, aun así sigue dando error ;S, me sale que 2 elevado a 3 da 32 #include <stdio.h> float potencia (float a, float b); int main () { float base; float exponente; float valor; printf("Introduce la base de la potencia\n"); scanf("%f", &base); printf("Indique el exponente\n"); scanf("%f",&exponente); valor = potencia(base,exponente); printf("La potencia de base %f y exponente %f es %f\n", base, exponente, valor); return (0); } float potencia (float a, float b) { int i=1; float valor=a; for(i=0; i<=b;i++) { valor*=a; } return (valor); }
|
|
|
|
|
En línea
|
|
|
|
naderST
Desconectado
Mensajes: 467
|
Es por la condición de parada de tu for float potencia(float a, float b){ float valor; int i; for(i=2,valor=a;i<=b;valor*=a,i++); return valor; }
|
|
|
|
|
En línea
|
|
|
|
jamatbar
Desconectado
Mensajes: 28
|
Muchas gracias, llevaba mucho tiempo viendo a ver cual era el fallo pero no caía
Saludos!
|
|
|
|
|
En línea
|
|
|
|
naderST
Desconectado
Mensajes: 467
|
De nada, pero pudieras usar la función powf de la librería math.h.
|
|
|
|
|
En línea
|
|
|
|
rir3760
Desconectado
Mensajes: 382
|
Aqui voy de metiche ... espero se tome de forma constructiva. No se requiere de un contador ya que el parametro indicando la potencia puede utilizarse para ese proposito. El acumulador debe empezar en 1 para tener en cuenta la potencia 0 (donde todos resultan en el valor 1). Por ejemplo: float potencia(float a, float b) { float rv; for (rv = 1.0; b > 0; b--) rv *= a; return rv; } Pero como ya comentaron mejor utilizar la funcion para ese proposito: pow cuyo prototipo se encuentra en <math.h>. Un saludo
|
|
|
|
|
En línea
|
The capacity to learn is a gift; The ability to learn is a skill; The willingness to learn is a choice. -- Rebec of Ginaz
|
|
|
jamatbar
Desconectado
Mensajes: 28
|
Sé que hay una función potencia en la biblioteca math.h, pero en el ejercicio nos piden que realicemos una de cero
Saludos
|
|
|
|
|
En línea
|
|
|
|
naderST
Desconectado
Mensajes: 467
|
Detalle muy importante rir3760 gracias por la corrección. Claro que se toma de forma constructiva en lo personal yo estoy aquí para aprender.
|
|
|
|
|
En línea
|
|
|
|
|
|