Сложение и вычитание двух целых чисел в дополнительном коде - Pascal

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

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

Составьте программу представления в двоичном виде (ввод и вывод в виде 8 нулей и единиц для каждого числа) выполнения операций: 1. сложения 2. вычитания для двух целых чисел в дополнительном коде.

Решение задачи: «Сложение и вычитание двух целых чисел в дополнительном коде»

textual
Листинг программы
  1. type
  2.     TBinNumb = String[8];
  3.     TMax = -63..63;
  4.     TInt = -127..127;
  5.  
  6. function BinToDec(const s: TBinNumb): TInt;
  7. var
  8.     Result: TInt;
  9.     i, n: 1..8;
  10. begin
  11.     Result := 0; n := Length(s);
  12.     for i := 1 to n do
  13.         Inc(Result, Round(Ord(s[i] = '1') * Exp(Ln(2) * (n - i))));
  14.     BinToDec := Result;
  15. end;
  16.  
  17. function DecToBin(x: TInt): TBinNumb;
  18. var
  19.     Result: TBinNumb;
  20. begin
  21.     Result := '';
  22.     repeat
  23.         Result := Chr(48 + Ord(x mod 2 <> 0)) + Result;
  24.         x := x div 2;
  25.     until (x = 0);
  26.     while (Length(Result) < 7) do
  27.         Result := '0' + Result;
  28.     DecToBin := Result;
  29. end;
  30.  
  31. function AdditionalToDec(const s: TBinNumb): TInt;
  32. var
  33.     Result: TInt;
  34.     ss: TBinNumb;
  35.     i, n: 1..8;
  36. begin
  37.     if (s[1] = '1')
  38.     then
  39.     begin
  40.         ss := Copy(s, 2, Length(s) - 1);
  41.         for i := 1 to Length(ss) do
  42.             ss[i] := Chr(48 + Ord(ss[i] = '0'));
  43.         Result := -BinToDec(ss) - 1;
  44.     end
  45.     else
  46.         Result := BinToDec(s);
  47.     AdditionalToDec := Result;
  48. end;
  49.  
  50. function DecToAdditional(x: TInt): TBinNumb;
  51. var
  52.     Result: TBinNumb;
  53.     flag: Boolean;
  54.     i: 1..8;
  55. begin
  56.     if (x < 0)
  57.     then
  58.     begin
  59.         Result := DecToBin(Abs(x));
  60.         for i := 1 to Length(Result) do
  61.             Result[i] := Chr(48 + Ord(Result[i] = '0'));
  62.         i := Length(Result);
  63.         repeat
  64.             if (Result[i] = '1')
  65.             then
  66.                 Result[i] := '0'
  67.             else
  68.                 Result[i] := '1';
  69.             flag := (Result[i] = '1');
  70.             Dec(i);
  71.         until ((flag) Or (i <= 1));
  72.         Result := '1' + Result;
  73.     end
  74.     else
  75.         Result := '0' + DecToBin(x);
  76.     DecToAdditional := Result;
  77. end;
  78.  
  79. var
  80.     x, y: TBinNumb;
  81. begin
  82.     ReadLn(x); ReadLn(y);
  83.     WriteLn('   Сумма: ', DecToAdditional(AdditionalToDec(x) + AdditionalToDec(y)));
  84.     WriteLn('Разность: ', DecToAdditional(AdditionalToDec(x) - AdditionalToDec(y)));
  85. end.

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

  1. Объявление типов переменных:
    • TBinNumb - строка фиксированной длины (8 символов)
    • TMax - диапазон от -63 до 63
    • TInt - диапазон от -127 до 127
  2. Функция BinToDec:
    • Принимает строку в двоичном формате s и возвращает целое число TInt.
    • Инициализирует переменные Result и n.
    • Выполняет цикл для каждого символа строки, осуществляя преобразование двоичного числа в десятичное.
    • Возвращает результат BinToDec.
  3. Функция DecToBin:
    • Принимает целое число x и возвращает строку в двоичном формате TBinNumb.
    • Инициализирует переменную Result.
    • Преобразует число в двоичную строку.
    • Дополняет строку нулями до 8 символов.
    • Возвращает результат DecToBin.
  4. Функция AdditionalToDec:
    • Принимает строку в дополнительном коде s и возвращает целое число TInt.
    • Инициализирует переменные Result и ss.
    • Проверяет знак числа и преобразует в десятичное число.
    • Возвращает результат AdditionalToDec.
  5. Функция DecToAdditional:
    • Принимает целое число x и возвращает строку в дополнительном коде TBinNumb.
    • Инициализирует переменные Result и flag.
    • Проверяет знак числа и преобразует в дополнительный код.
    • Возвращает результат DecToAdditional.
  6. Основная часть программы:
    • Вводятся две строки в двоичном формате x и y.
    • Выполняются операции сложения и вычитания чисел в дополнительном коде.
    • Результаты выводятся на экран.

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


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

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

11   голосов , оценка 3.364 из 5

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

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

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