C/C++

Написать программу C++

Перевод градусов минут и секунд в десятичные и наоборот
Пример:
#include <iostream>
#include <string>
#include <iomanip>
int integer(std::istream& inp, const char* msg) {
std::cout << msg;
int value;
inp >> value;
return value;
}
struct Corner {
int degree;
int minute;
int second;
std::string to_string()const {
return std::to_string(degree) + "° "
+ std::to_string(minute) + "\' "
+ std::to_string(second) + "\"";
}
double decimal()const {
static const auto m = 60.0;
static const auto s = 3600.0;
return degree + minute / m + second / s;
}
friend std::istream& operator>>(std::istream& inp, Corner& c) {
c.degree = integer(inp, "Введите градусы: ");
c.minute = integer(inp, "Введите минуты: ");
c.second = integer(inp, "Введите секунды: ");
return inp;
}
friend std::ostream& operator<<(std::ostream& out, const Corner& c) {
return out << c.to _string();
}
};
int main() {
Corner corner;
std::cin >> corner;
std::cout << "Вы ввели: " << corner << '\n';
std::cout << std::fixed << std::setprecision(10);
std::cout << "Десятичные градусы (deg): " << corner.decimal() << '\n';
}
Сам Самыч
Сам Самыч
70 499
Лучший ответ
int g, m, s;
cin >> g >> m >> s;
cout << g + m / 60.0 + s / 3600.0;
Павел Ашуров
Павел Ашуров
71 963
Можно сделать две функции: одну превращающую число в структуру, состоящую из градусов (знаковое целое число), минут (беззнаковое целое число) и секунд (неотрицательное вещественное число), а другую превращающую структуру в число.
#include <iostream>
using namespace std;
struct DMS { int d, m; double s; };
DMS toDMS(double x)
{ int sign = 1; DMS y; if (x < 0)
{ sign = -1; x = - x; } y.d = x; x -= y.d;
x *= 60; y.m = x; x -= y.m; y.s = 60 * x;
y.d *= sign; return y; }
double fromDMS(DMS x)
{ double sign = 1; if (x.d < 0)
{ sign = -1; x.d = - x.d; } return
(x.d + x.m / 60. + x.s / 3600.) * sign; }
int main()
{
cout.precision(13);
DMS Vgradusah;
double degrees, minutes, seconds, x;
while (true) {
cout << ">>> "; cin >> degrees >>
minutes >> seconds;
Vgradusah.d = degrees;
Vgradusah.m = minutes;
Vgradusah.s = seconds;
x = fromDMS(Vgradusah);
Vgradusah = toDMS(x);
cout << Vgradusah.d << "°"
<< Vgradusah.m << "\'" <<
Vgradusah.s << "\"" << endl; }
}
Вот так программа работает хорошо, но не охватывает случай, когда в структуре ноль градусов, но угол всё же отрицательный. Можно, конечно, её переписа́ть, но я не буду потому что не знаю как для Вас лучше: например, минус можно вводить отдельно или как? А без любых углов, в том числе и отрицательных, включая тот случай о котором я уже сказала, это вообще всё полная белиберда...
Марк Ополев
Марк Ополев
66 572
Вот моё решение:

#include <iostream>

using namespace std;



void calc()

{

int g,m,s;

cout<<"Введите Градусы: ";

cin>>g;

cout<<"Введите Минуты: ";

cin>>m;

cout<<"Введите Секунды: ";

cin>>s;

double result;

result = g + m/60 + s/3600;

cout<<"Результат: "<<result<<" Градусов Угла";

}



int main()

{

setlocale(0,"ru");

calc();

}
Павел Ашуров Решение ошибочно: целое / целое -> целое. У тебя СНАЧАЛА производятся целочисленные вычисления, дающие нулевую дробную часть, а ПОТОМ целое число преобразуется в вещественное и присваивается переменной result.