Перевод из прямого, обратного и дополнительного кода в десятичную систему - Pascal
Формулировка задачи:
помогите, пожалуйста, составить программу для перевода в десятичную систему целых чисел из прямого, обратного и дополнительного кода для 8-битной кодировки
Решение задачи: «Перевод из прямого, обратного и дополнительного кода в десятичную систему»
textual
Листинг программы
type
TBinNumb = String[8];
TInt = -127..127;
function DirectToDec(const s: TBinNumb): TInt;
var
Result: TInt;
n, i: 1..8;
begin
Result := 0; n := Length(s);
for i := 2 to n do
begin
Inc(Result, Round(Ord(s[i] = '1') * Exp(Ln(2) * (n - i))));
end;
WriteLn;
if (s[1] = '1')
then
Result := -Result;
DirectToDec := Result;
end;
function ReverseToDec(const s: TBinNumb): TInt;
var
ss: TBinNumb;
i: 1..8;
begin
ss := s;
if (ss[1] = '1')
then
for i := 2 to Length(ss) do
if (ss[i] = '1')
then
ss[i] := '0'
else
ss[i] := '1';
WriteLn(ss);
ReverseToDec := DirectToDec(ss);
end;
function AdditionalToDec(const s: TBinNumb): TInt;
begin
AdditionalToDec := ReverseToDec(s) - 1;
end;
var
s: TBinNumb;
n: Byte;
begin
Write('Введите число в двоичной СС (8 бит: первый бит знак, 7 бит число):');
ReadLn(s);
if (s[1] = '1')
then
begin
WriteLn('1. Прямой');
WriteLn('2. Обратный');
WriteLn('3. Дополнительный');
ReadLn(n);
case n of
1: WriteLn(DirectToDec(s));
2: WriteLn(ReverseToDec(s));
3: WriteLn(AdditionalToDec(s));
end;
end
else
WriteLn(DirectToDec(s));
end.
Объяснение кода листинга программы
- Объявляется пользовательский тип данных
TBinNumbкак строка из 8 символов, иTIntкак целое число от -127 до 127. - Создается функция
DirectToDec, которая принимает строкуsи возвращает целое число. - В функции
DirectToDecобъявляются переменныеResult(целое число) иn,i(целые числа от 1 до 8). - Выполняется цикл от 2 до длины строки
s. - В цикле происходит вычисление
Resultс использованием битовой операции и корректировка значения по формуле. - Если первый символ строки
sравен '1',Resultумножается на -1. - Функция
DirectToDecвозвращаетResult. - Создается функция
ReverseToDec, которая также принимает строкуsи возвращает целое число. - В функции
ReverseToDecсоздается строкаssи переменнаяi(целые числа от 1 до 8). - Если первый символ строки
sравен '1', то в цикле меняются биты в строкеss. - Выполняется вызов функции
DirectToDecс аргументомss, и результат возвращается. - Создается функция
AdditionalToDec, принимающая строкуsи возвращающая целое число. - В функции
AdditionalToDecрезультат вычисляется вычитанием 1 из результата вызова функцииReverseToDecс аргументомs. - В основной программе пользователю предлагается ввести число в двоичной системе счисления.
- Если первый символ строки
sравен '1', пользователю предлагается выбрать тип кодирования: прямой, обратный или дополнительный. - В зависимости от выбора пользователя выводится соответствующий результат. Если первый символ строки
sне равен '1', выводится результат вызова функцииDirectToDecс аргументомs.