Форум программистов, компьютерный форум CyberForum.ru

Преобразовать координаты из десятичного представления в градусы минуты секунды - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 24, средняя оценка - 4.88
V-Gub
0 / 0 / 0
Регистрация: 09.09.2013
Сообщений: 17
09.09.2013, 12:46     Преобразовать координаты из десятичного представления в градусы минуты секунды #1
Добрый день!
Пишу программку, очень маленькую, но мне она нужна для работы, собственно всегда то что мне нужно пересчитывал в Excel'е, но так как начал изучение С++ решил попробовать написать её.
Суть в чём! Я получаю морские координаты, но в градусах и десятых градусов в таком виде N 40,1234, 39.1234 и такие же по E, мне их нужно перевести в грудусы минуты и десятые минут т.е. WGS-84 из N 40,1234 и получаю N 40°7.40, то же самое и с долготой, т.е. просто отбрасываем целую часть (40), а дробную умножаем на 60 и потом записываем ввиде 40°07.40. В экселе это всё выглядит просто функция ОТБР и т.д., а в билдере С++ у меня не получается.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
#include <vcl.h>
#pragma hdrstop
 
#include "Unit1.h"
#include <cmath> // - это я добавил для функции floor
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
float x;
float x1;
float y;
x = StrToFloat(Edit1->Text);
//x1= floor(x);  - ругается на это!!!!
y = x1*60;
Label1->Caption = "N " + FloatToStrF(y,ffGeneral,7,2) + "°"; // - здесь как-то записать что к чему складывается... N + x + ° + x1
}
Ну в общем подскажите кто, что может?!
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.09.2013, 12:46     Преобразовать координаты из десятичного представления в градусы минуты секунды
Посмотрите здесь:

C++ Перевод угла из радиан в градусы, минуты и секунды
C++ Как перевести секунды в часы, минуты и секунды
C++ Перевести радианную меру угла в градусы, минуты и секунды
C++ Преобразовать период времени p, заданный в секундах (p<=86400) в часы, минуты и секунды, результат вывести в виде чч:мм:сс .
Перевод секунд в часы,минуты и секунды C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
vxg
Модератор
 Аватар для vxg
2669 / 1680 / 158
Регистрация: 13.01.2012
Сообщений: 6,280
09.09.2013, 12:59     Преобразовать координаты из десятичного представления в градусы минуты секунды #2
C++
1
2
3
double x; //тут градусы с запятой
double y = int(x); //тут целые градусы
double z = (x - y) * 60; //тут минуты с запятой
Nekto
342 / 287 / 10
Регистрация: 23.03.2012
Сообщений: 838
09.09.2013, 13:03     Преобразовать координаты из десятичного представления в градусы минуты секунды #3
Дробную\целую часть можно получать с помощью стандартной функции http://www.cplusplus.com/reference/cmath/modf/
V-Gub
0 / 0 / 0
Регистрация: 09.09.2013
Сообщений: 17
09.09.2013, 13:33  [ТС]     Преобразовать координаты из десятичного представления в градусы минуты секунды #4
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
#include <vcl.h>
#pragma hdrstop
 
#include "Unit1.h"
#include <cmath>
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
double x; //тут градусы с запятой
double y = int(x); //тут целые градусы
double z = (x - y) * 60; //тут минуты с запятой
double e;
x = StrToFloat(Edit1->Text);
Label1->Caption = "N " + FloatToStrF(y,ffGeneral,7,3) + "°" + FloatToStrF(z,ffGeneral,7,3);
}
//---------------------------------------------------------------------------
 
 
// x = 40.1234
// y = 40
// z = (40.1234-40)*60; z = 0.1234*60; z = 7.404
// конечный результат должен иметь вид N 40°7.404
// а получается не то :  N 0°2.536585E-305 , т.е. y = 0.
Что я упустил???
vxg
Модератор
 Аватар для vxg
2669 / 1680 / 158
Регистрация: 13.01.2012
Сообщений: 6,280
09.09.2013, 13:41     Преобразовать координаты из десятичного представления в градусы минуты секунды #5
Цитата Сообщение от V-Gub Посмотреть сообщение
Что я упустил???
как бы даже неудобно говорить. вы упустили x = 40.1234)
Nekto
342 / 287 / 10
Регистрация: 23.03.2012
Сообщений: 838
09.09.2013, 13:42     Преобразовать координаты из десятичного представления в градусы минуты секунды #6
Цитата Сообщение от V-Gub Посмотреть сообщение
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
#include <vcl.h>
#pragma hdrstop
 
#include "Unit1.h"
#include <cmath>
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
double x; //тут градусы с запятой
double y = int(x); //тут целые градусы
double z = (x - y) * 60; //тут минуты с запятой
double e;
x = StrToFloat(Edit1->Text);
Label1->Caption = "N " + FloatToStrF(y,ffGeneral,7,3) + "°" + FloatToStrF(z,ffGeneral,7,3);
}
//---------------------------------------------------------------------------
 
 
// x = 40.1234
// y = 40
// z = (40.1234-40)*60; z = 0.1234*60; z = 7.404
// конечный результат должен иметь вид N 40°7.404
// а получается не то :  N 0°2.536585E-305 , т.е. y = 0.
Что я упустил???
Присвоить значение иксу надо перед тем, как производишь действия.
C++
1
2
double x = StrToFloat(Edit1->Text);
double y = int(x);
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
09.09.2013, 13:49     Преобразовать координаты из десятичного представления в градусы минуты секунды
Еще ссылки по теме:

C++ Определить текущий день недели, год, месяц, число, а также текущее время-часы, минуты, секунды, сотые доли секунды.
Перевод Секунд в Минуты секунды ,Указатели C++
C++ Часы, минуты, секунды - операция сложения

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
V-Gub
0 / 0 / 0
Регистрация: 09.09.2013
Сообщений: 17
09.09.2013, 13:49  [ТС]     Преобразовать координаты из десятичного представления в градусы минуты секунды #7
Цитата Сообщение от vxg Посмотреть сообщение
как бы даже неудобно говорить. вы упустили x = 40.1234)
но это же значение всегда разное. Его только в Edit вписывать потом после компиляции

Добавлено через 31 секунду
Цитата Сообщение от Nekto Посмотреть сообщение
Присвоить значение иксу надо перед тем, как производишь действия.
C++
1
2
double x = StrToFloat(Edit1->Text);
double y = int(x);
Спасибо большое! Разобрался!

Добавлено через 34 секунды
Всем спасибо!!!!
Yandex
Объявления
09.09.2013, 13:49     Преобразовать координаты из десятичного представления в градусы минуты секунды
Ответ Создать тему
Опции темы

Текущее время: 17:26. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru