LQ Newbie
Registered: Nov 2003
Posts: 13
Rep:

Hey could anyone help me fix my error for this C progam that calculates the surface distance. It is showing some errors.
Thanks
#include <stdio.h>
#include <math.h>
#include <string.h>
#define RHO 6367
#define PI 3.141592654
void read_GPS(float *,float *,float *,char *);
float convert_DD(float *, float *, float *);
float calc_SphereCoord_lat( char *, float *);
float calc_SphereCoord_long(char *, float *);
float deg2rad(float *);
float calc_3DCoord(float *, float *);
float straight_D(float *, float *, float *, float *, float *, float *);
int main(void)
{
float deg_lat_1, min_lat_1, sec_lat_1, deg_long_1, min_long_1, sec_long_1;
float deg_lat_2, min_lat_2, sec_lat_2, deg_long_2, min_long_2, sec_long_2;
float dec_deg_1, dec_deg_2, dec_deg_3, dec_deg_4;
float rad_lat_1, rad_long_1, rad_lat_2, rad_long_2;
float phi_lat_1, theta_long_1, phi_lat_2, theta_long_2;
char s1[10], s2[10], s3[10], s4[10];
printf("Please enter coordinates in format of 123 45 30 North\n" );
printf("where 123 = Degrees 45 = minutes 30 = seconds and North = direction.\n");
printf("Please enter in lattitudinal coordinates for start point:\n");
read_GPS(起lat_1,&min_lat_1,&sec_lat_1,s1);
dec_deg_1 = convert_DD(起lat_1,&min_lat_1,&sec_lat_1);
rad_lat_1 = calc_SphereCoord_lat(s1, &dec_deg_1);
phi_lat_1 = deg2rad(&rad_lat_1);
printf("Please enter in longitudinal coordinates for start point:\n");
read_GPS(起long_1,&min_long_1,&sec_long_1,s2);
dec_deg_2 = convert_DD(起long_1,&min_long_1,&sec_long_1);
rad_long_1 = calc_SphereCoord_long(s2, &dec_deg_2);
theta_long_1 = deg2rad(&rad_long_1);
calc_3DCoord(&phi_lat_1, &theta_long_1);
printf("Please enter lattitudinal coordinates for final destination:\n");
read_GPS(起lat_2,&min_lat_2,&sec_lat_2,s3);
dec_deg_3 = convert_DD(起lat_2, &min_lat_2,&sec_lat_2);
rad_lat_2 = calc_SphereCoord_lat(s3, &dec_deg_3);
phi_lat_2 = deg2rad(&rad_lat_2);
printf("Please enter longitudinal coordinates for final destination:\n");
read_GPS(起long_2,&min_long_2,&sec_long_2,s4);
dec_deg_4 = convert_DD(起long_2,&min_long_2,&sec_long_2);
rad_long_2 = calc_SphereCoord_long(s4, &dec_deg_4);
theta_long_2 = deg2rad(&rad_long_2);
calc_3DCoord(&phi_lat_2, &theta_long_2);
printf("Degrees:%f \n Minutes: %f \n Seconds:%f \n Direction:%s\n", deg_lat_1,
min_lat_1,sec_lat_1, s1);
printf("%f %f %f %s\n", deg_long_1, min_long_1, sec_long_1,s2);
printf("%f %f %f %s\n", deg_lat_2, min_lat_2, sec_lat_2, s3);
printf("%f %f %f %s\n", deg_long_2, min_long_2, sec_long_2,s4);
printf("%c", getchar());
return(0);
}
void read_GPS(float *degrees,float *minutes,float *seconds,char *direction)
{
scanf("%f%f%f%s", degrees, minutes, seconds, direction);
return;
}
float convert_DD(float *degrees, float *minutes, float *seconds)
{
float dec_deg,totalmins;
totalmins = *minutes + (*seconds / 60);
dec_deg = (totalmins /60) + *degrees;
printf("The decimal degree is %f", dec_deg);
printf("%c", getchar());
return(dec_deg);
}
float calc_SphereCoord_lat(char *direction, float *dec_deg)
{
int temp_1;
float phi;
char s5[] = "North";
temp_1 = strcasecmp(direction,s5);
if (temp_1 == 0)
phi = 90  *dec_deg;
else
phi = 90 + *dec_deg;
printf("The spherical coordinate phi is: %f\n", phi);
return(phi);
}
float calc_SphereCoord_long(char *direction, float *dec_deg)
{
int temp;
float theta;
char s6[] = "East";
temp = strcasecmp(direction,s6);
if (temp == 0)
theta = *dec_deg;
else
theta = (*dec_deg);
printf("The spherical coordinate theta is: %f\n", theta);
return(theta);
}
float deg2rad(float *dec_deg)
{
float radians;
radians = (*dec_deg * 2 * PI) / 360;
printf("%f as radians is: %f\n", *dec_deg, radians);
return(radians);
}
float calc_3DCoord(float *phi, float *theta)
{
float temp_1, temp_2, temp_3;
temp_1 = (RHO * (sin(*phi)) * (cos(*theta)));
temp_2 = (RHO * (sin(*phi)) * (sin(*theta)));
temp_3 = (RHO * (cos(*phi)));
printf("The cartesian coordinates are: %f %f %f\n", temp_1, temp_2, temp_3);
return(0);
}
