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

Объяснение кода листинга программы

  1. Объявляется пользовательский тип данных TBinNumb как строка из 8 символов, и TInt как целое число от -127 до 127.
  2. Создается функция DirectToDec, которая принимает строку s и возвращает целое число.
  3. В функции DirectToDec объявляются переменные Result (целое число) и n, i (целые числа от 1 до 8).
  4. Выполняется цикл от 2 до длины строки s.
  5. В цикле происходит вычисление Result с использованием битовой операции и корректировка значения по формуле.
  6. Если первый символ строки s равен '1', Result умножается на -1.
  7. Функция DirectToDec возвращает Result.
  8. Создается функция ReverseToDec, которая также принимает строку s и возвращает целое число.
  9. В функции ReverseToDec создается строка ss и переменная i (целые числа от 1 до 8).
  10. Если первый символ строки s равен '1', то в цикле меняются биты в строке ss.
  11. Выполняется вызов функции DirectToDec с аргументом ss, и результат возвращается.
  12. Создается функция AdditionalToDec, принимающая строку s и возвращающая целое число.
  13. В функции AdditionalToDec результат вычисляется вычитанием 1 из результата вызова функции ReverseToDec с аргументом s.
  14. В основной программе пользователю предлагается ввести число в двоичной системе счисления.
  15. Если первый символ строки s равен '1', пользователю предлагается выбрать тип кодирования: прямой, обратный или дополнительный.
  16. В зависимости от выбора пользователя выводится соответствующий результат. Если первый символ строки s не равен '1', выводится результат вызова функции DirectToDec с аргументом s.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

9   голосов , оценка 3.778 из 5