Консультация № 160226
11.02.2009, 19:46
0.00 руб.
0 4 1
Здравствуйте, необходимо написать программу для алгебраического сложения целых положительных и отрицательных чисел в обратном коде.

Обсуждение

Неизвестный
11.02.2009, 21:51
общий
Числа рассматривать как строки, видимо?
Неизвестный
11.02.2009, 22:08
общий
Да, в виде строк
давно
Старший Модератор
31795
6196
12.02.2009, 15:14
общий
это ответ
Здравствуйте, Пилин Денис Александрович!

Переделал свою программу из вопроса № 160065.
Числа вводятся в прямом коде, число В переводится в обратный код и после этого складываются, т.е. получается А:=А-В.
Вопросы задавайте в минифорум.
Удачи!

Приложение:
uses crt;
const
n=32;
type
TMass=string[n];
var a,b:TMass;
procedure inputBin(var d:TMass;e:char);
begin{inputBin}
{вводим число в обратном порядке}
write('Enter number',e:2,':');
d:='';
repeat
e:=ReadKey;{символ без эхо}
if (e='0')or(e='1')then{ноль или единица}
begin{begin if}
write(e);{выводим его}
d:=e+d;{и добавляем в строку}
end;{end if}
until (e=chr(13))or(length(d)=(n-1));{оставляем один бит для знака}
writeln;
end;{inputBin}
procedure outputBin(d:TMass);
var
i:integer;
begin{outputBin}
{выводим результат}
write('Result :');
{в обратном порядке}
for i:=length(d)downto 1 do
write(d[i]);
writeln;
end;{outputBin}
procedure doSummaBin(var d,e:Tmass);
var
f:char;
i:integer;
begin{doSummaBin}
f:='0';{флаг переноса с младшего разряда}
for i:=1 to length(d) do
begin{for}
if (e[i]<>d[i])then
{обрабатываем ситуацию когда биты различны}
begin{ed=10,01}
if f='1'
then d[i]:='0' {edf=101,011}
else d[i]:='1';{edf=100,010}
end{10,01}
else
{обрабатываем ситуацию когда биты одинаковы}
begin{ed=00,11}
{edf=001,000,111,110}
d[i]:=f;
f:=e[i];
end;{00,11}
end;{for}
end;{doSummaBin}
procedure rangeBin(var d:Tmass);
begin{rangeBin}
while length(d)<n do
d:=d+'0';
end;{rangeBin}
procedure convertBin(var d:TMass);
var
i:integer;
begin{convertBin}
for i:=1 to length(d)do
{инвертируем биты}
case d[i]of{case}
'0':d[i]:='1';
'1':d[i]:='0';
end;{case}
end;{convertBin}
begin{main}
{вводим числа}
inputBin(a,'A');
inputBin(b,'B');
{выравниваем к одному размеру}
rangeBin(a);
rangeBin(b);
{переводим в обратный код}
convertBin(b);
{суммируем А + Вд}
doSummaBin(a,b);
{выводим результат}
outputBin(a);
ReadKey;
end.{main}
Об авторе:
Мне безразлично, что Вы думаете о обо мне, но я рад за Вас - Вы начали думать.

давно
Старший Модератор
31795
6196
12.02.2009, 15:18
общий
Пилин Денис Александрович:
Дополню свой ответ:
Наиболее важные свойства обратного кода чисел:
• сложение положительного числа С с его отрицательным значением в обратном коде дает так называемую машинную единицу МЕок= 1: 111... 11, состоящую из единиц в знаковом и значащих разрядах числа;
• нуль в обратном коде имеет двоякое значение. Он может быть положительным - 0: 00...0 и отрицательным числом - 1; 11... 11. Значение отрицательного нуля совпадает с МЕок. Двойственное представление нуля явилось причиной того, что в современных ЭВМ все числа представляются не обратным, а дополнительным кодом.
Об авторе:
Мне безразлично, что Вы думаете о обо мне, но я рад за Вас - Вы начали думать.

Форма ответа