A petición del comandante CapSea, hago público el código fuente de mi pequeño programilla.
http://www.24flotilla.com/foro/viewtopi ... =1&t=48718
Por lo menos, que sirva de ejemplo de como NO se debe programar:
Código: Seleccionar todo
/*----------------------------------------------------------------
| Autor: Dimitri Vodkachov
| Fecha: 03-02-2016 Versión: 3.4
|----------------------------------------------------------------
| Descripción del Programa: Algunos cálculos útiles
|
| ----------------------------------------------------------------*/
// Incluir E/S y Librerías Standard
#include <iostream>
#include <cstdlib>
#include <conio.h>
#include <Cmath>
#include <stdio.h>
#include <windows.h>
#include <string.h>
using namespace std;
// Zona de Declaración de Constantes
const float pi=3.14159265359;
// Zona de Declaración de Tipos
// Zona de Cabeceras de Procedimientos y Funciones
double calcang(float D1, float D22, float D3);
// Programa Principal
int main()
{
double AOB2,Rbarco,vc,rc1,D2,eslo,seg,rcd,rccost,refdem1,beta1,beta2,dem1cost,aro,arr,L,H,hour,hourh,hourmin,L1,H1,dem2cost,dem1,rcost,dem2,d1,d2,lambda,lambda1, demv1,demv2, distan1,distan2, t, AS, v,lambdanew,AOBnev,rcnev,AOB,alpha,d,vb,vs,dem,rs,rc,teta,t2,AOB1,alpha1,beta,rumb,min,rcaux,vaux ;
float k22,dias,v22,t22,min1,D1, D22, D3, rsub, delta, aux;
int cond,ccccc,ccc2,varprog,elec,estbab,horas,delay,verda,verda2,i,proapop,c,min22,h,e;
char lado[]="",estribor[]="ESTRIBOR", babor[]="BABOR",ccc1[500];
verda=0;
verda2=0;
// Zona de Declaración de Variables del Programa principal
cout << " `````````````````````````_LL``````````````````````````"<<endl;
cout << " ``_`````````````````````QQQQQ`````````````````````````"<<endl;
cout << " ``XQQQQQQQLQQQQQQQQQL`````QQQ``````QQQQQQQQQQQQQQQQQ``"<<endl;
cout << " ```QQQQQQQQNLLQQQQQBQ````QQQQQ```QQQNQ_QNQQQQQQQQQQ```"<<endl;
cout << " ````MCDQQQQQ_QQQQQQQQQQQQQQQQQQQQQQQQQQQQLLLLLXADD````"<<endl;
cout << " `````_QNAEXAJQQNQQQMQQQQQQQQQQQQQQQ_QQQQ`QQQQNSJ_`````"<<endl;
cout << " ````````LLJLL_QQQQNQQQQQQQQQQQQQQLQQQQ__LLLLLL_```````"<<endl;
cout << " ``````````LBDBD`QQQQQ`QDQQQQQQQQQQQQQQ````````````````"<<endl;
cout << " ``````````````````QQQQQ`QQQQQQQQQQQ_``````````````````"<<endl;
cout << " ``````````````````````Q`QQQQ_QQQQL````````````````````"<<endl;
cout << " ````````````````````````LQQQ_LN```````````````````````"<<endl;
cout << " ```````````````````````QQQJ_QQQ```````````````````````"<<endl;
cout << " ``````````````````````QQ`QQQ_C_QQ`````````````````````"<<endl;
cout << " ````````````````````QQQQQQL`LQQQQ_````````````````````"<<endl;
cout << " ```````````````````QQQ_ QQ QQQ```````````````````"<<endl;
cout << " ``````````````````QQQL QQ _QQ QQ```````````````````"<<endl;
cout << " ``````````####################################````````"<<endl;
cout << " ``````````#### U-BOOT CALCULATOR ####````````"<<endl;
cout << " ``````````#### Por SVR ####````````"<<endl;
cout << " ``````````####################################````````"<<endl;
cout << " ````````````````````QQQQTM QQQN````````````````````"<<endl;
cout << " ``````````````````````QQ`QQQ_QQQ``````````````````````"<<endl;
cout << "\n presione cualquier tecla para CONTINUAR..." <<endl;
getch();
system("CLS");
do{
cout << "\n\n ####################################"<<endl;
cout << " #### U-BOOT CALCULATOR ####"<<endl;
cout << " ####################################\n"<<endl;
cout << " MENU"<<endl;
cout << "------------------------------------------------------------------------"<<endl;
cout << "#1: CALCULO DE VELOCIDAD Y RUMBO\t #7: VEL. TAQUIMETRO SEGUN ESLORA\n"<<endl;
cout << "#2; TDC, DISTANCIA Y AOB EN DEMORA\t #8: CONTADOR PARA RPM\n"<<endl;
cout << "#3: RUMBO DE INTERCEPTACION\t #9: DISTANCIA ENTRE OBJETIVOS\n"<<endl;
cout << "#4: RUMBO POR METODO 3 DEMORAS\t #10: DISTANCIA & VELOCIDAD-> TIEMPO\n"<<endl;
cout << "#5: RUMBO USANDO AR\t #11: TIEMPO & VELOCIDAD-> DISTANCIA\n"<<endl;
cout << "#6: VEL. TAQUIMETRO 200M (DEMORAS)\t #12: TIEMPO & DISTANCIA-> VELOCIDAD\n"<<endl;
cout << " #13: Salir\n"<<endl;
cout << "\tIntroduzca eleccion (Numero):\n"<<endl;
cin >> elec;
system("CLS");
switch ( elec )
{
case 2:
varprog=1;
cout << "\n\n####################################"<<endl;
cout << "#### TDC-Calc. Distancia y AOB ####"<<endl;
cout << "####################################"<<endl;
proapop=1;
cout << "\n\n\tPOSICION DE DISPARO:\n\n"<<endl;
cout << "\n1:Proa\n\n"<<endl;
cout << "\n2:Popa\n\n\n\n"<<endl;
cin >> proapop;
cout << "\n\n\tIntroduzca el rumbo del submarino (Grados):"<<endl;
cin >> rs;
cout << "\n\n\tIntroduzca el rumbo del objetivo (Grados):"<<endl;
cin >> rc;
cout << "\n\n\tIntroduzca la distancia al objetivo (Metros):"<<endl;
cin >> d1;
cout << "\n\n\tIntroduzca la demora corespondiente (Grados):"<<endl;
cin >> dem1;
cout << "\n\n\tIntroduzca segunda demora (Grados):"<<endl;
cin >> dem2;
//selec proa popa
if(proapop==2){
rs=rs+180;
if(rs>360){
rs=rs-360;
}
dem1=dem1-180;
if(dem1<0){
dem1=dem1+360;
}
dem2=dem2-180;
if(dem2<0){
dem2=dem2+360;
}
}
//relativizar rumbos
rc=rc-rs;
if(rc<0){
rc=rc+360;
}
//lados
if(rc<=180){
strcpy(lado,estribor);
}
else{
strcpy(lado,babor);
}
//sentido rc
if(rc<=180){
rccost=1;
}
else{
rccost=2;
rc=rc-180;
}
//clasificación demoras por costados
if(dem1<=180){
dem1cost=1;
}
else{
dem1cost=2;
dem1=360-dem1;
}
if(dem2<=180){
dem2cost=1;
}
else{
dem2cost=2;
dem2=360-dem2;
}
//desarrollo del algoritmo
//Rumbo b->e
if(rccost==1){
//dem1 a estri
//dem1 a estri y dem2 a babor
if((dem1cost==1)&&(dem2cost==2)){
beta1=abs(dem1-rc);
beta2=180-(dem1+dem2)-beta1;
d2=(d1*sin(beta1*pi/180))/sin(beta2*pi/180);
cout << "\n\n\t DISTANCIA :"<<d2<<endl;
cout << "\n\n\t AOB :"<<beta2<<endl;
cout << "\n\n\t LADO :"<<lado<<endl;
}
//dem1 a estri y dem2 a estri
if((dem1cost==1)&&(dem2cost==1)){
if(dem1>dem2){
beta1=abs(dem1-rc);
beta2=180-abs(dem1-dem2)-beta1;
d2=(d1*sin(beta1*pi/180))/sin(beta2*pi/180);
cout << "\n\n\t DISTANCIA :"<<d2<<endl;
cout << "\n\n\t AOB :"<<beta2<<endl;
cout << "\n\n\t LADO :"<<lado<<endl;
}
else if(dem2>dem1){
beta1=180-abs(dem1-rc);
beta2=180-abs(dem1-dem2)-beta1;
d2=(d1*sin(beta1*pi/180))/sin(beta2*pi/180);
beta2=180-beta2;
cout << "\n\n\t DISTANCIA :"<<d2<<endl;
cout << "\n\n\t AOB :"<<beta2<<endl;
cout << "\n\n\t LADO :"<<lado<<endl;
}
}
//dem1 a babor
//dem1 a babor y dem2 a estri
if((dem1cost==2)&&(dem2cost==1)){
beta1=180-(dem1+rc);
beta2=180-(dem1+dem2)-beta1;
d2=(d1*sin(beta1*pi/180))/sin(beta2*pi/180);
beta2=180-beta2;
cout << "\n\n\t DISTANCIA :"<<d2<<endl;
cout << "\n\n\t AOB :"<<beta2<<endl;
cout << "\n\n\t LADO :"<<lado<<endl;
}
//dem1 a babor y dem2 a babor
if((dem1cost==2)&&(dem2cost==2)){
if(dem1>dem2){
beta1=180-(dem1+rc);
beta2=180-abs(dem1-dem2)-beta1;
d2=(d1*sin(beta1*pi/180))/sin(beta2*pi/180);
beta2=180-beta2;
cout << "\n\n\t DISTANCIA :"<<d2<<endl;
cout << "\n\n\t AOB :"<<beta2<<endl;
cout << "\n\n\t LADO :"<<lado<<endl;
}
else if(dem2>dem1){
beta1=dem1+rc;
beta2=180-abs(dem1-dem2)-beta1;
d2=(d1*sin(beta1*pi/180))/sin(beta2*pi/180);
cout << "\n\n\t DISTANCIA :"<<d2<<endl;
cout << "\n\n\t AOB :"<<beta2<<endl;
cout << "\n\n\t LADO :"<<lado<<endl;
}
}
}
//Rumbo b->e
if(rccost==2){
//dem1 a estri
//dem1 a estri y dem2 a babor
if((dem1cost==1)&&(dem2cost==2)){
beta1=abs(dem1-rc);
beta2=180-(dem1+dem2)-beta1;
d2=(d1*sin(beta1*pi/180))/sin(beta2*pi/180);
beta2=180-beta2;
cout << "\n\n\t DISTANCIA :"<<d2<<endl;
cout << "\n\n\t AOB :"<<beta2<<endl;
cout << "\n\n\t LADO :"<<lado<<endl;
}
//dem1 a estri y dem2 a estri
if((dem1cost==1)&&(dem2cost==1)){
if(dem1>dem2){
beta1=abs(dem1-rc);
beta2=180-abs(dem1-dem2)-beta1;
d2=(d1*sin(beta1*pi/180))/sin(beta2*pi/180);
beta2=180-beta2;
cout << "\n\n\t DISTANCIA :"<<d2<<endl;
cout << "\n\n\t AOB :"<<beta2<<endl;
cout << "\n\n\t LADO :"<<lado<<endl;
}
else if(dem2>dem1){
beta1=180-abs(dem1-rc);
beta2=180-abs(dem1-dem2)-beta1;
d2=(d1*sin(beta1*pi/180))/sin(beta2*pi/180);
cout << "\n\n\t DISTANCIA :"<<d2<<endl;
cout << "\n\n\t AOB :"<<beta2<<endl;
cout << "\n\n\t LADO :"<<lado<<endl;
}
}
//dem1 a babor
//dem1 a babor y dem2 a estri
if((dem1cost==2)&&(dem2cost==1)){
beta1=180-(dem1+rc);
beta2=180-(dem1+dem2)-beta1;
d2=(d1*sin(beta1*pi/180))/sin(beta2*pi/180);
cout << "\n\n\t DISTANCIA :"<<d2<<endl;
cout << "\n\n\t AOB :"<<beta2<<endl;
cout << "\n\n\t LADO :"<<lado<<endl;
}
//dem1 a babor y dem2 a babor
if((dem1cost==2)&&(dem2cost==2)){
if(dem1>dem2){
beta1=180-(dem1+rc);
beta2=180-abs(dem1-dem2)-beta1;
d2=(d1*sin(beta1*pi/180))/sin(beta2*pi/180);
cout << "\n\n\t DISTANCIA :"<<d2<<endl;
cout << "\n\n\t AOB :"<<beta2<<endl;
cout << "\n\n\t LADO :"<<lado<<endl;
}
else if(dem2>dem1){
beta1=dem1+rc;
beta2=180-abs(dem1-dem2)-beta1;
d2=(d1*sin(beta1*pi/180))/sin(beta2*pi/180);
beta2=180-beta2;
cout << "\n\n\t DISTANCIA :"<<d2<<endl;
cout << "\n\n\t AOB :"<<beta2<<endl;
cout << "\n\n\t LADO :"<<lado<<endl;
}
}
}
cout << "\n\n\tREALIZAR OTRO CALCULO?:\n\n"<<endl;
cout << "\n1:SI\n\n"<<endl;
cout << "\n2:NO\n\n\n\n"<<endl;
cin >> varprog;
if(varprog==1){
do{
cout << "\n\n\tIntroduzca segunda demora (Grados):"<<endl;
cin >> dem2;
if(proapop==2){
dem2=dem2-180;
if(dem2<0){
dem2=dem2+360;
}
}
if(dem2<=180){
dem2cost=1;
}
else{
dem2cost=2;
dem2=360-dem2;
}
//desarrollo del algoritmo
//Rumbo b->e
if(rccost==1){
//dem1 a estri
//dem1 a estri y dem2 a babor
if((dem1cost==1)&&(dem2cost==2)){
beta1=abs(dem1-rc);
beta2=180-(dem1+dem2)-beta1;
d2=(d1*sin(beta1*pi/180))/sin(beta2*pi/180);
cout << "\n\n\t DISTANCIA :"<<d2<<endl;
cout << "\n\n\t AOB :"<<beta2<<endl;
cout << "\n\n\t LADO :"<<lado<<endl;
}
//dem1 a estri y dem2 a estri
if((dem1cost==1)&&(dem2cost==1)){
if(dem1>dem2){
beta1=abs(dem1-rc);
beta2=180-abs(dem1-dem2)-beta1;
d2=(d1*sin(beta1*pi/180))/sin(beta2*pi/180);
cout << "\n\n\t DISTANCIA :"<<d2<<endl;
cout << "\n\n\t AOB :"<<beta2<<endl;
cout << "\n\n\t LADO :"<<lado<<endl;
}
else if(dem2>dem1){
beta1=180-abs(dem1-rc);
beta2=180-abs(dem1-dem2)-beta1;
d2=(d1*sin(beta1*pi/180))/sin(beta2*pi/180);
beta2=180-beta2;
cout << "\n\n\t DISTANCIA :"<<d2<<endl;
cout << "\n\n\t AOB :"<<beta2<<endl;
cout << "\n\n\t LADO :"<<lado<<endl;
}
}
//dem1 a babor
//dem1 a babor y dem2 a estri
if((dem1cost==2)&&(dem2cost==1)){
beta1=180-(dem1+rc);
beta2=180-(dem1+dem2)-beta1;
d2=(d1*sin(beta1*pi/180))/sin(beta2*pi/180);
beta2=180-beta2;
cout << "\n\n\t DISTANCIA :"<<d2<<endl;
cout << "\n\n\t AOB :"<<beta2<<endl;
cout << "\n\n\t LADO :"<<lado<<endl;
}
//dem1 a babor y dem2 a babor
if((dem1cost==2)&&(dem2cost==2)){
if(dem1>dem2){
beta1=180-(dem1+rc);
beta2=180-abs(dem1-dem2)-beta1;
d2=(d1*sin(beta1*pi/180))/sin(beta2*pi/180);
beta2=180-beta2;
cout << "\n\n\t DISTANCIA :"<<d2<<endl;
cout << "\n\n\t AOB :"<<beta2<<endl;
cout << "\n\n\t LADO :"<<lado<<endl;
}
else if(dem2>dem1){
beta1=dem1+rc;
beta2=180-abs(dem1-dem2)-beta1;
d2=(d1*sin(beta1*pi/180))/sin(beta2*pi/180);
cout << "\n\n\t DISTANCIA :"<<d2<<endl;
cout << "\n\n\t AOB :"<<beta2<<endl;
cout << "\n\n\t LADO :"<<lado<<endl;
}
}
}
//Rumbo b->e
if(rccost==2){
//dem1 a estri
//dem1 a estri y dem2 a babor
if((dem1cost==1)&&(dem2cost==2)){
beta1=abs(dem1-rc);
beta2=180-(dem1+dem2)-beta1;
d2=(d1*sin(beta1*pi/180))/sin(beta2*pi/180);
beta2=180-beta2;
cout << "\n\n\t DISTANCIA :"<<d2<<endl;
cout << "\n\n\t AOB :"<<beta2<<endl;
cout << "\n\n\t LADO :"<<lado<<endl;
}
//dem1 a estri y dem2 a estri
if((dem1cost==1)&&(dem2cost==1)){
if(dem1>dem2){
beta1=abs(dem1-rc);
beta2=180-abs(dem1-dem2)-beta1;
d2=(d1*sin(beta1*pi/180))/sin(beta2*pi/180);
beta2=180-beta2;
cout << "\n\n\t DISTANCIA :"<<d2<<endl;
cout << "\n\n\t AOB :"<<beta2<<endl;
cout << "\n\n\t LADO :"<<lado<<endl;
}
else if(dem2>dem1){
beta1=180-abs(dem1-rc);
beta2=180-abs(dem1-dem2)-beta1;
d2=(d1*sin(beta1*pi/180))/sin(beta2*pi/180);
cout << "\n\n\t DISTANCIA :"<<d2<<endl;
cout << "\n\n\t AOB :"<<beta2<<endl;
cout << "\n\n\t LADO :"<<lado<<endl;
}
}
//dem1 a babor
//dem1 a babor y dem2 a estri
if((dem1cost==2)&&(dem2cost==1)){
beta1=180-(dem1+rc);
beta2=180-(dem1+dem2)-beta1;
d2=(d1*sin(beta1*pi/180))/sin(beta2*pi/180);
cout << "\n\n\t DISTANCIA :"<<d2<<endl;
cout << "\n\n\t AOB :"<<beta2<<endl;
cout << "\n\n\t LADO :"<<lado<<endl;
}
//dem1 a babor y dem2 a babor
if((dem1cost==2)&&(dem2cost==2)){
if(dem1>dem2){
beta1=180-(dem1+rc);
beta2=180-abs(dem1-dem2)-beta1;
d2=(d1*sin(beta1*pi/180))/sin(beta2*pi/180);
cout << "\n\n\t DISTANCIA :"<<d2<<endl;
cout << "\n\n\t AOB :"<<beta2<<endl;
cout << "\n\n\t LADO :"<<lado<<endl;
}
else if(dem2>dem1){
beta1=dem1+rc;
beta2=180-abs(dem1-dem2)-beta1;
d2=(d1*sin(beta1*pi/180))/sin(beta2*pi/180);
beta2=180-beta2;
cout << "\n\n\t DISTANCIA :"<<d2<<endl;
cout << "\n\n\t AOB :"<<beta2<<endl;
cout << "\n\n\t LADO :"<<lado<<endl;
}
}
}
cout << "\n\nREALIZAR OTRO CALCULO?:\n\n"<<endl;
cout << "\n1:SI"<<endl;
cout << "\n2:NO\n\n"<<endl;
cin >> varprog;
}
while(varprog==1);
}
cout << "\n\n presione cualquier tecla para volver..." <<endl;
getch();
system("CLS");
break;
case 1:
varprog=1;
rcaux=0;
vaux=0;
i=0;
do{
cout << "\n\n#######################################"<<endl;
cout << "#### CALCULO DE VELOCIDAD Y RUMBO ####"<<endl;
cout << "#######################################\n\n\n\n"<<endl;
cout << "\n\n\tATENCION: LAS DEMORAS INTRODUCIDAS DEBEN HABER SIDO TOMADAS\n\n POR EL MISMO COSTADO, BABOR O ESTRIBOR.\n\n"<<endl;
cout << "\n\n\tIntroduzca la primera demora (Grados)\n\n"<<endl;
cin >> demv1;
cout << "\n\n\tIntroduzca distancia (Metros)\n\n"<<endl;
cin >> distan1;
cout << "\n\n-------------------\n\n"<<endl;
cout << "\n\n\tIntroduzca la segunda demora (Grados)\n\n"<<endl;
cin >> demv2;
cout << "\n\n\tIntroduzca distancia (Metros)\n\n"<<endl;
cin >> distan2;
cout << "\n\n-------------------\n\n"<<endl;
cout << "\n\n\tIntroduzca tiempo (Minutos)\n\n"<<endl;
cin >> t;
cout << "\n\n\tIntroduzca el rumbo del submarino (Grados):"<<endl;
cin >> rs;
estbab=1;
if(demv1 >180){
demv1=360-demv1;
estbab=0;
}
if(demv2 >180){
demv2=360-demv2;
estbab=0;
}
AS=pow(distan2,2)+pow(distan1,2)-distan1*distan2*2*cos(abs(demv2-demv1)*pi/180);
AS=sqrt(AS);
v=AS/(t*1852)*60;
lambdanew=acos((pow(AS,2)+pow(distan2,2)-pow(distan1,2))/(2*distan2*AS));
AOBnev=180-(lambdanew*180/pi);
teta=180-AOBnev-demv2;
if(estbab==0){
rcnev=rs+teta;
}
else{
rcnev=rs-teta;
}
if(rcnev<0){
rcnev=360+rcnev;
}
if(rcnev>360){
rcnev=rcnev-360;
}
cout << "\n\nAGREGAR OTRA MEDICION?:\n\n ATENCION:Los resultados corresponderan a la media\n de todos los anteriores \n\n"<<endl;
cout << "\n1:SI"<<endl;
cout << "\n2:NO\n\n"<<endl;
cin >> varprog;
rcaux=rcaux+rcnev;
vaux=vaux+v;
i=i+1;
}
while(varprog==1);
rcnev=rcaux/i;
v=vaux/i;
cout << "\n\n\tLa velocidad del objetivo es de: " << v<< " Nudos "<< "\n\n\tel Rumbo del objetivo es: "<<rcnev<<endl;
cout << "\n\n presione cualquier tecla para volver..." <<endl;
getch();
system("CLS");
break;
case 3:
varprog=1;
do{
cout << "\n\n####################################"<<endl;
cout << "#### CACULO DE INTERCEPTACION ####"<<endl;
cout << "####################################"<<endl;
cout << "\n\nIntroduzca la distancia al objetivo (Kilometros):\n\n"<<endl;
cin >> d;
d=d/1.852;
cout << "\n\nIntroduzca el rumbo del objetivo (Grados):\n\n"<<endl;
cin >> rc;
cout << "\n\nIntroduzca la velocidad del objetivo (Nudos):\n\n"<<endl;
cin >> vc;
cout << "\n\nIntroduzca la velocidad del submarino (Nudos):\n\n"<<endl;
cin >> vs;
cout << "\n\nIntroduzca el rumbo de demora del objetivo (Grados):\n\n"<<endl;
cin >> rcd;
rc1=rc-rcd;
if(rc1<0){
rc1=360+rc1;
}
if(rc1<90){
beta=90-rc1;
}
else if((rc1>=90)&&(180>rc1)){
beta=rc1-90;
}
else if((rc1>180)&&(270>rc1)){
beta=270-rc1;
}
else if((rc1>=270)||(rc1==0)){
beta=rc1-270;
}
alpha=asin((vc*cos(beta*pi/180))/vs)*180/pi;
//t=d/vs;
t=d/(vs*cos(alpha*pi/180)+vc*sin(beta*pi/180));
if(rc1<180){
rs=rcd+alpha;
}
if(rc1>180){
rs=rcd-alpha;
}
if(rs<0){
rs=360+rs;
}
if(t<0||(((vc*cos(beta*pi/180))/vs)>1))
{
cout << "\n\nEl objetivo es inalcanzable en esa situacion\n\n"<<endl;
}
else{
horas=(int)t;
min=(t-horas)*60;
cout << "\n\nATENCION: RESULTADO APROXIMADO; TIEMPO DE AVISTAMIENTO\n\n\t MENOR AL PROPORCIONADO\n\n"<<endl;
cout << "\n\nCon cuantas horas de antelacion desea llegar? (h):\n\n"<<endl;
cin >> delay;
rc1=rc-rcd;
cout << "\n\n Introduzca la hora de inicio de la persecuion:\n\n"<<endl;
cout << "\n\n (p.e : 2:05 -> 0205 )\n\n"<<endl;
cin >> hour;
if(rc1<0){
rc1=360+rc1;
}
if(rc1<90){
beta=90-rc1;
}
else if((rc1>=90)&&(180>rc1)){
beta=rc1-90;
}
else if((rc1>180)&&(270>rc1)){
beta=270-rc1;
}
else if((rc1>=270)||(rc1==0)){
beta=rc1-270;
}
alpha=asin((vc*cos(beta*pi/180)*(t+delay))/(vs*t))*180/pi;
if(rc1<180){
rs=rcd+alpha;
}
if(rc1>180){
rs=rcd-alpha;
}
if(rs<0){
rs=360+rs;
}
if(rs>360){
rs=rs-360;
}
if(t<0||(((vc*cos(beta*pi/180))/vs)>1))
{
cout << "\n\nEl objetivo es inalcanzable en esa situacion\n\n"<<endl;
}
else {
hour=hour/100;
hourh=(int)(hour);
hourmin=(hour-hourh)*100;
horas=(int)(t+delay);
min=((t+delay)-horas)*60;
min=(int)(min);
hourh=hourh+horas;
if(hourh>=24){
hourh=hourh-24;
}
hourmin=hourmin+min;
if(hourmin>=60){
hourmin=hourmin-60;
}
hourmin=(int)(hourmin);
{
rs=(int)(rs);
cout << "\n\nEl rumbo a seguir es :"<<rs<<endl;
cout << "\n\nel tiempo hasta interceptacion es de :"<<horas<<" horas "<<min<<" minutos \n\n"<<endl;
cout << "\n\nhora maxima hasta el encuentro : "<<hourh<<":"<<hourmin<<"\n\n"<<endl;
}
}
}
cout << "\n\nREALIZAR OTRO CALCULO?:\n\n"<<endl;
cout << "\n1:SI"<<endl;
cout << "\n2:NO\n\n"<<endl;
cin >> varprog;
}
while(varprog==1);
cout << "\n\n presione cualquier tecla para volver...\n\n\n" <<endl;
getch();
system("CLS");
break;
case 9:
verda2=0;
// Zona de Declaración de Variables del Programa principal
varprog=1;
cout << "\n\n####################################"<<endl;
cout << "#### Distancia entre objetivos ####"<<endl;
cout << "####################################"<<endl;
do{
proapop=1;
cout << "\n\n\tPOSICION DE DISPARO:\n\n"<<endl;
cout << "\n1:Proa\n\n"<<endl;
cout << "\n2:Popa\n\n"<<endl;
cin >> proapop;
cout << "\n\n\tIntroduzca el rumbo del submarino (Grados):"<<endl;
cin >> rs;
cout << "\n\n\tIntroduzca el rumbo del convoy (Grados):"<<endl;
cin >> rc;
cout << "\n\n\tIntroduzca la distancia al primer navio (Metros):"<<endl;
cin >> d1;
cout << "\n\n\tIntroduzca la demora corespondiente (Grados):"<<endl;
cin >> dem1;
cout << "\n\n\tIntroduzca la demora al segundo navio (Grados):"<<endl;
cin >> dem2;
//selec proa popa
if(proapop==2){
rs=rs+180;
if(rs>360){
rs=rs-360;
}
dem1=dem1-180;
if(dem1<0){
dem1=dem1+360;
}
dem2=dem2-180;
if(dem2<0){
dem2=dem2+360;
}
}
//relativizar rumbos
rc=rc-rs;
if(rc<0){
rc=rc+360;
}
if(rc>180){
rc=rc-180;
}
//clasificación demoras por costados
if(dem1<=180){
dem1cost=1;
}
else{
dem1cost=2;
dem1=360-dem1;
}
if(dem2<=180){
dem2cost=1;
}
else{
dem2cost=2;
dem2=360-dem2;
}
//dem1 a estri
//dem1 a estri y dem2 a babor
if((dem1cost==1)&&(dem2cost==2)){
beta1=abs(dem1-rc);
beta2=180-(dem1+dem2)-beta1;
d2=(d1*sin((dem1+dem2)*pi/180))/sin(beta2*pi/180);
cout << "\n\n\t DISTANCIA :"<<d2<<" Metros"<<endl;
}
//dem1 a estri y dem2 a estri
if((dem1cost==1)&&(dem2cost==1)){
if(dem1>dem2){
beta1=abs(dem1-rc);
beta2=180-abs(dem1-dem2)-beta1;
d2=(d1*sin(abs(dem1-dem2)*pi/180))/sin(beta2*pi/180);
cout << "\n\n\t DISTANCIA :"<<d2<<" Metros"<<endl;
}
else if(dem2>dem1){
beta1=180-abs(dem1-rc);
beta2=180-abs(dem1-dem2)-beta1;
d2=(d1*sin(abs(dem1-dem2)*pi/180))/sin(beta2*pi/180);
cout << "\n\n\t DISTANCIA :"<<d2<<" Metros"<<endl;
}
}
//dem1 a babor
//dem1 a babor y dem2 a estri
if((dem1cost==2)&&(dem2cost==1)){
beta1=180-(dem1+rc);
beta2=180-(dem1+dem2)-beta1;
d2=(d1*sin((dem1+dem2)*pi/180))/sin(beta2*pi/180);
cout << "\n\n\t DISTANCIA :"<<d2<<" Metros"<<endl;
}
//dem1 a babor y dem2 a babor
if((dem1cost==2)&&(dem2cost==2)){
if(dem1>dem2){
beta1=180-(dem1+rc);
beta2=180-abs(dem1-dem2)-beta1;
d2=(d1*sin(abs(dem1-dem2)*pi/180))/sin(beta2*pi/180);
cout << "\n\n\t DISTANCIA :"<<d2<<" Metros"<<endl;
}
else if(dem2>dem1){
beta1=dem1+rc;
beta2=180-abs(dem1-dem2)-beta1;
d2=(d1*sin(abs(dem1-dem2)*pi/180))/sin(beta2*pi/180);
cout << "\n\n\t DISTANCIA :"<<d2<<" Metros"<<endl;
}
}
cout << "\n\n\tREALIZAR OTRO CALCULO?:\n\n"<<endl;
cout << "\n1:SI\n\n"<<endl;
cout << "\n2:NO\n\n\n\n"<<endl;
cin >> varprog;
}
while(varprog==1);
cout << "\n\n presione cualquier tecla para volver...\n\n\n" <<endl;
getch();
system("CLS");
break;
case 5:
varprog=1;
cout << "\n\n####################################"<<endl;
cout << "#### Rumbo segun Rel. Aspecto ####"<<endl;
cout << "####################################"<<endl;
cout << "\n\n\tIntroduzca la eslora del navio (Metros):"<<endl;
cin >> L;
cout << "\n\n\tIntroduzca la altura del palo mayor (Metros):"<<endl;
cin >> H;
arr=L/H;
cout << "\n\n\t--------------------\n\n"<<endl;
cout << "\n\n\tIntroduzca la medicion de la eslora del periscopio (Adimensional):"<<endl;
cin >> L1;
cout << "\n\n\tIntroduzca la medicion de la altura del palo mayor (Adimensional):"<<endl;
cin >> H1;
cout << "\n\n\tIntroduzca la demora de la medicion (Grados):"<<endl;
cin >> dem1;
cout << "\n\n\tIntroduzca el rumbo del submarino (Grados):"<<endl;
cin >> rs;
if(dem1>180){
dem1=360-dem1;
}
arr=L/H;
aro=L1/H1;
AOB1=asin(aro/arr)*(180/pi);
rc=(180-dem1-AOB1)+rs;
if(rc>360){
rc=rc-360;
}
rc1=rc+180;
if(rc1>360){
rc1=rc1-360;
}
cout << "\n\n\t--------------------\n\n"<<endl;
cout << "\n\n\t EL RUMBO DEL OBJETIVO PUEDE SER : "<<rc<<" O "<<rc1<<endl;
cout << "\n\n presione cualquier tecla para volver...\n\n\n" <<endl;
getch();
system("CLS");
break;
case 6:
cout << "\n\n#######################################"<<endl;
cout << "#### VELOCIDAD TAQUIMETRO ####"<<endl;
cout << "#######################################\n\n\n\n"<<endl;
cout << "\n\n\tIntroduzca el rumbo del submarino (Grados):"<<endl;
cin >> rs;
cout << "\n\n\tIntroduzca el rumbo del objetivo (Grados):"<<endl;
cin >> rc;
cout << "\n\n\tIntroduzca la distancia al objetivo (Metros):"<<endl;
cin >> d1;
cout << "\n\n\tIntroduzca la demora corespondiente (Grados):"<<endl;
cin >> dem1;
cout << "\n\n\tDISTANCIA DE REFERENCIA 200 METROS:\n\n"<<endl;
refdem1=dem1;
//relativizar rumbos
rc=rc-rs;
if(rc<0){
rc=rc+360;
}
//sentido rc
if(rc<=180){
rccost=1;
}
else{
rccost=2;
rc=rc-180;
}
//clasificación demoras por costados
if(dem1<=180){
dem1cost=1;
}
else{
dem1cost=2;
dem1=360-dem1;
}
//Desarrolo del algoritmo:
if(dem1cost==2){
if(rccost==1){
AOB=180-rc-dem1;
D2=sqrt(pow(d1,2)+40000-2*d1*200*cos(AOB*(pi/180)));
alpha=asin(200*((sin(AOB*(pi/180)))/D2))*(180/pi);
d2=360-dem1+alpha;
if(d2>360){
d2=d2-360;}
}
if(rccost==2){
AOB=rc+dem1;
D2=sqrt(pow(d1,2)+40000-2*d1*200*cos(AOB*(pi/180)));
alpha=asin(200*((sin(AOB*(pi/180)))/D2))*(180/pi);
d2=360-dem1-alpha;
}
}
if(dem1cost==1){
if(rccost==1){
AOB=180-rc+dem1;
D2=sqrt(pow(d1,2)+40000-2*d1*200*cos(AOB*(pi/180)));
alpha=asin(200*((sin(AOB*(pi/180)))/D2))*(180/pi);
d2=dem1+alpha;
}
if(rccost==2){
AOB=rc-dem1;
D2=sqrt(pow(d1,2)+40000-2*d1*200*cos(AOB*(pi/180)));
alpha=asin(200*((sin(AOB*(pi/180)))/D2))*(180/pi);
d2=dem1-alpha;
if(d2<0){
d2=360-d2;
}
}
}
cout << "\n\n\tDEMORA 1: " <<refdem1<< " Grados"<<endl;
cout << "\n\n\tDEMORA 2: " <<d2<< " Grados"<<endl;
cout << "\n\n presione cualquier tecla para volver..." <<endl;
getch();
system("CLS");
break;
case 7:
cout << "\n\n#######################################"<<endl;
cout << "#### VELOCIDAD SEGUN ESLORA ####"<<endl;
cout << "#######################################\n\n\n\n"<<endl;
do{
cout << "\n\n\tIntroduzca la eslora del barco o distancia(Metros):"<<endl;
cin >> eslo;
cout << "\n\n\tIntroduzca el tiempo trascurrido (Segundos):"<<endl;
cin >> seg;
v=(eslo*3600)/(seg*1852);
cout << "\n\n\tLa velocidad del barco es de : " <<v<< " Nudos"<<endl;
cout << "\n\n\tREALIZAR OTRO CALCULO?:\n\n"<<endl;
cout << "\n1:SI\n\n"<<endl;
cout << "\n2:NO\n\n\n\n"<<endl;
cin >> varprog;
if(varprog==2){
cout << "\n\n presione cualquier tecla para volver..." <<endl;
getch();
system("CLS");
}
}
while(varprog!=2);
break;
case 10:
c=1;
t22=1;
do{
printf("\n\t#################################");
printf("\n\t### Distancia & Vel -> Tiempo ###");
printf("\n\t#################################");
printf("\n\n\t DISTANCIA (Km): ");
scanf("%f",&k22);
printf("\n\n\t VELOCIDAD (Nudos): ");
scanf("%f",&v22);
t22=(k22/1.852)/v22;
dias=t22/24;
h=(dias-(int)dias)*24;
min1=(t22-(int)t22)*60;
printf("\n\n\t Tiempo de llegada %.0f dias %d horas %.0f minutos ",dias,h,min1);
cout << "\n\n\tREALIZAR OTRO CALCULO?:\n\n"<<endl;
cout << "\n1:SI\n\n"<<endl;
cout << "\n2:NO\n\n\n\n"<<endl;
cin >> varprog;
system("cls");
}
while(varprog!=2);
break;
case 4:
varprog=1;
do{
cout << "\n\n#######################################"<<endl;
cout << "#### METODO DE LAS 3 DEMORAS ####"<<endl;
cout << "#######################################\n\n\n\n"<<endl;
printf(" \nItroduzca el rumbo del submarino: \n\n");
scanf("%f",&rsub);
printf(" \nItroduzca Demora 1(D1): \n\n");
scanf("%f",&D1);
printf(" \nItroduzca Demora 2(D22): \n\n");
scanf("%f",&D22);
printf(" \nItroduzca Demora 3(D3): \n\n");
scanf("%f",&D3);
//todo estribor
if (D1<=180&&D22<=180&&D3<=180){
if ((D1<D22)&&(D22<D3)){
Rbarco=calcang(D1,D22,D3);
}
if ((D1>D22)&&(D22>D3)){
aux=D1;
D1=D3;
D3=aux;
Rbarco=180+calcang(D1,D22,D3);
}
}
//todo babor
if(D1>=180&&D22>=180&&D3>=180){
D1=360-D1;
D22=360-D22;
D3=360-D3;
if ((D1<D22)&&(D22<D3)){
Rbarco=360-calcang(D1,D22,D3);
}
if ((D1>D22)&&(D22>D3)){
aux=D1;
D1=D3;
D3=aux;
Rbarco=180-calcang(D1,D22,D3);
}
}
//2 estribor 1 babor(dos casos posibles)
if (D1<=180&&D22<=180&&D3>=180){
delta=(360-D3);
D1=D1+delta;
D22=D22+delta;
D3=0;
aux=D1;
D1=D3;
D3=aux;
Rbarco=180+calcang(D1,D22,D3)-delta;
}
if (D3<=180&&D22<=180&&D1>=180){
delta=(360-D1);
D3=D3+delta;
D22=D22+delta;
D1=0;
Rbarco=calcang(D1,D22,D3)-delta;
}
//1 estribor 2 babor
if (D1<=180&&D22>=180&&D3>=180){
delta=D1;
D3=D3-delta;
D22=D22-delta;
D1=360;
aux=D1;
D1=D3;
D3=aux;
Rbarco=calcang(D1,D22,D3)+delta-180;
}
//2 babor 1 estribor
if (D1>=180&&D22>=180&&D3<=180){
delta=D3;
D1=D1-delta;
D22=D22-delta;
D3=360;
Rbarco=calcang(D1,D22,D3)+delta-360;
}
if (Rbarco<0){
Rbarco=360+Rbarco;
}
if (Rbarco>360){
Rbarco=Rbarco-360;
}
Rbarco=rsub+Rbarco;
if (Rbarco>360){
Rbarco=Rbarco-360;
}
cout << "\n\#######################################\n\n"<<endl;
printf(" \nEl rumbo del objetivo es: %f\n\n",Rbarco);
cout << "\n\nREALIZAR OTRO CALCULO?:\n\n"<<endl;
cout << "\n1:SI"<<endl;
cout << "\n2:NO\n\n"<<endl;
cin >> varprog;
system("cls");
}
while (varprog!=2);
break;
case 8:
varprog=1;
do{
cout << "\n\n#######################################"<<endl;
cout << "#### CONTADOR ####"<<endl;
cout << "#######################################\n\n\n\n"<<endl;
printf ("INTRODUZCA UN CARACTER POR CADA CICLO \n\t(Intro para contar):\n\n");
scanf("%s",ccc1); /* al ser un array no lleva & */
ccccc=strlen(ccc1);
ccc2=2*ccccc;
cout << "#######################################\n\n"<<endl;
printf("Contados: %d\n",ccccc);
printf("2xContados: %d\n",ccc2);
cout << "\n\nREALIZAR OTRO CALCULO?:\n\n"<<endl;
cout << "\n1:SI"<<endl;
cout << "\n2:NO\n\n"<<endl;
cin >> varprog;
system("cls");
}
while(varprog!=2);
break;
case 11:
varprog=1;
c=1;
t22=1;
do{
printf("\n\t#################################");
printf("\n\t### Tiempo & Vel -> distancia ###");
printf("\n\t#################################");
printf("\n\n\t TIEMPO (Minutos): ");
scanf("%f",&t22);
printf("\n\n\t VELOCIDAD (Nudos): ");
scanf("%f",&v22);
k22=((t22/60)*v22*1.852);
printf("\n\n\t %.0f Minutos a %.2f Nudos suponen: %.3f Km ",t22,v22,k22);
cout << "\n\n\tREALIZAR OTRO CALCULO?:\n\n"<<endl;
cout << "\n1:SI\n\n"<<endl;
cout << "\n2:NO\n\n"<<endl;
cin >> varprog;
system("cls");
}
while(varprog!=2);
break;
case 12:
varprog=1;
c=1;
t22=1;
do{
printf("\n\t#################################");
printf("\n\t### Tiempo & Distancia -> Vel ###");
printf("\n\t#################################");
printf("\n\n\t DISTANCIA (Km): ");
scanf("%f",&k22);
printf("\n\n\t TIEMPO (Minutos): ");
scanf("%f",&t22);
v22=((k22/1.852)/(t22/60));
printf("\n\n\t %0.f Km en %0.f Minutos suponen: %0.2f nudos ",k22,t22,v22);
cout << "\n\n\tREALIZAR OTRO CALCULO?:\n\n"<<endl;
cout << "\n1:SI\n\n"<<endl;
cout << "\n2:NO\n\n"<<endl;
cin >> varprog;
system("cls");
}
while(varprog!=2);
break;
case 13:
break;
default:
break;
}
}
while(elec!=13);
return 0; // Valor de retorno al S.O.
}
// Implementación de Procedimientos y Funciones
double calcang(float D1, float D22, float D3){
double d1,d2,aux,omega,RA,Rbarco,U;
d1=abs(D22-D1)*pi/180;
d2=abs(D3-D22)*pi/180;
if (d1>d2){
U=asin((sin(d2)*(cos(d1)*sin(d2) + cos(d2)*sin(d1)))/(pow((pow(cos(d1),2)*pow(cos(d2),2)*pow(sin(d2),2) + pow(cos(d1),2)*pow(sin(d2),4) + 2*cos(d1)*pow(cos(d2),3)*sin(d1)*sin(d2) + 2*cos(d1)*cos(d2)*sin(d1)*pow(sin(d2),3) - 4*cos(d1)*cos(d2)*sin(d1)*sin(d2) + pow(cos(d2),4)*pow(sin(d1),2) + pow(cos(d2),2)*pow(sin(d1),2)*pow(sin(d2),2) - 4*pow(cos(d2),2)*pow(sin(d1),2) + 4*pow(sin(d1),2)),0.5)));
omega=180-U*(180/pi)-d1*(180/pi)-d2*(180/pi);
RA=(180-D1+omega);
}
else if (d1<=d2){
aux=d1;
d1=d2;
d2=aux;
U=asin((sin(d2)*(cos(d1)*sin(d2) + cos(d2)*sin(d1)))/(pow((pow(cos(d1),2)*pow(cos(d2),2)*pow(sin(d2),2) + pow(cos(d1),2)*pow(sin(d2),4) + 2*cos(d1)*pow(cos(d2),3)*sin(d1)*sin(d2) + 2*cos(d1)*cos(d2)*sin(d1)*pow(sin(d2),3) - 4*cos(d1)*cos(d2)*sin(d1)*sin(d2) + pow(cos(d2),4)*pow(sin(d1),2) + pow(cos(d2),2)*pow(sin(d1),2)*pow(sin(d2),2) - 4*pow(cos(d2),2)*pow(sin(d1),2) + 4*pow(sin(d1),2)),0.5)));
omega=180-U*(180/pi)-d1*(180/pi)-d2*(180/pi);
RA=360-omega-D3;
}
Rbarco=RA;
if (Rbarco>360){
Rbarco=Rbarco-360;
}
Rbarco=360-Rbarco;
return Rbarco;
}