Извлечения квадратного корня с востановлением остатка в прямом коде
Текст программы:
Program discret;
Uses crt;
Type
mass=array[1..16] of integer;
massstr=array[1..16] of string;
Var
k,i,i2,errcod,cikl,cikl2:integer;
sum,r2,dopm,r1,memosum:mass;
ch:string;
sumstr:massstr;
Procedure sloj(var s:mass;var b:mass);
Var
p,raz:integer;
Begin
p:=0;
for i:=16 downto 1 do begin
raz:=s[i]+b[i]+p;
If raz=0 then begin
s[i]:=0;
p:=0;
End;
if raz=1 then begin
s[i]:=1;
p:=0;
End;
If raz=2 then begin
s[i]:=0;
p:=1;
End;
if raz=3 then begin
s[i]:=1;
p:=1;
End;
End;
End;
Procedure sdvig(var sd:mass);
Begin
for i:=1 to 15 do
sd[i]:=sd[i+1];
sd[16]:=0;
for i:=1 to 15 do
End;
Procedure invert(var si:mass);
Begin
For i:=1 to 16 do
if si[i]=1 then si[i]:=0 else si[i]:=1;
End;
Procedure obnul(var obn:mass);
Begin
for i:=1 to 16 do
obn[i]:=0;
End;
Procedure vivod(viv:mass);
Begin
for i:=1 to 16 do
write(viv[i]);
writeln;
End;
Begin {vvod summatora}
Writeln('Vvedite podkorennoe viragenie');
readln(ch);
for k:=1 to 16 do begin
sumstr[k]:=copy(ch,k,1);
val(sumstr[k],sum[k],errcod);
End; {vvod R2 i formirovanie dop. massiva i R1}
for i:=1 to 16 do begin
r2[i]:=0;
dopm[i]:=0;
r1[i]:=0;
memosum[i]:=0;
End;
r2[3]:=1;
dopm[7]:=1; {pervii etap}
invert(r2);
sloj(r2,dopm);
Writeln;
write('sum ');
vivod(sum);
write('R2 ');
vivod(r2);
Writeln(' -------');
sloj(sum,r2);
write('sum ');
vivod(sum);
if sum[1]=1 then r1[2]:=0 else r1[2]:=1;
writeln;
write('R1 ');
vivod(r1);
writeln;
for cikl:=2 to 15 do begin
sdvig(sum);
obnul(r2);
i2:=1;
for cikl2:=3 to cikl do begin
r2[cikl-i2]:=r1[cikl-i2];
i2:=i2+1;
End;
r2[cikl]:=r1[cikl];
r2[cikl+1]:=0;
if cikl+2<>16 then r2[cikl+2]:=1;
write('sum ');
vivod(sum);
invert(r2);
sloj(r2,dopm);
write('R2 ');
vivod(r2);
for i:=1 to 7 do
memosum[i]:=sum[i];
sloj(sum,r2);
write(' -------');
writeln;
write('sum ');
vivod(sum);
writeln;
if sum[1]=1 then r1[cikl+1]:=0 else r1[cikl+1]:=1;
write('R1 ');
vivod(r1);
writeln;
if sum[1]=1 then begin
for i:=1 to 7 do
sum[i]:=memosum[i];
writeln('Vosstanovlenie');
End;
readkey;
End;
End.
Приложение 1.1
Пример работы программы: Извлечения квадратного корня с востановлением остатка
При запуске программы появляется следующее окно:
Вводим например, 0110101:
Нажимаем Enter, получаем результат:
Ответ
Список используемой литературы
Операции двоичной и десятичной арифметики в ЭВМ: Метод. указания / Сост. Пальянов И.А.; Омск: ОмПИ, 1990. - 36 с.
Моделирование на ЭВМ алгоритмов выполнения арифметических операций и синтез управляющих автоматов: Метод. указания / Сост. Пальянов И.А., Шафеева О.П.; Омск: ОмПИ, 1988. - 36 с.
Б.Н. Иванов Дискретная математика. Алгоритмы и программы: Учеб. пособие. – М.: Лаборатория Базовых Знаний, 2002 – 288 с.: ил.