Сложение и вычитание двух целых чисел в дополнительном коде - Pascal
Формулировка задачи:
Составьте программу представления в двоичном виде (ввод и вывод в виде 8 нулей и единиц для каждого числа) выполнения операций:
1. сложения
2. вычитания
для двух целых чисел в дополнительном коде.
Решение задачи: «Сложение и вычитание двух целых чисел в дополнительном коде»
textual
Листинг программы
type TBinNumb = String[8]; TMax = -63..63; TInt = -127..127; function BinToDec(const s: TBinNumb): TInt; var Result: TInt; i, n: 1..8; begin Result := 0; n := Length(s); for i := 1 to n do Inc(Result, Round(Ord(s[i] = '1') * Exp(Ln(2) * (n - i)))); BinToDec := Result; end; function DecToBin(x: TInt): TBinNumb; var Result: TBinNumb; begin Result := ''; repeat Result := Chr(48 + Ord(x mod 2 <> 0)) + Result; x := x div 2; until (x = 0); while (Length(Result) < 7) do Result := '0' + Result; DecToBin := Result; end; function AdditionalToDec(const s: TBinNumb): TInt; var Result: TInt; ss: TBinNumb; i, n: 1..8; begin if (s[1] = '1') then begin ss := Copy(s, 2, Length(s) - 1); for i := 1 to Length(ss) do ss[i] := Chr(48 + Ord(ss[i] = '0')); Result := -BinToDec(ss) - 1; end else Result := BinToDec(s); AdditionalToDec := Result; end; function DecToAdditional(x: TInt): TBinNumb; var Result: TBinNumb; flag: Boolean; i: 1..8; begin if (x < 0) then begin Result := DecToBin(Abs(x)); for i := 1 to Length(Result) do Result[i] := Chr(48 + Ord(Result[i] = '0')); i := Length(Result); repeat if (Result[i] = '1') then Result[i] := '0' else Result[i] := '1'; flag := (Result[i] = '1'); Dec(i); until ((flag) Or (i <= 1)); Result := '1' + Result; end else Result := '0' + DecToBin(x); DecToAdditional := Result; end; var x, y: TBinNumb; begin ReadLn(x); ReadLn(y); WriteLn(' Сумма: ', DecToAdditional(AdditionalToDec(x) + AdditionalToDec(y))); WriteLn('Разность: ', DecToAdditional(AdditionalToDec(x) - AdditionalToDec(y))); end.
Объяснение кода листинга программы
- Объявление типов переменных:
TBinNumb
- строка фиксированной длины (8 символов)TMax
- диапазон от -63 до 63TInt
- диапазон от -127 до 127
- Функция
BinToDec
:- Принимает строку в двоичном формате
s
и возвращает целое числоTInt
. - Инициализирует переменные
Result
иn
. - Выполняет цикл для каждого символа строки, осуществляя преобразование двоичного числа в десятичное.
- Возвращает результат
BinToDec
.
- Принимает строку в двоичном формате
- Функция
DecToBin
:- Принимает целое число
x
и возвращает строку в двоичном форматеTBinNumb
. - Инициализирует переменную
Result
. - Преобразует число в двоичную строку.
- Дополняет строку нулями до 8 символов.
- Возвращает результат
DecToBin
.
- Принимает целое число
- Функция
AdditionalToDec
:- Принимает строку в дополнительном коде
s
и возвращает целое числоTInt
. - Инициализирует переменные
Result
иss
. - Проверяет знак числа и преобразует в десятичное число.
- Возвращает результат
AdditionalToDec
.
- Принимает строку в дополнительном коде
- Функция
DecToAdditional
:- Принимает целое число
x
и возвращает строку в дополнительном кодеTBinNumb
. - Инициализирует переменные
Result
иflag
. - Проверяет знак числа и преобразует в дополнительный код.
- Возвращает результат
DecToAdditional
.
- Принимает целое число
- Основная часть программы:
- Вводятся две строки в двоичном формате
x
иy
. - Выполняются операции сложения и вычитания чисел в дополнительном коде.
- Результаты выводятся на экран.
- Вводятся две строки в двоичном формате
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д