
Терентий
7 год назад
Помогите, пожалуйста! Нужно написать программу, которая будет переводить из любой системы счисления в десятеричную. И должны присутствовать mod и div, желательно покороче!
ОТВЕТЫ

Платон
Aug 15, 2019
Var
s:string;
m,pk:real;
a:array[1..20] of real;
i,k,n:integer;
begin
Write(Введите число в системе счисления с основанием [2;16]: );
Readln(s);
n:=Length(s);
for i:=1 to n do begin
if s[i] in [0..9] then a[i]:=Ord(s[i])-Ord(0)
else
if s[i] in [A..F] then a[i]:=Ord(s[i])-Ord(A)+10
else
if s[i] in [a..f] then a[i]:=Ord(s[i])-Ord(a)+10
else begin
Writeln(Символ ,s[i], недопустим!);
Exit
end
end;
Write(Введите основание системы счисления: ); Read(k);
if (klt;2) or (kgt;16) then begin
Writeln(Такое значение недопустимо!);
Exit
end;
m:=a[n];
pk:=k;
for i:=n-1 downto 1 do begin
m:=m+a[i]*pk;
pk:=pk*k
end;
Writeln(Десятичный эквивалент введенного числа равен ,m)
end.
Тестовое решение
Введите число в системе счисления с основанием [2;16]: 4e32Ca
Введите основание системы счисления: 16
Десятичный эквивалент введенного числа равен 5124810
s:string;
m,pk:real;
a:array[1..20] of real;
i,k,n:integer;
begin
Write(Введите число в системе счисления с основанием [2;16]: );
Readln(s);
n:=Length(s);
for i:=1 to n do begin
if s[i] in [0..9] then a[i]:=Ord(s[i])-Ord(0)
else
if s[i] in [A..F] then a[i]:=Ord(s[i])-Ord(A)+10
else
if s[i] in [a..f] then a[i]:=Ord(s[i])-Ord(a)+10
else begin
Writeln(Символ ,s[i], недопустим!);
Exit
end
end;
Write(Введите основание системы счисления: ); Read(k);
if (klt;2) or (kgt;16) then begin
Writeln(Такое значение недопустимо!);
Exit
end;
m:=a[n];
pk:=k;
for i:=n-1 downto 1 do begin
m:=m+a[i]*pk;
pk:=pk*k
end;
Writeln(Десятичный эквивалент введенного числа равен ,m)
end.
Тестовое решение
Введите число в системе счисления с основанием [2;16]: 4e32Ca
Введите основание системы счисления: 16
Десятичный эквивалент введенного числа равен 5124810
180
Смежные вопросы: