Перевод из прямого, обратного и дополнительного кода в десятичную систему - Pascal

Узнай цену своей работы

Формулировка задачи:

помогите, пожалуйста, составить программу для перевода в десятичную систему целых чисел из прямого, обратного и дополнительного кода для 8-битной кодировки

Решение задачи: «Перевод из прямого, обратного и дополнительного кода в десятичную систему»

textual
Листинг программы
  1. type
  2.     TBinNumb = String[8];
  3.     TInt = -127..127;
  4. function DirectToDec(const s: TBinNumb): TInt;
  5. var
  6.     Result: TInt;
  7.     n, i: 1..8;
  8. begin
  9.     Result := 0; n := Length(s);
  10.     for i := 2 to n do
  11.     begin
  12.         Inc(Result, Round(Ord(s[i] = '1') * Exp(Ln(2) * (n - i))));
  13.     end;
  14.     WriteLn;
  15.     if (s[1] = '1')
  16.     then
  17.         Result := -Result;
  18.     DirectToDec := Result;
  19. end;
  20.  
  21. function ReverseToDec(const s: TBinNumb): TInt;
  22. var
  23.     ss: TBinNumb;
  24.     i: 1..8;
  25. begin
  26.     ss := s;
  27.     if (ss[1] = '1')
  28.     then
  29.         for i := 2 to Length(ss) do
  30.             if (ss[i] = '1')
  31.             then
  32.                 ss[i] := '0'
  33.             else
  34.                 ss[i] := '1';
  35.     WriteLn(ss);
  36.     ReverseToDec := DirectToDec(ss);
  37. end;
  38.  
  39. function AdditionalToDec(const s: TBinNumb): TInt;
  40. begin
  41.     AdditionalToDec := ReverseToDec(s) - 1;
  42. end;
  43.  
  44. var
  45.     s: TBinNumb;
  46.     n: Byte;
  47. begin
  48.     Write('Введите число в двоичной СС (8 бит: первый бит знак, 7 бит число):');
  49.     ReadLn(s);
  50.     if (s[1] = '1')
  51.     then
  52.     begin
  53.         WriteLn('1. Прямой');
  54.         WriteLn('2. Обратный');
  55.         WriteLn('3. Дополнительный');
  56.         ReadLn(n);
  57.         case n of
  58.             1: WriteLn(DirectToDec(s));
  59.             2: WriteLn(ReverseToDec(s));
  60.             3: WriteLn(AdditionalToDec(s));
  61.         end;
  62.     end
  63.     else
  64.         WriteLn(DirectToDec(s));
  65. 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

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут