Помогите, пожалуйста! Нужно написать программу, которая будет переводить из любой системы счисления в десятеричную. И должны присутствовать mod и div, желательно покороче!
Ответы
Ответ дал:
0
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 (k<2) or (k>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 (k<2) or (k>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
Вас заинтересует
1 год назад
1 год назад
6 лет назад
6 лет назад
8 лет назад
8 лет назад
9 лет назад
9 лет назад