Студопедия

Главная страница Случайная страница

КАТЕГОРИИ:

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника






Текст тестовой программы






 

Деление без восстановления остатка

uses crt;

const n: byte=4; {точность вычислений}

var A, B, _B, T, k: integer; {A, B-содержат прямой код, _B -В в дополнительном коде}

i, j: byte;

C, p, r: real; {результат}

z_a, z_b: boolean; {знак чисел А и В}

p_b, p_a, m: byte;

a_h, b_h, c_h: shortint;

a_l, b_l, c_l: word;

procedure shr_ab(var a: shortint; var b: word);

begin {линейный сдвиг вправо двоичной записи}

for i: =1 to 15 do {shr b}

if (((1 shl i) and b)< > 0) and (((1 shl (i-1)) and b)=0)

then b: =b+(1 shl (i-1)) else

if (((1 shl i) and b)=0) and (((1 shl (i-1)) and b)< > 0)

then b: =b-(1 shl (i-1));

if ((1 shl 15) and b)< > 0 then b: =b-(1 shl 15);

if odd(a) then b: =b+trunc(exp(15*ln(2)));

for i: =1 to 6 do {sar a}

if (((1 shl i) and a)< > 0) and (((1 shl (i-1)) and a)=0)

then a: =a+(1 shl (i-1)) else

if (((1 shl i) and a)=0) and (((1 shl (i-1)) and a)< > 0)

then a: =a-(1 shl (i-1));

if ((1 shl 6) and a)< > 0 then a: =a-(1 shl 6);

end;

procedure Write_ab(a: shortint; b: word);

begin {вывод на экран двоичной записи}

for i: =7 downto 0 do

{ write(ord(((1 shl i) and a)< > 0): 2);

write('.'); }

for i: =15 downto 0 do

write(ord(((1 shl i) and b)< > 0): 2);

Writeln(' ');

end;

 

procedure add(var a: integer; _b: integer); {сложение}

var t: integer;

p: word;

i: byte;

begin

p: =0;

T: =0;

for i: = 0 to 15 do {slogenie}

case ord(((1 shl i) and A)< > 0)+ord(((1 shl i) and _B)< > 0)+

ord(((1 shl i) and p)< > 0) of

1: T: =T or trunc(exp(i*ln(2)));

2: p: =p or trunc(exp((i+1)*ln(2)));

3: begin

T: =T or trunc(exp(i*ln(2)));

p: =p or trunc(exp((i+1)*ln(2)));

end;

end;

A: =T;

end;

 

begin

clrscr;

writeln('BEZ VOSSTANOVLENIA OSTATKA');

writeln;

Write('A= ');

Readln(T);

write('bin: ', ' ': 3);

for k: =15 downto 0 do

write(ord(((1 shl k) and t) < > 0): 2);

writeln(' ');

 

if T< 0 then z_a: =true; {знак}

 

T: =abs(T);

for i: =15 downto 0 do {представление в прямом коде}

if ord((1 shl i) and T)< > 0 then A: =A + trunc(exp(i*ln(2)));

 

Write(#10#13, 'B= ');

Readln(T);

write('bin: ', ' ': 3);

for k: =15 downto 0 do

write(ord(((1 shl k) and t) < > 0): 2);

writeln(' ');

 

 

if T< 0 then z_b: =true; {знак}

T: =abs(T);

for i: =15 downto 0 do {представление в прямом коде}

if ord((1 shl i) and T)< > 0 then B: =B + trunc(exp(i*ln(2)));

 

_B: =B;

if B> 0 then _B: =_B + trunc(exp(15*ln(2))); {знак _B}

for i: =14 downto 0 do {инвертировать _B}

if ((1 shl i)and _B)=0 then

_B: =_B + (1 shl i) else _B: =_B - (1 shl i);

{перевод в дополнительный код}

inc(_B);

{вычисление целой части результата}

While A> =0 do begin

Add(A, _B);

if A> =0 then c: =c+1;

end;

{деление без восстановления остатка}

for i: =1 to N do begin

 

for j: =14 downto 0 do {shl A}

if (((1 shl j) and A)< > 0) and (((1 shl (j+1)) and A)=0)

then A: =A+(1 shl (j+1)) else

if (((1 shl j) and A)=0) and (((1 shl (j+1)) and A)< > 0)

then A: =A-(1 shl (j+1));

if odd(A) then dec(A);

 

if A > 0 then ADD(A, _B) else ADD(A, B);

 

if A > 0 then C: =C + exp((-i)*ln(2)); {Ci=1}

 

end;

 

if z_a xor z_b then c: =-c; {знак результата}

Writeln(#10#13, 'C= ', c: N+3: N);

 

r: =C;

a_h: =abs(trunc(r));

if r< 0 then a_h: =a_h + trunc(exp(7*ln(2)));

r: =frac(r);

i: =15;

while (r< > 0) and (i< > 0) do

begin

r: =r*2;

if trunc(r) < > 0 then a_l: =a_l + trunc(exp(i*ln(2)));

dec(i);

r: =frac(r);

end;

 

for i: =6 downto 0 do {нахождение порядка числа a}

if ord((1 shl i) and a_h)< > 0 then begin p_a: =i+1; break; end;

{перевод в формат с плавающей точкой}

m: =p_a;

while m< > 0 do begin shr_ab(a_h, a_l); dec(m); end;

a_h: =a_h+p_a;

Write_ab(a_h, a_l);

readln;

end.

 

Деление с восстановленем остатка

 

uses crt;

const n: byte=4; {точность вычислений}

var A, B, _B, T, k: integer; {A, B-содержат прямой код, _B -В в дополнительном коде}

p_b, p_a, m: byte;

i, j: byte; {параметры цикла}

C, P, r: real; {результат}

z_a, z_b: boolean; {знак чисел А и В}

a_l, b_l, c_l: word; {? _l мантисса двоичной записи}

a_h, b_h, c_h: shortint;

procedure shr_ab(var a: shortint; var b: word);

begin {линейный сдвиг вправо двоичной записи}

for i: =1 to 15 do {shr b}

if (((1 shl i) and b)< > 0) and (((1 shl (i-1)) and b)=0)

then b: =b+(1 shl (i-1)) else

if (((1 shl i) and b)=0) and (((1 shl (i-1)) and b)< > 0)

then b: =b-(1 shl (i-1));

if ((1 shl 15) and b)< > 0 then b: =b-(1 shl 15);

if odd(a) then b: =b+trunc(exp(15*ln(2)));

for i: =1 to 6 do {sar a}

if (((1 shl i) and a)< > 0) and (((1 shl (i-1)) and a)=0)

then a: =a+(1 shl (i-1)) else

if (((1 shl i) and a)=0) and (((1 shl (i-1)) and a)< > 0)

then a: =a-(1 shl (i-1));

if ((1 shl 6) and a)< > 0 then a: =a-(1 shl 6);

end;

procedure Write_ab(a: shortint; b: word);

begin {вывод на экран двоичной записи}

for i: =7 downto 0 do

{ write(ord(((1 shl i) and a)< > 0): 2);

write('.'); }

for i: =15 downto 0 do

write(ord(((1 shl i) and b)< > 0): 2);

Writeln(' ');

end;

 

procedure add(var a: integer; _b: integer); {сложение}

var t: integer;

p: word;

i: byte;

begin

p: =0;

T: =0;

for i: = 0 to 15 do {slogenie}

case ord(((1 shl i) and A)< > 0)+ord(((1 shl i) and _B)< > 0)+

ord(((1 shl i) and p)< > 0) of

1: T: =T or trunc(exp(i*ln(2)));

2: p: =p or trunc(exp((i+1)*ln(2)));

3: begin

T: =T or trunc(exp(i*ln(2)));

p: =p or trunc(exp((i+1)*ln(2)));

end;

end;

A: =T;

end;

 

begin

clrscr;

Writeln('DELENIE S VOSSTANOVLENIEM OSTATKA ');

Writeln;

Write('A= ');

Readln(T);

 

write('bin: ', ' ': 3);

for k: =15 downto 0 do

write(ord(((1 shl k) and t) < > 0): 2);

writeln(' ');

 

if T< 0 then z_a: =true; {знак}

 

T: =abs(T);

for i: =15 downto 0 do {представление в прямом коде}

if ord((1 shl i) and T)< > 0 then A: =A + trunc(exp(i*ln(2)));

 

Write(#10#13, 'B= ');

Readln(T);

 

write('bin: ', ' ': 3);

for k: =15 downto 0 do

write(ord(((1 shl k) and t) < > 0): 2);

writeln(' ');

 

if T< 0 then z_b: =true; {знак}

T: =abs(T);

for i: =15 downto 0 do{представление в прямом коде}

if ord((1 shl i) and T)< > 0 then B: =B + trunc(exp(i*ln(2)));

 

_B: =B;

if B> 0 then _B: =_B + trunc(exp(15*ln(2))); {знак _B}

for i: =14 downto 0 do {инвертировать _B}

if ((1 shl i)and _B)=0 then

_B: =_B + (1 shl i) else _B: =_B - (1 shl i);

{перевод в дополнительный код}

inc(_B);

{вычисление целой части результата}

While A> =0 do begin

Add(A, _B);

if A> =0 then c: =c+1;

end;

{деление с восстановлением остатка}

Add(A, B);

for i: =1 to N do begin

 

for j: =14 downto 0 do {shl A}

if (((1 shl j) and A)< > 0) and (((1 shl (j+1)) and A)=0)

then A: =A+(1 shl (j+1)) else

if (((1 shl j) and A)=0) and (((1 shl (j+1)) and A)< > 0)

then A: =A-(1 shl (j+1));

if odd(A) then dec(A);

 

ADD(A, _B); {А-В}

 

if A > = 0 then C: =C + exp((-i)*ln(2)) {Сi=1}

else ADD(A, B); {А+В}

end;

 

if z_a xor z_b then c: =-c; {знак результата}

 

Writeln(#10#13, 'C= ', c: N+4: N);

 

r: =C;

a_h: =abs(trunc(r));

if r< 0 then a_h: =a_h + trunc(exp(7*ln(2)));

r: =frac(r);

i: =15;

while (r< > 0) and (i< > 0) do

begin

r: =r*2;

if trunc(r) < > 0 then a_l: =a_l + trunc(exp(i*ln(2)));

dec(i);

r: =frac(r);

end;

 

for i: =6 downto 0 do {нахождение порядка числа a}

if ord((1 shl i) and a_h)< > 0 then begin p_a: =i+1; break; end;

{перевод в формат с плавающей точкой}

m: =p_a;

while m< > 0 do begin shr_ab(a_h, a_l); dec(m); end;

a_h: =a_h+p_a;

Write_ab(a_h, a_l);

readln;

end.

 

Содержание отчета

4.1. Название и цель выполнения лабораторной работы.

4.2. Результаты, полученные вручную и путем запуска демонстрационной программы.

4.3. Выводы.

 


Поделиться с друзьями:

mylektsii.su - Мои Лекции - 2015-2024 год. (0.02 сек.)Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав Пожаловаться на материал