Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Курсовик CooleRа.doc
Скачиваний:
7
Добавлен:
15.06.2014
Размер:
125.95 Кб
Скачать

3.4 Структура операционного устройства.

Схема основного операционного устройства

118“Вывод”

RG1

1

1 18

”A”

+RG2

-RG2

1 18

”B”

RG2

Ввод исходных чисел А и В происходит соответственно в SUM и RG2, а в RG1 после 18 сдвигов получается частное. Операционное устройство оснащено счетчиком сдвига сумматора, и после выполнения 18-ого сдвига, выполняются два оставшихся такта и подается сигнал “вывод” к RG1. Два регистра и сумматор оснащены, так же, знаковыми разрядами. В которые заносятся знаки делимого и делителя, а знак частного заносится автоматически.

Схема операционного устройства суммирования порядков

«Вывод»

RG1

“PB”

“-RG2”

“PA”

RG2

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

рrogram kurs;

uses crt;

type mass=array [1..18] of boolean;

intmass=array [1..18] of byte;

var r1, r2, r3, p1, p2, dp, sum, sump, ss: mass;

rez, sump1: intmass;

i, j, z: byte;

procedure vvod(kl: byte; var a: mass); {процедура ввода исходных данных}

var i: byte;

ac: intmass;

begin

for i:=1 to kl do

begin

read(ac[i]);

if i=2 then write(',');

if (ac[i]<>0) and (ac[i]<>1) then

begin

textcolor(4);

writeln('Ошибка');

exit;

readkey;

end;

if ac[i]=1 then a[i]:=true else a[i]:=false;

end;

end;

procedure summa(var a, b: mass; var c: mass); {процедура суммирования}

var n: boolean;

i: integer;

begin

n:=false;

for i:=18 downto 1 do

begin

c[i]:=a[i] xor b[i] xor n;

if (a[i]=true) and (b[i]=true) then n:=true;

if (a[i]=false) and (b[i]=false) then n:=false;

end;

end;

procedure zdvig(var d: mass; var dz: mass); {процедура сдвига}

var i: integer;

begin

for i:=1 to 18 do

begin

dz[i]:=d[i+1];

end;

end;

procedure inv(var d: mass; kl: byte; var dinv: mass); {процедура инвентирования}

var di, dc: mass;

i: integer;

begin

d[1]:=false;

dc[kl]:=true;

for i:=1 to kl do

begin

di[i]:=d[i] xor true;

end;

summa(di,dc,dinv);

end;

begin

clrscr;

writeln('Введите делимое');

vvod(18,r1);

writeln('Порядок делимого');

vvod(8,p1);

writeln('Введите делитель');

vvod(18,r2);

textcolor(15);

writeln('Порядок делителя');

vvod(8,p2);

if (r1[1]=true) or (r2[1]=true) then z:=1 else z:=0;

inv(r2,18,r3);

for j:=1 to 6 do

begin

zdvig(r1,r1);

if r1[1]=false then summa(r1, r3, sum)

else summa(r1, r2, sum);

for i:=1 to 8 do r1[i]:=sum[i];

ss[j]:=sum[1] xor true;

end;

inv(p2,8,p2);

for i:=1 to 5 do

begin

summa(p1,p2,sump);

end;

dp[8]:=true;

inv(r1,18,r1);

if z=1 then summa(ss,r1,ss);

repeat

if ss[3]=false then

begin

zdvig(ss,ss); {нормализация частного}

summa(sump,dp,sump);

end

else

until ss[3]=true;

writeln('* Результат *');

for i:=1 to 18 do

begin

if ss[i]=true then rez[i]:=1 else rez[i]:=0;

write(rez[i]:2);

end;

writeln('Порядок частного');

for i:=1 to 8 do

begin

if sump[i]=true then sump1[i]:=1 else sump1[i]:=0;

if i=3 then write(',');

write(sump1[i]:2);

end;

readkey;

end.

Соседние файлы в предмете Дискретная математика