Арифметические основы построения ЭВМ

Курсовой проект - Компьютеры, программирование

Другие курсовые по предмету Компьютеры, программирование

если нет, то результат не меняют.

При суммировании двух чисел берется по одной цифре (тэтраде) из каждого числа , складываются и проверяют, они больше 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.