Программа на языке Си для перевода делений угломера в градусы и в обратную сторону
Внешний вид
Представлены функции на языке Си для конвертации делений угломера в строку или градусы и обратно.
Список функций
[править]- str2du - Перевод строки в ДУ
- du2str - Перевод ДУ в строку
- du2deg - Перевод ДУ в градусы
- deg2du - Перевод градусов в ДУ
Листинг модуля, содержащего реализацию функций
[править]#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
/* maximum length of angular measure when written as a string */
#define MAXLEN 5
typedef struct { unsigned char big, small; } DU;
/* String to angular measure conversion */
DU str2du(const char * const str)
{
char str1[MAXLEN+1]; /*make a copy of str since the strtok
function modifies the string passed into it*/
char* token;
DU du;
strcpy(str1, str);
token = strtok(str1, "-"); /* extract big part */
du.big=atoi(token); /* convert string to integer */
token = strtok(NULL, "-"); /* extract small part */
du.small=atoi(token); /* convert string to integer */
return du;
}
/* Angular measure to string conversion */
char* du2str(const DU du, char * const str)
{
sprintf(str, "%d-%02d", du.big, du.small);
return str;
}
/* Angular measure to degrees conversion */
float du2deg(const DU du)
{
return 6*(du.big + du.small/100.0);
}
/* Degrees to angular measure conversion */
DU deg2du(float degrees)
{
DU du;
du.big = (unsigned char) floor(degrees/6.0);
du.small = (unsigned char) ((degrees/6.0 - floor(degrees/6.0)) * 100);
return du;
}
Пример использования
[править]int main()
{
char str[MAXLEN+1] = "60-00";
DU du;
du = str2du(str);
printf("\nString \"%s\" is converted to pair of numbers %d:%d \n",
str, du.big, du.small);
du.big=23; du.small=15;
printf("\nReadings of angle-meter of %s is equal to %.2f degrees\n",
du2str(du, str), du2deg(du));
printf("\n%.2f degrees come to %s points of angle-meter\n",
45.5, du2str(deg2du(45.5), str) );
return 0;
}