- •Омск 2003 Содержание
- •Аннотация
- •Сложение и вычитание чисел
- •Кодирование чисел в эвм
- •Задание
- •Основная часть
- •Введение
- •Метод решения задачи
- •3.3 Структурная схема алгоритма
- •3.4 Структура операционного устройства.
- •118“Вывод”
- •3.5 Текст программы
- •3.6 Руководство пользователя.
- •3.7 Тестирование
- •4. Список использованной литературы
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.