Программа на языке Си для перевода делений угломера в градусы и в обратную сторону

Материал из Викиучебника — открытых книг для открытого мира
Перейти к навигации Перейти к поиску

Представлены функции на языке Си для конвертации делений угломера в строку или градусы и обратно.

Список функций[править]

  • 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;	
}