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