Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: Danyel_Casvill en 9 Junio 2011, 03:10 am



Título: Razones trigonometricas(C++)
Publicado por: Danyel_Casvill en 9 Junio 2011, 03:10 am
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
  1. #include <iostream>
  2. #include <math>
  3. int main()
  4. {
  5. int opc;
  6. float c,a,b;
  7. cout<<"  Teorema de pitagoras"<<endl<<endl;
  8. cout<<"1.Encontrar la hipotenusa"<<endl;
  9. cout<<"2.Encontrar cateto"<<endl;
  10. cout<<"3.Salir"<<endl;
  11. cin>>opc;
  12. switch (opc)
  13. {
  14.  case 1:
  15.  {
  16.   cout<<"1.Hipotenusa:"<<endl;
  17.   cout<<"Ingrese el cateto opuesto:";cin>>a;
  18.   cout<<"Ingrese el cateto adyacente:";cin>>b;
  19.   c=pow(a,2)+pow(b,2);
  20.   cout<<"El valor de la hipotenusa es:"<<sqrt(c);
  21.   break;
  22.  }
  23.  case 2:
  24.  {
  25.   cout<<"2.Cateto:"<<endl;
  26.   cout<<"Ingrese el valor de la hipotenusa:";cin>>c;
  27.   cout<<"Ingrese el valor del cateto:";cin>>b;
  28.   a=pow(c,2)-pow(b,2);
  29.   cout<<"El valor de la hipotenusa es:"<<sqrt(a);
  30.   break;
  31.  }
  32.  
  33.  default:
  34.  return 0;
  35. }
  36. cin.get();cin.get();
  37. return 0;
  38. }
  39.  
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.


Título: Re: Raices y Potencias (C++)
Publicado por: leogtz en 9 Junio 2011, 03:12 am
Para raices se usa sqrt(), también definida en math.h o en cmath.


Título: Re: Raices y Potencias (C++)
Publicado por: Danyel_Casvill en 9 Junio 2011, 03:35 am
  ;D Gracias!! ahora mi duda sería como hallar potencias grandes ingresadas por usuario.
Ya edite el código.


Título: Re: Raices y Potencias (C++)
Publicado por: pucheto en 9 Junio 2011, 03:41 am
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.


Título: Re: Raices y Potencias (C++)
Publicado por: Acermax en 9 Junio 2011, 03:56 am
Para hayar potencias las puedes hacer con un bucle, o mediante la función pow de la librería cmath o math.h
Código:
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.


Título: Re: Raices y Potencias (C++)
Publicado por: Died en 9 Junio 2011, 16:57 pm
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


Título: Re: Raices y Potencias (C++)
Publicado por: Danyel_Casvill en 9 Junio 2011, 17:50 pm
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
  1. #include <iostream>
  2. #include <math>
  3. #define PI 3.14
  4. int main()
  5. {
  6. int opc;
  7. float co,ca,h;
  8. cout<<"      RAZONES TRIGONOMETRICAS"<<endl<<endl;
  9. cout<<"1.Seno"<<endl;
  10. cout<<"2.Coseno"<<endl;
  11. cout<<"3.Tangente"<<endl;
  12. cout<<"4.Salir"<<endl;
  13. cin>>opc;
  14. switch (opc)
  15. {
  16.  case 1:
  17.  {
  18.   cout<<"1.Seno:"<<endl;
  19.   cout<<"Ingrese el valor del cateto opuesto:";cin>>co;
  20.   cout<<"Ingrese el valor de la hipotenusa:";cin>>h;
  21.   ca=(co/h);//Hagan la prueba con 300/10 debería dar 5 ¿no?
  22.   cout<<"El valor del seno es:"<<sin(ca*PI/180);
  23.   break;
  24.  }
  25. }
  26. cin.get();cin.get();
  27. return 0;
  28. }

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


Título: Re: Raices y Potencias (C++)
Publicado por: Acermax en 9 Junio 2011, 18:38 pm
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.


Título: Re: Raices y Potencias (C++)
Publicado por: Danyel_Casvill en 9 Junio 2011, 20:50 pm
Ok, ya obtuve radianes, ahora para pasarlo a grados seria algo asi?
(En un triangulo rectangulo)
Código
  1. cout<<"1.Seno:"<<endl;
  2.   cout<<"Ingrese el valor del cateto opuesto:";cin>>co;
  3.   cout<<"Ingrese el valor de la hipotenusa:";cin>>h;
  4.   ca=(co/h);
  5.   r=sin(ca*PI/180);//r=radianes
  6.   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?


Título: Re: Razones trigonometricas(C++)
Publicado por: Acermax en 9 Junio 2011, 21:15 pm
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.


Título: Re: Razones trigonometricas(C++)
Publicado por: Danyel_Casvill en 10 Junio 2011, 02:22 am
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.

Ok, entonces, segun lo que entendi, en "r" tengo guardado el resultado del seno en radianes cierto? Pero lo que quiero es mostrarlo en grados, minutos y segundos.
Entonces cuando muestro esto
Código
  1. <<sin(ca*PI/180);
¿que estoy mostrando? ¿Nada relacionado con el tema? xD


Título: Re: Razones trigonometricas(C++)
Publicado por: Acermax en 10 Junio 2011, 03:59 am
Es que creo que estás confundiendo los términos. El seno, coseno etc no tienen magnitud. Los grados, minutos y segundos o radianes, es sobre el ángulo.


Título: Re: Razones trigonometricas(C++)
Publicado por: Danyel_Casvill en 12 Junio 2011, 22:37 pm
Es que creo que estás confundiendo los términos. El seno, coseno etc no tienen magnitud. Los grados, minutos y segundos o radianes, es sobre el ángulo.
Ok, creo que si xD, ahora si ya termine el código, veanlo y díganme si quedo mal:

Código:

Código
  1. #include <iostream>
  2. #include <math>
  3. #define PI 3.14
  4. int main()
  5. {
  6. int opc;
  7. float co,ca,h,r;
  8. m:
  9. cout<<"      RAZONES TRIGONOMETRICAS"<<endl<<endl;
  10. cout<<"1.Seno"<<endl;
  11. cout<<"2.Coseno"<<endl;
  12. cout<<"3.Tangente"<<endl;
  13. cout<<"4.Salir"<<endl;
  14. cin>>opc;
  15. switch (opc)
  16. {
  17.  case 1:
  18.  {
  19.   cout<<"1.Seno:"<<endl;
  20.   cout<<"Ingrese el valor del cateto opuesto:";cin>>co;
  21.   cout<<"Ingrese el valor de la hipotenusa:";cin>>h;
  22.   ca=(co/h);
  23.   r=sin(ca*PI/180);
  24.   cout<<"El valor del seno es:"<<r;
  25.   break;
  26.  }
  27.  case 2:
  28.  {
  29.   cout<<"2.Coseno:"<<endl;
  30.   cout<<"Ingrese el valor del cateto adyacente:";cin>>ca;
  31.   cout<<"Ingrese el valor de la hipotenusa:";cin>>h;
  32.   co=(ca/h);
  33.   r=cos(co*PI/180);
  34.   cout<<"El valor del coseno es:"<<r;
  35.   break;
  36.  }
  37.  case 3:
  38.  {
  39.   cout<<"3.Tangente:"<<endl;
  40.   cout<<"Ingrese el valor del cateto opuesto:";cin>>co;
  41.   cout<<"Ingrese el valor del cateto adyacente:";cin>>ca;
  42.   h=(co/ca);
  43.   r=tan(h*PI/180);
  44.   cout<<"El valor de la tangente es:"<<r;
  45.   break;
  46.  }
  47. }
  48. cin.get();cin.get();
  49. return 0;
  50. }