elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.
 
Inicio Ayuda Buscar Ingresar Registrarse
29 Mayo 2012, 02:53  


Tema destacado: Sigue las noticias más importantes de elhacker.net en ttwitter!

+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse)
| | |-+  Problema al elevar a 1/2
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Problema al elevar a 1/2  (Leído 1,142 veces)
DickGumshoe

Desconectado Desconectado

Mensajes: 145


Ver Perfil WWW
Problema al elevar a 1/2
« en: 30 Octubre 2011, 12:09 »

Hola.

Estoy haciendo un programa en C++ en el que introduces la longitud de dos catetos y te calcula la hipotenusa. Lo tengo terminado, lo único que, como todos sabemos 1/2 es 0.5. Pues bien, si pongo lo siguiente:

Código:
// Dada la longitud de dos catetos calcular la hipotenusa

#include<stdio.h>
#include<stdlib.h>
#include<math.h>

int main (void){
     float c1,c2,h;
     
      printf("Introduzca el valor de un cateto");
      scanf("%f",&c1);
     
     
      printf("Introduzca el valor del otro cateto");
      scanf("%f",&c2);
     
      h= pow (c1*c1+c2*c2,1/2);
     
      printf("El valor de la hipotenusa es %f",h);
     
    system("pause");
}

Ahí me calcula mal la hipotenusa. Sin embargo, si en la fórmula lo elevo a 0.5; sí me la calcula bien, cuando 1/2=0.5

Código:
// Dada la longitud de dos catetos calcular la hipotenusa

#include<stdio.h>
#include<stdlib.h>
#include<math.h>

int main (void){
     float c1,c2,h;
     
      printf("Introduzca el valor de un cateto");
      scanf("%f",&c1);
     
     
      printf("Introduzca el valor del otro cateto");
      scanf("%f",&c2);
     
      h= pow (c1*c1+c2*c2,0.5);
     
      printf("El valor de la hipotenusa es %f",h);
     
    system("pause");
}

Muchas gracias.


En línea
pucheto

Desconectado Desconectado

Mensajes: 214


Ver Perfil
Re: Problema al elevar a 1/2
« Respuesta #1 en: 30 Octubre 2011, 14:24 »

Tal vez haga division entera, entonces 1 / 2 no da 0.5 (en division entera da 0).
La otra posibilidad es que te calcule la division, de 0.5, y pase a entero, pudiendo dar 0 como 1, depende de como este configurado todo.


En línea
DickGumshoe

Desconectado Desconectado

Mensajes: 145


Ver Perfil WWW
Re: Problema al elevar a 1/2
« Respuesta #2 en: 30 Octubre 2011, 14:32 »

Tal vez haga division entera, entonces 1 / 2 no da 0.5 (en division entera da 0).
La otra posibilidad es que te calcule la division, de 0.5, y pase a entero, pudiendo dar 0 como 1, depende de como este configurado todo.

Cierto, he puesto el ejemplo de poner que ambos catetos son 2, y me ha dado 1, cosa que si lo elevamos a 0, da 1.

Entonces, ¿qué podría hacer para que al elevarlo a 1/2 de lo que debe dar? Aunque al elevarlo a 0.5 ya me de bien el resultado de la hipotenusa, solo es por curiosidad...

Muchas gracias ^^
En línea
[L]ord [R]NA


Desconectado Desconectado

Mensajes: 1.507


El Dictador y Verdugo de H-Sec


Ver Perfil WWW
Re: Problema al elevar a 1/2
« Respuesta #3 en: 30 Octubre 2011, 14:39 »

Existe sqrt() en math.h para hacer raices cuadradas.
En línea

тαптяαпсє


Desconectado Desconectado

Mensajes: 739


Usuario EHN


Ver Perfil
Re: Problema al elevar a 1/2
« Respuesta #4 en: 30 Octubre 2011, 14:49 »

Existe sqrt() en math.h para hacer raices cuadradas.
Es lo mismo. De hecho, creo que es más rápido pow(), aunque no puedo ponerte donde lei eso.

Cierto, he puesto el ejemplo de poner que ambos catetos son 2, y me ha dado 1, cosa que si lo elevamos a 0, da 1.

Entonces, ¿qué podría hacer para que al elevarlo a 1/2 de lo que debe dar? Aunque al elevarlo a 0.5 ya me de bien el resultado de la hipotenusa, solo es por curiosidad...

Muchas gracias ^^
Intenta a hacer esa misma division, justo una línea de ejecución antes, y haciendo la operación con float..
En línea

DickGumshoe

Desconectado Desconectado

Mensajes: 145


Ver Perfil WWW
Re: Problema al elevar a 1/2
« Respuesta #5 en: 30 Octubre 2011, 14:54 »

Es lo mismo. De hecho, creo que es más rápido pow(), aunque no puedo ponerte donde lei eso.
Intenta a hacer esa misma division, justo una línea de ejecución antes, y haciendo la operación con float..

Muchas gracias a todos.

¿Qué tendría que poner para hacer eso? Estoy iniciándome en C++, y no tengo muchos conocimientos...
En línea
naderST


Desconectado Desconectado

Mensajes: 467



Ver Perfil
Re: Problema al elevar a 1/2
« Respuesta #6 en: 30 Octubre 2011, 15:15 »

En vez de usar 1/2 usa 0.5 y ya o (float)1/2

EDIT: Tu código es puro C no tiene nada de C++
« Última modificación: 30 Octubre 2011, 15:18 por naderST » En línea
DickGumshoe

Desconectado Desconectado

Mensajes: 145


Ver Perfil WWW
Re: Problema al elevar a 1/2
« Respuesta #7 en: 30 Octubre 2011, 15:19 »

En vez de usar 1/2 usa 0.5 y ya o (float)1/2

Ah, muchísimas gracias; ya me sale bien el resultado poniendo (float)1/2 ^^

Bueno, problema resuelto. Gracias a todos.
En línea
do-while


Desconectado Desconectado

Mensajes: 604


Cuando me afeito, recuerdo porque me dejo barba.


Ver Perfil
Re: Problema al elevar a 1/2
« Respuesta #8 en: 31 Octubre 2011, 14:37 »

¡Buenas!

Cuando el operador / ve que sus dos valores son enteros, realiza la operacion entre enteros (te devolvera el cociente de la division euclidea), si quieres que realice la division entre float, alguno de sus operandos debe ser de ese tipo, lo que consigues mediante cast, o si el numero es una constante, añadiendo un punto justo despues del numero.

Las siguientes operaciones son equivalentes:
Código:

1 / 2 = 0 ( 1 = 2 * 0 + 1, por eso el resultado es cero)

((float) 1) / 2 = 0.5

1 / ((float)2) = 0.5;

1. / 2 = 0.5

1 / 2. = 0.5

1. / 2. = 0.5

Lo mismo sucede en el resto de operaciones y expresiones, los valores se convierten al tipo de dato capaz de almacenar cualquiera de los valores que aparecen en la expresion. Asi, al haber un valor float en las anteriores operaciones, el otro se convierte automaticamente a float para poder realizar la division.

Si en una expresion mezclas int, char y float, al final, el resultado sera un float, y en algun momento, los valores que forman parte de la expresion seran convertidos a float para realizar las operaciones. Lo mismo sucedera si mezclas char e int, el resultado sera un int, y en algun momento dejara de haber elementos char en al expresion, porque seran convertidos a int.

Puedes buscar informacion sobre la promocion (creo que se llamaba asi) entre los distintos tipos de dato. Si estas informado te encontraras con menos sorpresas inesperadas.

¡Saludos!
En línea

¡¡¡Feliz año nuevo!!!
DickGumshoe

Desconectado Desconectado

Mensajes: 145


Ver Perfil WWW
Re: Problema al elevar a 1/2
« Respuesta #9 en: 31 Octubre 2011, 23:12 »

Muchas gracias por la aclaración, do-while ^^
En línea
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
duda, elevar una base en su exponente (batch)
Scripting
Darioxhcx 6 3,217 Último mensaje 2 Julio 2008, 05:13
por carlitos.dll
Elevar a cualquier potencia. [Batch]
Scripting
Leo Gutiérrez. 2 2,683 Último mensaje 9 Abril 2009, 23:34
por Leo Gutiérrez.
elevar una base a una Potencia
Programación C/C++
EricCorona 6 16,242 Último mensaje 16 Mayo 2009, 19:36
por Myth.ck
[Python] elevar al cuadrado un rango.
Scripting
Meta 2 2,113 Último mensaje 12 Noviembre 2010, 11:00
por Meta
Ejercicio elevar una potencia
Ejercicios
SXF 5 4,223 Último mensaje 9 Noviembre 2011, 16:12
por landerzx
Powered by SMF 1.1.16 | SMF © 2006-2008, Simple Machines