// PascalABC.NET 3.3.5, сборка 1644 от 23.03.2018 // Внимание! Если программа не работает, обновите версию!
function aToDec(n:string;k:integer):string; // Перевод из системы по основанию k в десятичную begin var s:='0123456789ABCDEF'; Result:=''; var PointPos:=Pos('.',n); if PointPos>0 then begin // есть дробная часть var sFracPart:=n[PointPos+1:]; var r:=0.0; var p:=k; foreach var c in sFracPart do begin r+=(Pos(c,s)-1)/p; p*=k; end; Result:=r.ToString[2:] end else PointPos:=n.Length+1; var pa:=1; n:=n[:PointPos]; var p:=0; foreach var c in n.Reverse do begin p+=pa*(Pos(c,s)-1); pa*=k end; Result:=p.ToString+Result end;
function DecToa(n:string;k:integer):string; // Перевод из десятичной системы в систему по основанию k begin var s:='0123456789ABCDEF'; Result:=''; var PointPos:=Pos('.',n); var IntPart:integer; if PointPos>0 then begin // есть дробная часть var FracPart:=Frac(n.ToReal); var m:=0; while True do begin var r:=FracPart*k; Result+=s[Trunc(r)+1]; FracPart:=Frac(r); m+=1; if (m=15) or (FracPart=0) then break end; IntPart:=n[:PointPos].ToInteger; end else IntPart:=n.ToInteger; if Result<>'' then Result:='.'+Result; while IntPart>0 do begin Result:=s[IntPart mod k+1]+Result; IntPart:=IntPart div k end; if Result='' then Result:='0'; if Result[1]='.' then Result:='0'+Result end;
function AtoB(s:string;A,B:integer):string; // Перевод из системы по основанию A в систему по основанию B begin if A=10 then Result:=DecToa(s,B) else if B=10 then Result:=aToDec(s,A) else Result:=DecToa(aToDec(s,A),B) end;
begin var n:=ReadlnString('Какое число перевести?'); var (a,b):=ReadInteger2('Исходное и результирующее основания:'); Writeln(n,'(',a,') = ',AtoB(n,a,b),'(',b,')'); end.
Пример Какое число перевести? 345.653 Исходное и результирующее основания: 8 16 345.653(8) = E5.D58(16)
В минуте 60 секунд. 1) Разделить число на 3600.Получим .целое число означает текущий час. Если из задонного числа вычесть получившееся целое число умноженное на 3600 получим число секунд в текущих минутах. 2)это число необходимо разделить на 60. Целое число будет означать текущую минуту. 3) вычитаем из оставшегося числа число минут умноженное на 60 получим текущую секунду.
// Внимание! Если программа не работает, обновите версию!
function aToDec(n:string;k:integer):string;
// Перевод из системы по основанию k в десятичную
begin
var s:='0123456789ABCDEF';
Result:='';
var PointPos:=Pos('.',n);
if PointPos>0 then begin // есть дробная часть
var sFracPart:=n[PointPos+1:];
var r:=0.0;
var p:=k;
foreach var c in sFracPart do begin
r+=(Pos(c,s)-1)/p;
p*=k;
end;
Result:=r.ToString[2:]
end
else PointPos:=n.Length+1;
var pa:=1;
n:=n[:PointPos];
var p:=0;
foreach var c in n.Reverse do begin
p+=pa*(Pos(c,s)-1);
pa*=k
end;
Result:=p.ToString+Result
end;
function DecToa(n:string;k:integer):string;
// Перевод из десятичной системы в систему по основанию k
begin
var s:='0123456789ABCDEF';
Result:='';
var PointPos:=Pos('.',n);
var IntPart:integer;
if PointPos>0 then begin // есть дробная часть
var FracPart:=Frac(n.ToReal);
var m:=0;
while True do begin
var r:=FracPart*k;
Result+=s[Trunc(r)+1];
FracPart:=Frac(r);
m+=1;
if (m=15) or (FracPart=0) then break
end;
IntPart:=n[:PointPos].ToInteger;
end
else IntPart:=n.ToInteger;
if Result<>'' then Result:='.'+Result;
while IntPart>0 do begin
Result:=s[IntPart mod k+1]+Result;
IntPart:=IntPart div k
end;
if Result='' then Result:='0';
if Result[1]='.' then Result:='0'+Result
end;
function AtoB(s:string;A,B:integer):string;
// Перевод из системы по основанию A в систему по основанию B
begin
if A=10 then Result:=DecToa(s,B)
else
if B=10 then Result:=aToDec(s,A)
else Result:=DecToa(aToDec(s,A),B)
end;
begin
var n:=ReadlnString('Какое число перевести?');
var (a,b):=ReadInteger2('Исходное и результирующее основания:');
Writeln(n,'(',a,') = ',AtoB(n,a,b),'(',b,')');
end.
Пример
Какое число перевести? 345.653
Исходное и результирующее основания: 8 16
345.653(8) = E5.D58(16)
1) Разделить число на 3600.Получим .целое число означает текущий час.
Если из задонного числа вычесть получившееся целое число умноженное на 3600 получим число секунд в текущих минутах.
2)это число необходимо разделить на 60. Целое число будет означать текущую минуту.
3) вычитаем из оставшегося числа число минут умноженное на 60 получим текущую секунду.
Например
Задано число 66276.
часов.
18 * 3600 = 64800
66276 - 64800 = 1476
минуты.
24 * 60 = 1440
1476 -1440 = 36
ответ: 18 часов , 24 минуты, 36 секунд.