Razones trigonometricas(C++)

Iniciado por Danyel_Casvill, 9 Junio 2011, 03:10 AM

0 Miembros y 1 Visitante están viendo este tema.

Danyel_Casvill

Hola ^^
Hola pues mi duda es simple, me han estado enseñando en el cole el teorema de pitágoras (estoy empezando noveno), y pense en hacer un programa en C++ que halle la hipotenusa, o algun cateto de un triangulo.
c^2=a^2+b^2  donde c=hipotenusa, a=cateto b=cateto.

Entonces, me han dicho que si quiero hacer potencias en c++ puedo usar math.h o hacer la funcion con un for, como?

Código (cpp) [Seleccionar]
#include <iostream>
#include <math>
int main()
{
int opc;
float c,a,b;
cout<<"  Teorema de pitagoras"<<endl<<endl;
cout<<"1.Encontrar la hipotenusa"<<endl;
cout<<"2.Encontrar cateto"<<endl;
cout<<"3.Salir"<<endl;
cin>>opc;
switch (opc)
{
 case 1:
 {
  cout<<"1.Hipotenusa:"<<endl;
  cout<<"Ingrese el cateto opuesto:";cin>>a;
  cout<<"Ingrese el cateto adyacente:";cin>>b;
  c=pow(a,2)+pow(b,2);
  cout<<"El valor de la hipotenusa es:"<<sqrt(c);
  break;
 }
 case 2:
 {
  cout<<"2.Cateto:"<<endl;
  cout<<"Ingrese el valor de la hipotenusa:";cin>>c;
  cout<<"Ingrese el valor del cateto:";cin>>b;
  a=pow(c,2)-pow(b,2);
  cout<<"El valor de la hipotenusa es:"<<sqrt(a);
  break;
 }

 default:
 return 0;
}
cin.get();cin.get();
return 0;
}

En ese código, suponiendo que a=5 y b=6, se resolveria asi:
^=potencia RC=Raíz Cuadrada
c^2=5^2+6^2
c^2=25+36
c^2=61
RCc^2=RC61 //Para despejar c
c=RC61
c=7.81

Pero en C++ no sabría como entrar la raíz cuadrada ni potencias (ademas lo de potencias lo digo por si en otro programa tenga que encontrar una potencias grande que sea ingresada por el usuario o algo por el estilo).

Pd: No es ninguna tarea, es simplemente hobbie.
adada

leogtz

Para raices se usa sqrt(), también definida en math.h o en cmath.
Código (perl) [Seleccionar]

(( 1 / 0 )) &> /dev/null || {
echo -e "stderrrrrrrrrrrrrrrrrrr";
}

http://leonardogtzr.wordpress.com/
leogutierrezramirez@gmail.com

Danyel_Casvill

  ;D Gracias!! ahora mi duda sería como hallar potencias grandes ingresadas por usuario.
Ya edite el código.
adada

pucheto

La raiz cuadrada se podria llegar a calcular usando el metodo de Biseccion y por ahi Newton sobre una cuadratica, (en particular buscas la raiz de f( x ) = x^2 - Numero). Pero lo cuento al mejor estilo anecdota por si queres investigar un poco al respecto.

Acermax

Para hayar potencias las puedes hacer con un bucle, o mediante la función pow de la librería cmath o math.h

double pow (      double base,      double exponent );
long double pow ( long double base, long double exponent );
      float pow (       float base,       float exponent );
     double pow (      double base,         int exponent );
long double pow ( long double base,         int exponent );


Si pones cmath o math.h en cplusplus.com por ejemplo puedes ver sus funciones.

Respecto al método de la bisección. Alguien a quien le acaban de explicar el teoréma de pitágoras no creo que esté capacitado para entender el método de la bisección, aunque igual me equivoco.

Died

Mmm... me vendría bien hacer ese código, me hará ponerme a programar otra vez después de estas semanas. Te tomaré prestada la idea, si lo acabo rápido y tengo ganas lo subo aquí ;)

Un saludo! Sagrini

Danyel_Casvill

#6
Gracias a todos, ya el código esta hecho

Died ¿Eres sagrini?¿Te cambiaste el nombre?
Ok toma la idea, aunque ahora estoy intentado hacer un programa que halle el seno, coseno y la tangente. Si tengo alguna duda pregunto :D

¬¬ Ok ya necesito ayuda xD

Código (cpp) [Seleccionar]
#include <iostream>
#include <math>
#define PI 3.14
int main()
{
int opc;
float co,ca,h;
cout<<"      RAZONES TRIGONOMETRICAS"<<endl<<endl;
cout<<"1.Seno"<<endl;
cout<<"2.Coseno"<<endl;
cout<<"3.Tangente"<<endl;
cout<<"4.Salir"<<endl;
cin>>opc;
switch (opc)
{
 case 1:
 {
  cout<<"1.Seno:"<<endl;
  cout<<"Ingrese el valor del cateto opuesto:";cin>>co;
  cout<<"Ingrese el valor de la hipotenusa:";cin>>h;
  ca=(co/h);//Hagan la prueba con 300/10 debería dar 5 ¿no?
  cout<<"El valor del seno es:"<<sin(ca*PI/180);
  break;
 }
}
cin.get();cin.get();
return 0;
}


El caso es que asi es como entiendo deberia hacerse, pero me da un resultado muy diferente como 0.4... Alguna sugerencia?

Aaa y otra cosa, co=cateto opuesto, ca=ct. adyacente y h=hipotenusa. En el caso de encontrar el seno, co lo utilice como resultado de la operacion.
sin=co/h  cos=ca/h  Tg=co/ca
adada

Acermax

Algo haces mal para que te de 5 como resultado xD. El seno varía entre -1 y 1 sin desplazamiento... de hecho el resultado que debería dar es 0,49 con ese 300/10.

Date cuenta que estas cuentas debes hacerlas en radianes, si no lo estás haciendo ya.

Danyel_Casvill

Ok, ya obtuve radianes, ahora para pasarlo a grados seria algo asi?
(En un triangulo rectangulo)
Código (cpp) [Seleccionar]
cout<<"1.Seno:"<<endl;
   cout<<"Ingrese el valor del cateto opuesto:";cin>>co;
   cout<<"Ingrese el valor de la hipotenusa:";cin>>h;
   ca=(co/h);
   r=sin(ca*PI/180);//r=radianes
   cout<<"El valor del seno es:"<<r*(180/PI);


Es asi o me equivoco? y, para pasarlo a minutos y segundos se multiplica la parte decimal por 60?
adada

Acermax

#9
Edito:

A ver, primero debes pasar el valor en grados a radianes, la relación es sencilla 2*PI radianes=360º. Una vez que lo pasas puedes operar en radianes. Con eso ya tienes el resultado del seno, que creo que es lo que tu quieres, o me equivoco?

Bueno, pues eso es lo que tienes guardado en "r", y ese debería ser el resultado que ti quieres y el correcto.

Otra cosa sería que quieras pasarlo a grados de nuevo, tienes que aplicar el arcoseno a "r", y el resultado convertirlo de nuevo a grados con la misma relación.