Арифметические основы построения ЭВМ
Курсовой проект - Компьютеры, программирование
Другие курсовые по предмету Компьютеры, программирование
если нет, то результат не меняют.
При суммировании двух чисел берется по одной цифре (тэтраде) из каждого числа , складываются и проверяют, они больше 9 или нет. Если больше, то от результата сложения отнимается 10-ка и переносу присваивают значение равное единице. В противном случае с результат не меняют.
Все повторяется столько раз, какова максимальная длина входной строки.
Перевод в дополнительный код проводиться следующим образом: сначала к каждой цифре прибавляется 6-ка, далее всё число инвертируется и к нему прибавляется еденица
Обратный перевод(из дополнительного в прямой) инвертируется число и из каждого вычитается 6-ка, затем прибавляется еденица
программа код чило сумматор эвм
Рис. 3 ГСА арифметической операции Рис. 4 ГСА п\п суммы чисел
Рис. 7 ГСА Вывода двоиного Рис. 8 ГСА п\п перевода в
представления числа дополнительный код
Результат работы алгоритма
Рис. 11 Сложение.
Рис.12 Вывод помощи.
Приложение:
unit Adding;
interface
cod: array[1..11] of string =(0000,0001,0010,0011,0100,0101,0110,0111,1000,1001,errr);
n=9;
pack=array [1..10] of byte;
vvod,vivod:string[20];
A,B,C:pack;
i,j,k:byte;
symb:boolean;
long,bola,bolb:boolean;Auto;Step;crt;box(f:byte ;str:string; var X:pack);
z,q:byte;
j:=0;
symb:=false;
q:=length(str);
for i:=20 downto f-q do
begin
j:=ord(str[q])-48;
dec(q);
k:=round(i/2);
z:=4*(i mod 2);
X[k]:=X[k]+ j shl z;
end;;obnul(var x:pack);q:byte;
for q:=1 to 10 do
x[q]:=0;;vivd (x:pack);
for j:=1 to 10 do
write(X[j],|);
writeln;;Boxing(var X:pack);
obnul(x);
readln(vvod);
box(21,vvod,X);
vivd(x);;perevod(var x:pack);
obnul(x);
readln(vvod);
if length(vvod)<=19 then
if vvod[1]=- then
begin
x[1]:= 8 shl 4;
box(22,vvod,x);
end
else
begin
if length(vvod)<19 then
begin
box(21,vvod,x);
end
else
long:=true
end
else
long:=true;;gettetr(X:pack; p:byte): byte;
z,r:byte;
z:=round(p/2);
r:=X[z] shr 4;
if p mod 2 = 0 then
gettetr:=x[z] - r shl 4
else gettetr:=r;;vivdcode(X:pack);q,e:byte ;
for q:=1 to 20 do
begin
e:=gettetr(x,q);
if e<=9 then
write(cod[e+1])
else write(cod[11]);
end;
writeln;;tetrsum(x,y:pack;var z:byte; p :byte ;v:byte);e,r:byte;
e:=0;
r:=0;
e:=gettetr(x,p);
r:=gettetr(y,p);
z:=e+r+v;;sum(x,y: pack ; var d:pack);
q,e,g,k,z,cj,h:byte;
obnul(d);
cj:=0;
for q:=20 downto 3 do
begin
tetrsum(x,y,e,q,cj);
cj:=0;
k:=round(q/2);
h:=q mod 2;
if e>9 then
begin
e:=e-10;
cj:=1 ;
end;
z:=4*h;
d[k]:=d[k]+ e shl z;
end;;bolshe (x,y:pack; var bool1,bool2:boolean);i:word;
bool1:=false;
bool2:=false;
i:=2;
repeat
if x[i]>y[i] then bool1:=true
else bool2:=true;
inc(i);
until (i>10) or (bool1=true) or (bool2=true);;deBox(X:pack);q,z:byte;
vh:string[20];
vh:=00000000000000000000;
for q:=20 downto 3 do
begin
z:=gettetr(x,q);
vh[q]:=char(z+48);
end;
write(vh);;addnum(var x:pack;num:byte);q,i,e,r,z,k,cj:byte;
d:pack;
cj:=0;
d:=x;
obnul(x);
for q:=20 downto 3 do
begin
e:=gettetr(d,q);
e:=e+num+cj;
num:=0;
cj:=0;
k:=round(q/2);
i:=q mod 2;
if e>9 then
begin
e:=e-10;
cj:=1 ;
end;
z:=4*i;
x[k]:=x[k]+ e shl z;
end;;dop(var x:pack);q:byte;
for q:=2 to 10 do
begin
x[q]:= x[q] + $66;
x[q]:= not x[q];
end;
x[q]:= x[q] + 1;;undop(var x:pack);q:byte;
for q:=2 to 10 do
begin
x[q]:=not x[q];
x[q]:=x[q] - $66;
end;
addnum(x,1);;Auto;
writeln(Insert A);
perevod(a) ;
vivdcode(a);
if (long=false) and (symb=false) then
begin
writeln(Insert B);
perevod(b);
vivdcode(b);
if (long=false) and (symb=false) then
begin
If a[1]=b[1] then
begin
Sum(A,B,C);
writeln(C=A+B);
writeln(C in BCD);
vivdcode(c);
debox(c);
writeln;
end
else
begin
if a[1]<> 0 then
begin
dop(a);
writeln(A in dop);
vivdcode(a);
end
else
begin
dop(b);
writeln(B in dop);
vivdcode(b);
end;
sum(A,B,C);
writeln(C=A+B);
writeln(C in BCD);
bolshe(a,b,bola,bolb);
if c[2]<>0 then
undop(c);
vivdcode(c);
debox(c);
end;
end;
end;;min(X:pack);q,e:byte ;
for q:=3 to 20 do
begin
e:=gettetr(x,q);
if e<=9 then
write(cod[e+1])
else write(cod[11]);
end;
writeln;;show;
writeln(C=A+B);
min(A);
writeln(+);
min(B);
writeln(___);;Step;u:byte; ch:char;
u:=0;
writeln(Press "n" to chouse next position );
repeat
ch:=readkey;
if ch = n then inc(u);
case u of
1:begin
writeln(Insert A);
perevod(a) ;
if (long=false) and (symb=false) then
begin
writeln(Insert B);
perevod(b);
writeln(A in BCD);
vivdcode(a);
writeln(B in BCD);
vivdcode(b);
end;
end;
2:begin
if (long=false) and (symb=false) then
begin
if a[1]=b[1] then
begin
show;
Sum(A,B,C);
min(c);
writeln(^M^J,C in BCD);
vivdcode(c);
debox(c);
writeln;
end
else
begin
if a[1]<> 0 then
begin
dop(a);
writeln(A in dop);
vivdcode(a);
end
else
begin
dop(b);
writeln(B in dop);
vivdcode(b);
end;
sum(A,B,C);
writeln(C=A+B);
writeln(C in BCD);
if c[2]<>0 then
undop(c);
vivdcode(c);
debox(c);
end;
end;
end;
end;
until (u=2);;.
Модуль Maincrt,Adding,Winw;
f:byte;
glavwin;
repeat
CH:=readkey;
case ch of
char(19):begin clrscr; Step; end;
char(1): begin clrscr; Auto; end;
char(27): ggg:= True;
char(8): help;
else Beep;
end;
until ggg=true;
end.