| Ver tema anterior :: Ver siguiente tema |
| Autor | Mensaje |
|---|
Klamus

Registrado: 12 Nov 2007 Mensajes: 2
| Publicado: 12/11/2007 10:55 am | | | Título: Problemas con Potencias en C |
| Hola a todos!! Tengo problemas con un ejercicio, es el siguiente:
Realiza un algoritmo que calcule la potencia, para ello pide por teclado la base y el exponente. Peden ocurrir tres cosas:
a) El exponente sea positivo, sólo tienes que imprimir la potencia. b) El exponente sea 0, el resultado es 1. c) El exponente sea negativo, el resultado es 1/potencia con el exponente positivo.
La cuestion es que no se hacer potencias en C, si alguien me puede ayudar se lo agradeceria ^^. |
|
| Volver arriba | |
 |
rir3760

Registrado: 01 Oct 2004 Mensajes: 3770 Ubicación: Mexico
| Publicado: 12/11/2007 11:02 am | | | Título: |
| Para calcular las potencias manualmente solo tienes que multiplicar el numero por si mismo cuantas veces sean necesarias. Si quieres orientarte mediante programas de otros solo tienes que utilizar el motor de busqueda, calculo que debe existir una media docena de ejemplos sobre potencias en la base de datos de los foros.
Para exponentes negativos el proceso es similar y siguiendo el enunciado solo tienes primero que calcular el resultado con el exponente positivo y a continuacion dividir 1.0 entre ese resultado.
Un saludo _________________ The capacity to learn is a gift; The ability to learn is a skill; The willingness to learn is a choice. -- Rebec of Ginaz |
|
| Volver arriba | |
 |
Klamus

Registrado: 12 Nov 2007 Mensajes: 2
| Publicado: 12/11/2007 11:21 am | | | Título: |
| Gracias por la respuesta, al final lo he hecho así:
| Código: | #include <stdio.h> #include <stdlib.h> #include <math.h>
int main() { int base; int exponente; int resultado; printf("Bienvenido a la calculadora de potencias\n"); printf("Introduzca la base\n"); scanf("%d",&base); printf("Introduzca el exponente\n"); scanf("%d",&exponente);
if(exponente>0) { resultado=pow(base,exponente); printf("El resultado es: %d\n",resultado); } if(exponente==0) { resultado=pow(base,exponente); printf("El resultado de la potencia es 1\n"); } if(exponente<0) { exponente=exponente*-1; resultado=pow(base,exponente); printf("El resultado de la potencia es 1/%d\n",resultado); } system("pause"); }
|
¿Que os parece, es la mejor opcion de hacerlo o es mejor de hacerlo de otra manera? Gracias |
|
| Volver arriba | |
 |
|
david_celta
Registrado: 02 Jun 2005 Mensajes: 95
| Publicado: 12/11/2007 2:27 pm | | | Título: |
| exponente=exponente*-1; exponente=0-exponente; exponente=-exponente;
| Código: | if(exponente==0) { //resultado=pow(base,exponente); printf("El resultado de la potencia es 1\n"); }
|
Nota: Si no usas la variable resultado, no la calcules (mira donde dice // significa que esa linea no es necesaria)
Tambien esto:
| Código: | printf("El resultado de la potencia es %f\n",(float)(1/resultado));
|
_________________ Rueda y rueda la vida, rueda y rueda el balón... y detras de la esperanza, palpita cada corazón. |
|
| Volver arriba | |
 |
LunatikO
Registrado: 24 Sep 2007 Mensajes: 9 Ubicación: La Luna (de Valencia)
| Publicado: 12/11/2007 2:35 pm | | | Título: |
| | Klamus escribió: | | ¿Que os parece, es la mejor opcion de hacerlo o es mejor de hacerlo de otra manera? |
Si es un ejercicio de clase, depende de lo que te hayan pedido. Si te piden (o estás dando el tema) bubles, pues tendrás que hacerlo con bucles (el exponente en este caso sólo podrá ser entero). Si estás dando math.h, pues pow va que ni pintado.
Y, si no es el caso (me refiero a que no sea un ejercicio de clase) pues entonces sí, utiliza pow, sin duda.
Salu2. _________________ Comité Contra las Faltas Voluntarias y el Lenguaje SMS: |
|
| Volver arriba | |
 |
rir3760

Registrado: 01 Oct 2004 Mensajes: 3770 Ubicación: Mexico
| Publicado: 12/11/2007 4:06 pm | | | Título: |
| Espero que no te moleste: por favor cambia de avatar, esto porque los avatares (las pequeñas imagenes utilizadas para identificar a los usuarios) deben ser imagenes pequeñas ya que todavia hay muchos usuarios con una coneccion de velocidad limitada. En otras palabras no es correcto utilizar imagenes animadas de un megabyte (como es tu caso) como avatar.
En cuanto al programa lo que debes calcular primero es el resultado, a continuacion verificas si el exponente es no negativo y si ese es el caso simplemente imprime el resultado. Caso contrario imprimes el valor 1.0 / resultado.
El programa corregido seria asi:
| Código: | #include <stdio.h> #include <stdlib.h>
int main(void) { int base; int exponente; double resultado; int i, j; printf("Introduzca la base: "); fflush(stdout); if (scanf("%d",&base) != 1) return EXIT_FAILURE; printf("Introduzca el exponente: "); fflush(stdout); if (scanf("%d", &exponente) != 1) return EXIT_FAILURE; /* Calcular el resultado con un exponente no negativo */ resultado = 1.0; j = (exponente >= 0) ? exponente : -exponente; for (i = 0; i < j; i++) resultado *= base; /* Ajustar el resultado en base al signo del exponente */ if (exponente < 0) resultado = 1.0 / resultado; printf("%d ^^ %d == %f\n", base, exponente, resultado); system("pause"); return EXIT_SUCCESS; } |
Un saludo _________________ The capacity to learn is a gift; The ability to learn is a skill; The willingness to learn is a choice. -- Rebec of Ginaz |
|
| Volver arriba | |
 |
|
Maul
Registrado: 13 Nov 2007 Mensajes: 4 Ubicación: Mexico DF
| Publicado: 13/11/2007 4:06 pm | | | Título: |
| Buenas tardes.
quitense de broncas, la funcion pow() puede calcular potencias de cualquier numero a cualqueir exponente, su forma es la siguiente
pow(base,exponente)
y se usa con el archivo de cabecera math.h
y es algo asi
#include <math.h>
area=3.14*pow(radio,2); aqui estas haciendo que el pi, se multiplique por radio al cuadrado, si te fijas, puse, pow y el radio es un valor ingresado, como se multiplica por si mismo 2 veces, mejor le puse el 2
espero te sirva y le captes de volada |
|
| Volver arriba | |
 |
rir3760

Registrado: 01 Oct 2004 Mensajes: 3770 Ubicación: Mexico
| Publicado: 14/11/2007 6:47 am | | | Título: |
| Lo ideal seria el uso de la funcion pow pero me parece, en base al enunciado que presenta, que debe calcular la potencia manualmente, si pow fuera una opcion aceptable no le habrian indicado como calcular las potencias positivas, cero y negativas.
Un saludo _________________ The capacity to learn is a gift; The ability to learn is a skill; The willingness to learn is a choice. -- Rebec of Ginaz |
|
| Volver arriba | |
 |
|
|