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