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

Извлечения квадратного корня с востановлением остатка в прямом коде

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

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

Пример работы программы: Извлечения квадратного корня с востановлением остатка

  1. При запуске программы появляется следующее окно:

  1. Вводим например, 0110101:

  1. Нажимаем Enter, получаем результат:

Ответ

Список используемой литературы

  1. Операции двоичной и десятичной арифметики в ЭВМ: Метод. указания / Сост. Пальянов И.А.; Омск: ОмПИ, 1990. - 36 с.

  2. Моделирование на ЭВМ алгоритмов выполнения арифметических операций и синтез управляющих автоматов: Метод. указания / Сост. Пальянов И.А., Шафеева О.П.; Омск: ОмПИ, 1988. - 36 с.

  3. Б.Н. Иванов Дискретная математика. Алгоритмы и программы: Учеб. пособие. – М.: Лаборатория Базовых Знаний, 2002 – 288 с.: ил.

13

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