Всех ! если вам не сложно, то хотел бы попросить . необходимо решить на яп pascal с использованием подпрограмм, если можно, то с комментариями переменных и некоторых функций. системы счисления: 2, 8, 10 и 16. типа real чтобы число можно было записать с десятичной дробью пример: (2.25) . заранее .
// Внимание! Если программа не работает, обновите версию!
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)