function [dd,mm,ss,str]=deg2dms(deg)
%Перевод угла, заданного в долЯх градусов (часов),
%в градусы (часы), минуты и секунды и в символьное представление
%
%Вызов:	[dd,mm,ss,str]=deg2dms(deg);
%
%Входные параметры:
%  deg - угол в долЯх градусов (или часов).;
%
%Выходные параметры (все имеют знак заданного угла):
%   dd - градусы (часы);
%   mm - минуты;
%   ss - секунды (будут округлены до 1E-8 c);
%  str - символьное представление в виде 'XXX:XX:XX.XXX'.

% Sergey Khomutov,  08.05.1997,  Novosibirsk
%     revised 20.05.2001 (учет знаков и символьный вывод в матрицу)
%     revised 19.04.2003 (учет знаков и обработка случаев с 60 с. или 60 мин )
%     revised 14.11.2005 (учет знаков и обработка случаев с 60 с. или 60 мин.)

s=sign(deg);                  % знак аргумента

sec=abs(deg)*3600;
%dd=fix(deg);			         % градусы / часы
%mm=round(rem(deg,1)*60);		   % минуты
%ss=deg*3600-(dd*3600+mm*60);	% секунды

dd=fix(sec/3600);
mm=fix(sec/60)-dd*60;
ss=sec-mm*60-dd*3600;

k=abs(ss-60)<1E-8;	% округлЯем до 1E-8 c
    ss(k)=ss(k)-60; mm(k)=mm(k)+1;
k=mm==60;
   mm(k)=0; dd(k)=dd(k)+1;

dd=s.*dd; mm=s.*mm; ss=s.*ss;	% восстанавливаем знак

if nargout>3
	%			Формируем символьное представление
   s_d=num2str(abs(dd),'%03d');
	s_m=num2str(abs(mm),'%02d');
	s_s=num2str(abs(ss),'%05.2f');
   s_sign=num2str(s,'%+1d');s_sign=s_sign(:,1);
   str=strcat(s_sign,s_d,':',s_m,':',s_s);
end
