Перевод из прямого, обратного и дополнительного кода в десятичную систему - 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
.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д