SOLUCIÓN
Programa Nro. 1 Método de Iteración
/* Programa que calcula las soluciones para el ejercicio del
dilema de la faraona, aplicando el método de la iteración
revisión abril 2026
elaborado por: Carlos Ferrer
*/
#include<iostream>
#include<math.h>
#include<locale.h>
using namespace std;
main()
{
double R,g=9.81,m1,m2,p1,p2,Q,t,a; //Variables del ejercicio
double aux; //aceleración auxiliar
setlocale(LC_ALL,"spanish");
//ingresamos datos
cout <<endl<<"Ingrese masa de la caja Nro.1 en kg = "<<endl;
cin >>m1;
cout <<endl<<"Ingrese la aceleración del sistema en m/seg2 = "<<endl;
cin >>a;
cout <<endl<<"Ingrese la relación entre m1 y m2 (m2 = m1 x R) = "<<endl;
cin >>R;
m2=m1*R;
p1=m1*g;
p2=m2*g;
// calculamos tensión
t= m1*a+p1*sin(20*M_PI/180)+p1*cos(20*M_PI/180)*0.12;
// iteramos
while ((aux-a)<-0.0001 or (aux-a)>0.0001 )
{
Q=Q+0.001;
aux= (p2*sin(Q*M_PI/180)-p2*cos(Q*M_PI/180)*0.12-t)/m2;
//evaluamos el caso de no obtener solución
if (Q>90)
{
cout <<endl<<"No existe un ángulo Q que mueva el sistema en ese sentido"<<endl;
goto fin;
}
}
//presentamos resultados
cout <<endl<<"El angulo Q corresponde a = "<<Q<<" Grados"<<endl;
fin:
cout <<endl<<"La tensión de la cuerda es igual a = "<<t<<" Newtons"<<endl;
cout <<endl<<"La distancia BC en metros = "<<1500*sin(20*M_PI/180)/sin(Q*M_PI/180)<<" metros"<<endl;
if (t>600)
{
cout <<endl<<"La tensión es superior a la que soporta la cuerda (600 newtons) ";
cout <<endl<<"por favor no implemente el sistema!!!! "<<endl;
}
}
Programa Nro. 1 Método Matemático
/* Programa que calcula las soluciones para el ejercicio del
dilema de la faraona, aplicando el método matemático
revisión abril 2026
elaborado por: Carlos Ferrer
*/
#include<iostream>
#include<math.h>
#include<locale.h>
using namespace std;
main()
{
double R,g=9.81,m1,m2,p1,p2,Q=100,t,a,aux,x;
double Q1,Q2; //Ángulos a obtener por la resolvente
double a1,b1,c1; //Datos de la resolvente
setlocale(LC_ALL,"spanish");
// Ingresamos datos iniciales
cout <<endl<<"Ingrese masa de la caja Nro.1 en kg = "<<endl;
cin >>m1;
cout <<endl<<"Ingrese la aceleración del sistema en m/seg2 = "<<endl;
cin >>a;
cout <<endl<<"Ingrese la relación entre m1 y m2 (m2 = m1 x R) = "<<endl;
cin >>R;
m2=m1*R;
p1=m1*g;
p2=m2*g;
// Calculamos tensión
t= m1*a+p1*sin(20*M_PI/180)+p1*cos(20*M_PI/180)*0.12;
x= t+m2*a;
// Determinamos las constantes de la resolvente
a1=pow(p2,2)*pow(0.12,2)+pow(p2,2);
b1=2*p2*0.12*x;
c1=pow(x,2)-pow(p2,2);
//Calculamos los dos ángulos posibles
Q1=(acos((-b1+sqrt(pow(b1,2)-4*a1*c1))/(2*a1)))*180/M_PI;
Q2=(acos((-b1-sqrt(pow(b1,2)-4*a1*c1))/(2*a1)))*180/M_PI;
//Determinamos el ángulo correcto
if(Q1>0 and Q1<90)
{
Q=Q1;
}
if(Q2>0 and Q2<90)
{
Q=Q2;
}
if(Q==100)
{
cout <<endl<<"No existe un angulo Q que mueva el sistema en ese sentido"<<endl;
goto fin;
}
//terminamos de presentar los resultados
cout <<endl<<"El angulo Q corresponde a = "<<Q<<" Grados"<<endl;
fin:
cout <<endl<<"La tensión de la cuerda es igual a = "<<t<<" Newtons"<<endl;
cout <<endl<<"La distancia BC en metros = "<<1500*sin(20*M_PI/180)/sin(Q*M_PI/180)<<" metros"<<endl;
if (t>600)
{
cout <<endl<<"La tensión es superior a la que soporta la cuerda (600 newtons) ";
cout <<endl<<"por favor no implemente el sistema!!!! "<<endl;
}
}

No hay comentarios.:
Publicar un comentario