elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Los 10 CVE más críticos (peligrosos) de 2020


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  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 7,696 veces)
DickGumshoe


Desconectado Desconectado

Mensajes: 480



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

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: 215


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

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: 480



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

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.513

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 pm »

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

тαптяα


Desconectado Desconectado

Mensajes: 1.151


Sic utere tuo ut alienum non laeda


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

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: 480



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

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: 625



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

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 pm por naderST » En línea

DickGumshoe


Desconectado Desconectado

Mensajes: 480



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

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: 1.276


¿Habra que sacarla de paseo?


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

¡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

- Doctor, confundo los números y los colores.
- Vaya marrón.
- ¿Marrón? ¡Por el culo te la hinco!
DickGumshoe


Desconectado Desconectado

Mensajes: 480



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

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
Elevar a cualquier potencia. [Batch]
Scripting
leogtz 2 10,727 Último mensaje 9 Abril 2009, 23:34 pm
por leogtz
[Python] elevar al cuadrado un rango.
Scripting
Meta 2 20,171 Último mensaje 12 Noviembre 2010, 11:00 am
por Meta
Ejercicio elevar una potencia
Ejercicios
SXF 5 21,925 Último mensaje 9 Noviembre 2011, 16:12 pm
por landerzx
Elevar un número a una potencia en C « 1 2 »
Programación C/C++
eaguel 13 59,683 Último mensaje 13 Mayo 2019, 23:58 pm
por aramis
elevar al cuadrado y al cubo
Programación C/C++
estudiante_1 5 5,328 Último mensaje 19 Agosto 2015, 23:20 pm
por furciorifa
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines