2014-01-21 2 views
1

Я пытаюсь преобразовать широту и долготу от градусов, минут, секунд до десятичной степени. Я правильно преобразовал числа, но у меня возникают проблемы с преобразованием знака. Когда я вводил цифры 39 57 21 для широты и -75 11 14 по долготе, он правильно преобразуется в (39.9558, 75.1872), но моя формула расчета знака работает неправильно. Я проверил код с помощью тонкой гребенки, но не могу найти ошибку в моей формуле. Формулу I давали, чтобы найти это: sign = (2x)/(abs (x) +1). Я включил свой код ниже. Любая помощь будет принята с благодарностью.Расчет знака в C++

#include <iomanip> 
#include <cmath> 
#include <iostream> 
#include <string> 
using namespace std; 

int main() 
{ 
    int user_degrees_latitude, user_minutes_latitude, user_seconds_latitude, 
     user_degrees_longitude, user_minutes_longitude, user_seconds_longitude, 
     sign_latitude, sign_longitude; 
    double total_minutes_latitude, total_degrees_latitude, 
     total_minutes_longitude, total_degrees_longitude, final_latitude, 
     final_longitude; 
    const double sixtieth = (1./60); 

    cout << "Input latitude in degrees, minutes, seconds:"; 
    cin >> user_degrees_latitude >> user_minutes_latitude >> 
     user_seconds_latitude; 

    cout << "Input longitude in degrees, minutes, seconds:"; 
    cin >> user_degrees_longitude >> user_minutes_longitude >> 
     user_seconds_longitude; 

    total_minutes_latitude = 
     (user_minutes_latitude + ((sixtieth) * user_seconds_latitude)); 
    total_degrees_latitude = 
     (abs(user_degrees_latitude) + ((sixtieth) * total_minutes_latitude)); 

    total_minutes_longitude = 
     (user_minutes_longitude + ((sixtieth) * user_seconds_longitude)); 
    total_degrees_longitude = 
     (abs(user_degrees_longitude) + ((sixtieth) * total_minutes_longitude)); 

    sign_latitude = 
     (2 * (total_degrees_latitude))/((abs(total_degrees_latitude)) + 1); 
    sign_longitude = 
     (2 * (total_degrees_longitude))/((abs(total_degrees_longitude)) + 1); 

    final_latitude = (sign_latitude * total_degrees_latitude); 
    final_longitude = (sign_longitude * total_degrees_longitude); 

    cout << user_degrees_latitude << " deg " << user_minutes_latitude << "\' " 
     << user_seconds_latitude << "\" latitude, " << user_degrees_longitude 
     << " deg " << user_minutes_longitude << "\' " << user_seconds_longitude 
     << "\""; 
    cout << " is (" << total_degrees_latitude << "," << total_degrees_longitude 
     << ")" << endl; 

    return 0; 
} 
+3

Короткая тестовая версия вместо всего кода будет приятной. – Borgleader

+0

Ну, может быть, ваша формула неправильная? – OldProgrammer

+0

Это в основном тот же самый код, который вы опубликовали ранее. Вы обнаружите, что использование вашего отладчика поможет вам намного больше, чем попросить SO отладить его для вас. –

ответ

0

Во-первых, попробуйте лучшую функцию для вычисления знака, такие как:

double sign(double x) {return (x < 0) ? -1 : 1;} 

Во-вторых, так как только переменные user_degrees_latitude и user_degrees_longitude когда-либо будет отрицательным, вы должны использовать только те, вычислите знак в конце, как только у вас есть величины.

sign_latitude = sign(user_degrees_latitude); 
sign_longitude = sign(user_degrees_longitude); 
Смежные вопросы