Главная Случайная страница Контакты | Мы поможем в написании вашей работы! | ||
|
3.5.1. Спочатку треба вручну отримати результати для свого індивідуального завдання і заповнити всі позиції в таблицях 2 і 3, як указано в п.3.3.2 для варіанта 30 із таблиці 3.1.
3.5.2. Перевірити правильність заповнення всіх клітинок у таблицях 3.2 і 3.3 за допомогою демонстраційної програми, текст якої розміщений нижче.
3.5.3. Демонстраційну програму треба запустити на виконання в одному з середовищ, яке підтримує програмування на мові Pascal.
3.5.4. Текст демонстраційної програми.
program summirovan;
uses crt;
var
a,b:integer; {Введенные числа}
{Те же числа, но в кодах}
a_pr,b_pr:word;
a_ok,b_ok:word;
a_dk,b_dk:word;
d:char;
function plusdk(a,b:word):word; { Сложение в дополнительном коде }
var
trans:word; { Бит переноса }
digit:word; { Текущий бит }
result:word; { Для хранения промежуточного результата }
{при вычислении бита переноса }
c:word; { Сумма }
i:byte; { Счетчи к}
begin
trans:=0;
for i:=0 to 7 do begin
digit:=(a and (1 shl i)) xor (b and (1 shl i)) xor (trans shl i);
if digit=0 then c:=c and (255 xor (1 shl i))
else c:=c or (1 shl i);
result:=(a and (1 shl i))and(b and(1 shl i));
result:=result or ((b and(1 shl i))and(trans shl i));
result:=result or ((a and (1 shl i))and(trans shl i));
if result<>0 then trans:=1 else trans:=0;
end;
plusdk:=c; { Возвращение результата }
end;
function plusok(a,b:word):word; { Сложение в обратном коде }
var
trans,digit,result:word;
c:word;
i:byte;
begin
trans:=0;
for i:=0 to 7 do begin
digit:=(a and (1 shl i)) xor (b and (1 shl i)) xor (trans shl i);
if digit=0 then c:=c and (255 xor (1 shl i))
else c:=c or (1 shl i);
result:=(a and (1 shl i)) and (b and (1 shl i));
result:=result or ((b and (1 shl i))and(trans shl i));
result:=result or ((a and (1 shl i))and(trans shl i));
if result<>0 then trans:=1 else trans:=0;
end;
if trans=1 then c:=plusok(c,1); { Перенос из знакового разряда }
{прибавляется к младшему разряду}
plusok:=c;
end;
function bdtos(a:word):string; { Преобразование битов числа в строку }
var
i:byte;
s:string;
begin
s:='';
for i:=7 downto 0 do
s:=s+chr(ord(((1 shl i) and a)<>0)+48);
bdtos:=s;
end;
function prtoi(a:word):integer; { Преобразование из прямого кода в integer }
begin
if a<127 then prtoi:=a
else prtoi:=-(a and 127);
end;
function itopr(a:integer):word; {Преобразование из integer в прямой код }
begin
if a>=0 then itopr:=a
else itopr:=abs(a) or (1 shl 7);
end;
function prok(a:word):word;{ Преобразование из прямого кода в обратный }
{и наоборот}
begin
if a<127 then prok:=a
else prok:=(not a) or (1 shl 7);
end;
function prdk(a:word):word; { Преобразование из прямого кода в дополнительный }
{и наоборот}
begin
if a<127 then prdk:=a
else prdk:=plusdk((not a) or (1 shl 7),1);
end;
begin
while true do
begin
clrscr;
write( 'Введите A и B через пробел: ');
readln(a,b);
a_pr:=itopr(a);
b_pr:=itopr(b);
a_ok:=prok(a_pr);
b_ok:=prok(b_pr);
a_dk:=prdk(a_pr);
b_dk:=prdk(b_pr);
writeln(' [A]пк = ',bdtos(a_pr));
writeln(' [B]пк = ',bdtos(b_pr));
writeln(' [A]ок = ',bdtos(a_ok));
writeln(' [B]ок = ',bdtos(b_ok));
writeln(' [A]дк = ',bdtos(a_dk));
writeln(' [B]дк = ',bdtos(b_dk));
writeln( 'Результат в обратном коде: ');
writeln(' [A]oк+[B]oк = ',bdtos(plusok(a_ok,b_ok)));
writeln( 'Результат в дополнительном коде :');
writeln(' [A]дк+[B]дк = ',bdtos(plusdk(a_dk,b_dk)));
write( 'Результат в прямом коде :');
writeln(bdtos(prdk(plusdk(a_dk,b_dk))));
writeln( 'Результат в 10-м коде:' );
writeln(' [A]дес+[B]дес = ',prtoi(prdk(plusdk(a_dk,b_dk))));
gotoxy(30,25);
textcolor(15);
writeln( 'Нажмите: Enter - чтобы продолжить и ');
write( ' 1 - чтобы выйти' );
d:=readkey;
if (d='1') then halt;
end;
end.
Дата публикования: 2014-12-10; Прочитано: 204 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!