Всех приветствую! Если Вам не сложно, то хотел бы попросить помочь. Задачу необходимо решить на ЯП Pascal с использованием подпрограмм, если можно, то с комментариями переменных и некоторых функций. Нужно сделать программу, в которой при помощи case можно выбрать систему, из который будет совершаться перевод, а потом аналогично через case выбрать систему,
в которую нужно перевести. Системы счисления: 2, 8, 10 и 16. Заранее спасибо.
Ответы
Ответ дал:
0
// PascalABC.NET 3.3, сборка 1625 от 17.01.2018
// Внимание! Если программа не работает, обновите версию!
function aToDec(n:string;k:integer):integer;
// Перевод из системы по основанию k в десятичную
begin
var s:='0123456789ABCDEF';
Result:=0;
var pa:=1;
for var i:=Length(n) downto 1 do begin
Result+=pa*(Pos(n[i],s)-1);
pa*=k
end
end;
function DecToa(n,k:integer):string;
// Перевод из десятичной системы в систему по основанию k
begin
Result:='';
while n>0 do begin
var r:=n mod k;
if r<10 then Result:=r+Result
else Result:=Chr(Ord('A')+r-9)+Result;
n:=n div k
end
end;
function AtoB(s:string;A,B:integer):string;
// Перевод из системы по основанию A в систему по основанию B
begin
Result:=DecToa(aToDec(s,A),B)
end;
begin
var n:=ReadlnString('Какое число перевести?');
var (a,b):=ReadInteger2('Исходное и результирующее основания:');
Writeln(n,'(',a,') = ',AtoB(n,a,b),'(',b,')');
end.
Пример
Какое число перевести? 2018
Исходное и результирующее основания: 10 16
2018(10) = 7E2(16)
// Внимание! Если программа не работает, обновите версию!
function aToDec(n:string;k:integer):integer;
// Перевод из системы по основанию k в десятичную
begin
var s:='0123456789ABCDEF';
Result:=0;
var pa:=1;
for var i:=Length(n) downto 1 do begin
Result+=pa*(Pos(n[i],s)-1);
pa*=k
end
end;
function DecToa(n,k:integer):string;
// Перевод из десятичной системы в систему по основанию k
begin
Result:='';
while n>0 do begin
var r:=n mod k;
if r<10 then Result:=r+Result
else Result:=Chr(Ord('A')+r-9)+Result;
n:=n div k
end
end;
function AtoB(s:string;A,B:integer):string;
// Перевод из системы по основанию A в систему по основанию B
begin
Result:=DecToa(aToDec(s,A),B)
end;
begin
var n:=ReadlnString('Какое число перевести?');
var (a,b):=ReadInteger2('Исходное и результирующее основания:');
Writeln(n,'(',a,') = ',AtoB(n,a,b),'(',b,')');
end.
Пример
Какое число перевести? 2018
Исходное и результирующее основания: 10 16
2018(10) = 7E2(16)
Ответ дал:
0
Какое число перевести? 2018
Исходное и результирующее основания: 11 18
2018(11) = 84I(18)
Исходное и результирующее основания: 11 18
2018(11) = 84I(18)
Ответ дал:
0
Но вот исходное число не должно содержать цифр, отличных от 0..9
Ответ дал:
0
Поправил. Можно переводить между системами с любыми основаниями от 2 до 16 в обе стороны.
Ответ дал:
0
Большое спасибо!
Ответ дал:
0
Пожалуйста. Если допишете var s:='0123456789ABCDEF'; до Z, сможете расширить диапазон оснований систем до 36.
Вас заинтересует
2 года назад
2 года назад
9 лет назад
9 лет назад
10 лет назад
10 лет назад