Перевод углов в градусы, минуты, секунды и обратно (CPP)


Очень простые и понятные вычисления.

/*///////////////////////////////////////////////////////////////

 GradMinSec, GNU C++, 2011-01-13
 
 Artix, master@7masterov.ru, icq:53666599, skype:artixmaster
 
 * Error in code? Nothing is perfect!
 * Free source for free Linux, use it for free!
 * Please, do not remove this comment!

///////////////////////////////////////////////////////////////*/

#include <stdio.h>

struct GradMin
{
    int grad;
    double min;
};

struct GradMinSec
{
    int grad;
    int min;
    double sec;
};

GradMin ToGradMin(double angle)
{
    GradMin retValue;
    retValue.grad = (int)angle;
    retValue.min = (angle-retValue.grad)*60;
    return retValue;
}

GradMinSec ToGradMinSec(double angle)
{
    GradMinSec retValue;
    retValue.grad = (int)angle;
    retValue.min = (int)((angle-retValue.grad)*60);
    retValue.sec = ((angle-retValue.grad)*60-retValue.min)*60;
    return retValue;
}

double ToAngle(GradMinSec data)
{
    return data.grad + data.min/60.0 + data.sec/3600.0;
}

int main()
{
    double angle = 45.92;
    GradMin d = ToGradMin(angle);
    printf("Angle %.2f, Data=(%d,%.2f')\n",angle,d.grad,d.min);
    GradMinSec g = ToGradMinSec(angle);
    printf("Angle %.2f, Data=(%d,%d',%.2f'')\n",angle,g.grad,g.min,g.sec);
    double a = ToAngle(g);
    printf("Data=(%d,%d',%.2f''), Angle=%.2f\n",g.grad,g.min,g.sec,a);
    return 1;
}