Добавил:
Kurume
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:ОНИ / Гуменюк А.С / Цифровое моделирование систем передачи данных / GAS / GAS / doc_1 / GNK4
.TXT/*
ЉЋЊЏ‹…Љ‘ “—…ЃЌЋ-‹ЂЃЋђЂ’ЋђЌ›• ЏЋ„ЏђЋѓђЂЊЊ
„‹џ –€”ђЋ‚ЋѓЋ ЊЋ„…‹€ђЋ‚ЂЌ€џ
‘€‘’…Њ› ЏЋЊ…•Ћ“‘’Ћ‰—€‚ЋѓЋ ЉЋ„€ђЋ‚ЂЌ€џ
( „ЋЏЋ‹H…H€… Љ ЉЋЊЏ‹…Љ‘“)
‘ Ћ „ … ђ † Ђ Ќ € …
-------------------
1. ЋЎйЁҐ ᢥ¤ҐЁп
2. ”гЄжЁ® «м®Ґ § 票Ґ Ї ЄҐв
3. ЋЇЁб ЁҐ ЇаЁ¬ҐҐЁп Ї ЄҐв
4. ‘ЇЁб®Є Ї®¤Їа®Ја ¬¬
PROCEDURE MTAB4
PROCEDURE OPD4
PROCEDURE ISP4
1. ЋЎйЁҐ ᢥ¤ҐЁп.
‚ ¤ ®¬ ⥪б⥠ЇаЁў®¤Ёвбп ®ЇЁб ЁҐ Ї ЄҐв ¤®Ї®«ҐЁп Є Є®¬Ї«ҐЄбг г祡®
« Ў®а в®але Ї®¤Їа®Ја ¬¬ "–Ёда®ў®Ґ ¬®¤Ґ«Ёа®ў ЁҐ бЁбвҐ¬л Ї®¬Ґе®гбв®©зЁў®Ј®
Є®¤Ёа®ў Ёп". Џ ЄҐв ¤®Ї®«ҐЁҐ б®бв®Ёв Ё§ Ў®а Ё§ Ї®¤Їа®Ја ¬¬, ЇЁб ле
«Ј®аЁв¬ЁзҐбЄ®¬ п§лЄҐ "Turbo Pascal 7. 0" Ё Ї®¬ҐйҐле ў ¬®¤г«Ґ GNK4.TPU.
2. ”гЄжЁ® «м®Ґ § 票Ґ Ї ЄҐв .
Џ ЄҐв Ї®¤Їа®Ја ¬¬ ЇаҐ¤ § зҐ ¤«п :
- Ї®бв஥Ёп ®Ї®§ ў ⥫Ґ© ®¤®Єа вле ®иЁЎ®Є ¤«п Є®¤ , ЁбЇа ў«по饣® ®¤®Єа в-
лҐ, ¤ўгЄа влҐ, ваҐеЄа влҐ Ё зҐвлаҐеЄа влҐ ®иЁЎЄЁ.
- Ї®бв஥Ёп Їа ўЁ« Є®¤Ёа®ў Ёп Є®а४вЁаго饣® ЈагЇЇ®ў®Ј® Є®¤ ў ўЁ¤Ґ Є®¤Ёаг-
о饩 в Ў«Ёжл
- Є®¤Ёа®ў Ёп ®в¤Ґ«мле б®®ЎйҐЁ©, ўлзЁб«ҐЁ© ®Ї®§ ў ⥫Ґ© ¤ўге- ваҐе- Ё«Ё
зҐвлаҐеЄа в®© ®иЁЎЄЁ Ї® § ¤ л¬ ®Ї®§ ў вҐ«п¬ ®¤®Єа вле ®иЁЎ®Є, ЁбЇа ў-
«ҐЁҐ ®¤®- ¤ўге- ваҐе- Ё зҐвлаҐеЄа вле ®иЁЎ®Є Ё ¤ҐЄ®¤Ёа®ў Ёп.
3. ЋЇЁб ЁҐ ЇаЁ¬ҐҐЁп Ї ЄҐв .
„«п ЁбЇ®«м§®ў Ёп Є®¬Ї«ҐЄб ў ‚ 襩 Їа®Ја ¬¬Ґ Ґ®Ўе®¤Ё¬® б ¬л¬ ЇҐаўл¬
®ЇҐа в®а®¬ Їа®Ја ¬¬л Ї®бв ўЁвм USES gnk4. ЏаЁ н⮬ Ґ®Ўе®¤Ё¬® «ЁзЁҐ д ©«
gnk4.tpu ў ⥪г饬 Є в «®ЈҐ Ё«Ё ў Є в «®ЈҐ, гЄ § ®¬ ў ¬Ґо Options|
Directories... |Unit directories.
Џ®бв஥ЁҐ ®Ї®§ ў ⥫Ґ© ®¤®Єа вле ®иЁЎ®Є ¤«п Є®¤ , ЁбЇа ў«по饣® ®¤®-
¤ўге-, ваҐе- Ё зҐвлаҐеЄа влҐ ®иЁЎЄЁ, Їа®Ё§ў®¤Ёвбп Їа®жҐ¤га®© OPD4. Џа®жҐ¤га
MTAB4 ®бгйҐбвў«пҐв Ї®бв஥ЁҐ Їа ўЁ« Є®¤Ёа®ў Ёп Є®а४вЁаго饣® ЈагЇЇ®ў®Ј®
Є®¤ ў ўЁ¤Ґ Є®¤Ёаго饩 в Ў«Ёжл. ‚лзЁб«ҐЁҐ ®Ї®§ ў вҐ«п ®иЁЎЄЁ Ё ҐҐ ЁбЇа ў-
«ҐЁҐ (Ґб«Ё ®иЁЎЄ ЇҐаў®©, ўв®а®©, ваҐв쥩 Ё«Ё зҐвўҐав®© Єа в®бвЁ) Їа®Ё§-
ў®¤Ёвбп Їа®жҐ¤га®© ISP4.
4. ‘ЇЁб®Є Їа®жҐ¤га
PROCEDURE OPD4.
Procedure OPD4(var mas:Masarray;var MOP:Intarray;var NRS,NPR:word;Param:byte);
Ќ § 票Ґ
Џ®бв஥ЁҐ ®Ї®§ ў ⥫Ґ© ®¤®Єа вле ®иЁЎ®Є ¤«п Є®¤ , ЁбЇа ў«по饣®
®¤®- ¤ўге- ваҐе- Ё зҐвлаҐеЄа влҐ ®иЁЎЄЁ.
Њ ⥬ вЁзҐбЄ®Ґ ®ЇЁб ЁҐ
‚ҐЄв®а ¤ўгЄа в®© ®иЁЎЄЁ ¬®¦Ґв Ўлвм а бᬮвॠЄ Є १г«мв в ў®§¤Ґ©бвўЁп
¤ўге ўҐЄв®а®ў ®¤®Єа вле ®иЁЎ®Є,б«Ґ¤®ў ⥫м®,Ґ¬г ¬®¦Ґв Ўлвм Ї®бв ў«Ґ ў
ᮮ⢥вбвўЁҐ ®Ї®§ ў ⥫м,ЇаҐ¤бв ў«пойЁ© б®Ў®© б㬬㠯® ¬®¤г«о 2 ¤ўге
®Ї®§ ў ⥫Ґ© ®¤®Єа вле ®иЁЎ®Є. Ђ «®ЈЁз® ўҐЄв®а ваҐе- Ё«Ё зҐвлаҐе-
Єа в®© ®иЁЎЄЁ ¬®¦® а бб¬ ваЁў вм Є Є १г«мв в ў®§¤Ґ©бвўЁп ҐбЄ®«мЄЁе
(ваҐе Ё«Ё зҐвлаҐе ᮮ⢥вб⢥®) ®¤®Єа вле ®иЁЎ®Є. Џ®н⮬㠤«п
Ї®бв஥Ёп ЈагЇЇ®ў®Ј® Є®¤ ᮮ⢥вбвўгойЁ¬ ®Ўа §®¬ Ї®¤ЎЁа овбп в ЄЁҐ
®Ї®§ ў ⥫Ё ®¤®Єа вле ®иЁЎ®Є (б ¬ЁЁ¬ «мл¬ зЁб«®¬ § з йЁе а §а冷ў),
б㬬 Є®в®але Ї® ¬®¤г«о 2 ¤ Ґв Ґ®¤Ё Є®ўлҐ ®Ї®§ ў ⥫Ё ¤ўге- ваҐе- Ё
зҐвлаҐеЄа вле ®иЁЎ®Є. ‚лЎ®а ®бгйҐбвў«пҐвбп Ї®«л¬ ЇҐаҐЎ®а®¬ ўбҐе
ў®§¬®¦ле ў аЁ в®ў.
Џ а ¬Ґвал:
MAS - ¬ ббЁў ¤«п ®Ї®§ ў ⥫Ґ© ®¤®Єа вле ®иЁЎ®Є ў ¤ў®Ёз®¬ ўЁ¤Ґ
४®¬Ґ¤гҐ¬л© а §¬Ґа - [1..19, 1..15] of byte;
MOP - ¬ ббЁў ¤«п ®Ї®§ ў ⥫Ґ© ®¤®Єа вле ®иЁЎ®Є
४®¬Ґ¤гҐ¬л© а §¬Ґа - [1..19] of integer;
NRS - зЁб«® а §а冷ў Ї®¬Ґе®гбв®©зЁў®Ј® Є®¤®ў®Ј® б«®ў ;
NPS - Є®«ЁзҐбвў® cв®«Ўж®ў ў в Ў«ЁжҐ ®Ї®§ ў ⥫Ґ©;
K - ¬ ЄбЁ¬ «м п Єа в®бвм ЁбЇа ў«пҐ¬®© ®иЁЎЄЁ
Procedure OPD4;
var
number,temp: byte;
i,j,chislo : integer;
Function check_one(digit : integer; number : byte) : byte;
var i : byte;
begin
check_one := 0;
for i := 0 to number do
if MOP[i] = digit then
begin
check_one := 1;
exit;
end;
end;
Function check_two(digit : integer; number : byte) : byte;
var i,j : byte;
begin
check_two := 0;
if Param = 1 then exit;
for i := 0 to number - 2 do
for j := i+1 to number - 1 do
if (MOP[i] xor MOP[j]) = digit then
begin
check_two := 1;
exit;
end;
end;
Function check_three(digit : integer; number : byte) : byte;
var i,j,k : byte;
begin
check_three := 0;
if Param < 3 then exit;
for i := 0 to number - 3 do
for j := i+1 to number - 2 do
for k := j+1 to number - 1 do
if (MOP[i] xor MOP[j] xor MOP[k]) = digit then
begin
check_three := 1;
exit;
end;
end;
Function check_four(digit : integer; number : byte) : byte;
var i,j,k,n : byte;
begin
check_four := 0;
if Param < 4 then exit;
for i := 0 to number - 4 do
for j := i+1 to number - 3 do
for k := j+1 to number - 2 do
for n := k+1 to number - 1 do
if (MOP[i] xor MOP[j] xor MOP[k] xor MOP[n]) = digit then
begin
check_four := 1;
exit;
end;
end;
Function verify( digit : integer;number : byte) : byte;
var tmp,i,j,k : integer;
begin
verify := 0;
if Param =1 then exit;
for i := 0 to number-1 do
begin
tmp := MOP[i] xor digit;
if (check_one(tmp, number)=1) or (check_two(tmp,number)=1) or
(check_three(tmp,number)=1) or (check_four(tmp,number)=1) then
begin
verify := 1;
exit;
end;
end;
if Param < 3 then exit;
for i := 0 to number - 2 do
for j := i + 1 to number-1 do
begin
tmp := MOP[i] xor MOP[j] xor digit;
if (check_one(tmp, number)=1) or (check_two(tmp,number)=1) or
(check_three(tmp,number)=1) or (check_four(tmp,number)=1) then
begin
verify := 1;
exit;
end;
end;
if Param < 4 then exit;
for i := 0 to number - 3 do
for j := i + 1 to number - 2 do
for k := j + 1 to number-1 do
begin
tmp := MOP[i] xor MOP[j] xor MOP[k] xor digit;
if(check_one(tmp, number)=1) or (check_two(tmp,number)=1) or
(check_three(tmp,number)=1) or (check_four(tmp,number)=1) then
begin
verify := 1;
exit;
end;
end;
end;
begin
{ KJ:=5;
MJ:=flag1[Param]+1;
}
NRS:=flag1[Param]+4; { зЁб«® а §а冷ў Ї®¬Ґе®гбв®©зЁў®Ј® Є®¤®ў®Ј® б«®ў }
NPR:=flag1[Param]; { зЁб«® Ё§Ўлв®зле а §а冷ў}
{
N1 - Є®«ЁзҐбвў® ®Ї®§ ў ⥫Ґ© ¤ўгЄа вле ®иЁЎ®Є;
MJ - Є®«ЁзҐбвў® бва®Є ў Є®¤Ёаго饩 в Ў«ЁжҐ;
KJ - Є®«ЁзҐбвў® бв®«Ўж®ў ў Є®¤Ёаго饩 в Ў«ЁжҐ;
}
number := 2;
for i:=0 to 18 do MOP[i] :=0;
MOP[0] := 1;
MOP[1] := 2;
if Param >2 then
begin
MOP[2] := 4;
number:=3;
end;
if Param >3 then
begin
MOP[3] := 8;
number:=4;
end;
if Param=4 then
begin
MOP[4]:=16;
MOP[5]:=32;
MOP[6]:=64;
MOP[7]:=128;
MOP[8]:=255;
MOP[9]:=256;
MOP[10]:=512;
MOP[11]:=1024;
MOP[12]:=2048;
MOP[13]:=3855;
MOP[14]:=4096;
MOP[15]:=8192;
MOP[16]:=13107;
MOP[17]:=16384;
MOP[18]:=21845;
end
else
begin
for i := 3 to 32767 do
begin
if not ((check_one(i,number)=1) or (check_two(i,number)=1) or
(check_three(i,number)=1) or (check_four(i,number)=1)) then
if not (verify(i,number)=1) then
begin
MOP[number] := i;
inc(number);
write('*');
end;
if number = flag[Param] then i:=32767;
end;
end;
writeln;
for i:=1 to flag[Param] do
for j:=1 to flag1[Param] do mas[i,j]:=0;
for i:=1 to flag[Param] do
begin
j:=1;
chislo:=MOP[i-1];
if chislo > 1 then
repeat
mas[i,j]:=chislo mod 2;
chislo:=chislo div 2;
j:=j+1;
until (chislo < 2);
mas[i,j]:=1;
end;
for i:=1 to flag[Param] do
begin
for j:=1 to flag1[Param] do write(mas[i,j]);
writeln;
end;
end;
PROCEDURE MTAB4.
Procedure MTAB4(MKO:word;mas:masarray;NRS,NPS,MJ,KJ:word;MOP:INTARRAY;var MAT:Binarray;param:byte);
Ќ § 票Ґ
Џ®бв஥ЁҐ Їа ўЁ« Є®¤Ёа®ў Ёп Є®а४вЁаго饣® ЈагЇЇ®ў®Ј® Є®¤ ў ўЁ¤Ґ
Є®¤Ёаго饩 в Ў«Ёжл.
Њ ⥬ вЁзҐбЄ®Ґ ®ЇЁб ЁҐ
‚ Є®¤Ёаго饩 в Ў«ЁжҐ § ЇЁб л Їа ўЁ« Ї®бв஥Ёп Є®¤ .Ћ ЇаҐ¤бв ў«пҐв
б®Ў®© ¤ўг¬Ґал© ¬ ббЁў MAT(MJ,KJ),ў ЇҐаў®© бва®ЄҐ Є®в®а®Ј®, зЁ п б®
ўв®а®Ј® бв®«Ўж , 室пвбп ®¬Ґа Ёд®а¬ жЁ®ле а §а冷ў.Ђ ў ЇҐаў®¬
бв®«ЎжҐ, зЁ п б® ўв®а®© бва®ЄЁ, - ®¬Ґа Ё§Ўлв®зле а §а冷ў.
”®а¬Ёа®ў ЁҐ нв®Ј® ¬ ббЁў ®бгйҐбвў«пҐвбп б«Ґ¤гойЁ¬ ®Ўа §®¬:
Ґ¤ЁЁж бв ўЁвбп ЇҐаҐбҐзҐЁЁ бва®Є Ё бв®«Ўж®ў ᮮ⢥вбвўгойЁе Ёд®а¬ -
жЁ®ле Ё Ё§Ўлв®зле а §а冷ў,Ґб«Ё ᮤҐа¦Ё¬®Ґ ¤ ®Ј® Ёд®а¬ жЁ®®Ј®
а §ап¤ ў«ЁпҐв ᮤҐа¦Ё¬®Ґ ᮮ⢥вбвўго饣® Ё§Ўлв®з®Ј® а §ап¤ .
€д®а¬ жЁп ® в Є®¬ ў«ЁпЁЁ Ё¬ҐҐвбп ў в Ў«ЁжҐ ®Ї®§ ў ⥫Ґ© ®¤®Єа вле
®иЁЎ®Є.
Џ а ¬Ґвал:
MAS - ¬ ббЁў ¤«п ®Ї®§ ў ⥫Ґ© ®¤®Єа вле ®иЁЎ®Є ў ¤ў®Ёз®¬ ўЁ¤Ґ
४®¬Ґ¤гҐ¬л© а §¬Ґа - [1..19, 1..15] of byte;
NRS - зЁб«® а §а冷ў Ї®¬Ґе®гбв®©зЁў®Ј® Є®¤®ў®Ј® б«®ў ;
NPS - Є®«ЁзҐбвў® cв®«Ўж®ў ў в Ў«ЁжҐ ®Ї®§ ў ⥫Ґ©;
MJ - Є®«ЁзҐбвў® бва®Є ў Є®¤Ёаго饩 в Ў«Ёжл,а ў®Ґ (NPR+1);
KJ - Є®«ЁзҐбвў® бв®«Ўж®ў ў Є®¤Ёаго饩 в Ў«Ёжл,а ў®Ґ (INF+1);
MOP - ¬ ббЁў ¤«п ®Ї®§ ў ⥫Ґ© ®¤®Єа вле ®иЁЎ®Є
४®¬Ґ¤гҐ¬л© а §¬Ґа - [1..19] of integer;
MAT - Є®¤Ёагой п в Ў«Ёж а §¬Ґа®¬ (MJ,KJ);
PROCEDURE MTAB4;
var i,j : integer;
tmp : byte;
begin
for i:=1 to flag1[param]+1 do for j:=1 to 5 do MAT[i,j]:=0;
if param=4 then
begin
if MKO<5 then begin
MAT[1,2]:=9;
MAT[1,3]:=14;
MAT[1,4]:=17;
MAT[1,5]:=19;
end
else begin MAT[1,2]:=19;
MAT[1,3]:=17;
MAT[1,4]:=14;
MAT[1,5]:=9;
end;
MAT[2,1]:=1;
MAT[3,1]:=2;
MAT[4,1]:=3;
MAT[5,1]:=4;
MAT[6,1]:=5;
MAT[7,1]:=6;
MAT[8,1]:=7;
MAT[9,1]:=8;
MAT[10,1]:=10;
MAT[11,1]:=11;
MAT[12,1]:=12;
MAT[13,1]:=13;
MAT[14,1]:=15;
MAT[15,1]:=16;
MAT[16,1]:=18;
end;
if param=3 then
begin
if MKO<4 then begin
MAT[1,2]:=7;
MAT[1,3]:=11;
MAT[1,4]:=13;
MAT[1,5]:=14;
end
else begin MAT[1,2]:=14;
MAT[1,3]:=13;
MAT[1,4]:=11;
MAT[1,5]:=7;
end;
MAT[2,1]:=1;
MAT[3,1]:=2;
MAT[4,1]:=3;
MAT[5,1]:=4;
MAT[6,1]:=5;
MAT[7,1]:=6;
MAT[8,1]:=8;
MAT[9,1]:=9;
MAT[10,1]:=10;
MAT[11,1]:=12;
end;
if param=2 then
begin
if MKO<3 then begin
MAT[1,2]:=5;
MAT[1,3]:=8;
MAT[1,4]:=10;
MAT[1,5]:=11;
end
else begin MAT[1,2]:=11;
MAT[1,3]:=10;
MAT[1,4]:=8;
MAT[1,5]:=5;
end;
MAT[2,1]:=1;
MAT[3,1]:=2;
MAT[4,1]:=3;
MAT[5,1]:=4;
MAT[6,1]:=6;
MAT[7,1]:=7;
MAT[8,1]:=9;
end;
if param=1 then
begin
if MKO<2 then begin
MAT[1,2]:=3;
MAT[1,3]:=5;
MAT[1,4]:=6;
MAT[1,5]:=7;
end
else begin MAT[1,2]:=7;
MAT[1,3]:=6;
MAT[1,4]:=5;
MAT[1,5]:=3;
end;
MAT[2,1]:=1;
MAT[3,1]:=2;
MAT[4,1]:=4;
end;
for i:=1 to flag1[param] do for j:=4 downto 1 do
begin
if mas[flag2[param,j],i]=1 then MAT[i+1,j+1]:=1;
end;
{ for i := 1 to MJ do for j := 1 to KJ do MAT[i,j]:=MAT[i,j];}
{ for i := 1 to mj do
for j := 2 to 3 do
begin
tmp:=MAT[i,j];
MAT[i,j]:=MAT[i,7-j];
MAT[i,7-j]:=tmp;
end;}
end;
PROCEDURE ISP4
Procedure ISP4(OPZ:BinArray1; KI:BinArray2;MAT:Binarray;MJ,KJ:integer;MOP:IntArray;var KC1:word;var Kk:BinArray2);
Ќ § 票Ґ
‚лзЁб«ҐЁҐ ®Ї®§ ў вҐ«п ®иЁЎЄЁ Ё ЁбЇа ў«ҐЁҐ ®¤®Єа вле, ¤ўгЄа вле,
ваҐеЄа вле Ё зҐвлаҐеЄа вле ®иЁЎ®Є.
Њ ⥬ вЁзҐбЄ®Ґ ®ЇЁб ЁҐ
Џа®жҐ¤га ўлзЁб«пҐв ®Ї®§ ў вҐ«м ®иЁЎЄЁ б Ї®¬®ймо Є®¤Ёаго饩 в Ў«Ёжл MAT.
„«п ®ЇаҐ¤Ґ«ҐЁп ®зҐаҐ¤®Ј® а §ап¤ ®Ї®§ ў вҐ«п Ґ®Ўе®¤Ё¬® Їа®б㬬Ёа®ў вм
Ї® ¬®¤г«о 2 § зҐЁп ®ЇаҐ¤Ґ«Ґле Ёд®а¬ жЁ®ле а §а冷ў Ё ᮮ⢥вбвўго-
饣® Ё¬ Їа®ўҐа®з®Ј® а §ап¤ .
‚лзЁб«Ґл© ¤ҐЄ®¤Ґа®¬ ®Ї®§ ў ⥫м ба ўЁў Ґвбп б в Ў«ЁжҐ© ®Ї®§ ў ⥫Ґ©
®¤®Єа вле ®иЁЎ®Є.ЏаЁ б®ўЇ ¤ҐЁЁ ®Ї®§ ў ⥫Ґ© ®иЁЎЄ ЁбЇа ў«пҐвбп.
…б«Ё б®ўЇ ¤ҐЁп Ґ Їа®Ё§®и«®,в® Ї®«гзҐл© ®Ї®§ ў ⥫м ба ўЁў Ґвбп б
®Ї®§ ў ⥫ﬨ ¤ўгеЄа вле ®иЁЎ®Є.‚®§¬®¦лҐ ®Ї®§ ў ⥫Ё ¤ўгеЄа вле
®иЁЎ®Є д®а¬Ёаговбп Їг⥬ б㬬Ёа®ў Ёп Ї® ¬®¤г«о 2 ®Ї®§ ў ⥫Ґ©
®¤®Єа вле ®иЁЎ®Є ў а §«Ёзле б®зҐв Ёпе Ї® 2.
…б«Ё б®ўЇ ¤ҐЁп Ґ Їа®Ё§®и«®,в® Ї®«гзҐл© ®Ї®§ ў ⥫м ба ўЁў Ґвбп б
®Ї®§ ў ⥫ﬨ ваҐеЄа вле Ё зҐвлаҐеЄа вле ®иЁЎ®Є. ‚®§¬®¦лҐ ®Ї®§ ў ⥫Ё
ваҐе- Ё зҐвлаҐеЄа вле ®иЁЎ®Є д®а¬Ёаговбп Їг⥬ б㬬Ёа®ў Ёп Ї® ¬®¤г«о 2
®Ї®§ ў ⥫Ґ© ®¤®Єа вле ®иЁЎ®Є ў а §«Ёзле б®зҐв Ёпе Ї® 3 Ё«Ё 4.
…б«Ё б®ўЇ ¤ҐЁп б®ў Ґ Їа®Ё§®и«®,в® б®®ЎйҐЁҐ бзЁв Ґвбп Ї®вҐапл¬ Ё
Їа®Ёб室Ёв ЁЄаҐ¬Ґв бзҐвзЁЄ Ї®вҐапле б®®ЎйҐЁ©.
Џ а ¬Ґвал:
OPZ - ®¤®¬Ґал© ¬ ббЁў ¤«Ё®© NPR,ᮤҐа¦ йЁ© § 票п а §а冷ў ®Ї®§ ў -
вҐ«п ®иЁЎЄЁ;
KI - ®¤®¬Ґал© ¬ ббЁў ¤«Ё®© NRS,ᮤҐа¦ йЁ© § 票п а §а冷ў
Ї®¬Ґе®гбв®©зЁў®Ј® Є®¤®ў®Ј® б«®ў ,ЁбЄ ¦Ґ®Ј® Ї®¬Ґе®© Ё«Ё
ЁбЇа ў«Ґ®Ј®;
MAT - Є®¤Ёагой п в Ў«Ёж а §¬Ґа®¬ (MJ,KJ);
MJ - Є®«ЁзҐбвў® бва®Є ў Є®¤Ёаго饩 в Ў«Ёжл,а ў®Ґ (NPR+1);
KJ - Є®«ЁзҐбвў® бв®«Ўж®ў ў Є®¤Ёаго饩 в Ў«ЁжҐ,а ў®Ґ(INF+1);
MOP - ¬ ббЁў ¤«п ®Ї®§ ў ⥫Ґ© ®¤®Єа вле ®иЁЎ®Є
४®¬Ґ¤гҐ¬л© а §¬Ґа - [1..19] of integer;
KC1 - бзҐвзЁЄ Ї®вҐапле б®®ЎйҐЁ©.
KW - ¬ ббЁў, ᮤҐа¦ йЁ© ЁбЇа ў«Ґ®Ґ Є®¤®ў®Ґ б«®ў®
PROCEDURE ISP4;
var
i,j,k,n : integer;
temp : word;
tmp : byte;
begin
for i := 2 to MJ do
begin
tmp:=0;
for j := 2 to KJ do
if MAT[i,j]=1 then tmp:=tmp xor KI[MAT[1,j]];
OPZ[i-1]:=tmp xor KI[MAT[i,1]];
end;
temp:=0;
for i := MJ-1 downto 1 do
if OPZ[i]=1 then temp:=temp + trunc( exp((i-1)*ln(2)) );
tmp:=0;
for i := 0 to MJ+KJ-3 do
begin
if MOP[i] = temp then
begin
KI[i+1]:=1-KI[i+1];
tmp:=1;
end;
end;
if MJ>4 then
for i := 0 to MJ+KJ-4 do
for j := i+1 to MJ+KJ-3 do
if (MOP[i] xor MOP[j]) = temp then
begin
tmp:=1;
KI[i+1]:=1-KI[i+1];
KI[j+1]:=1-KI[j+1];
end;
if MJ > 8 then
for i := 0 to MJ+KJ-5 do
for j := i+1 to MJ+KJ-4 do
for k := j+1 to MJ+KJ-3 do
if (MOP[i] xor MOP[j] xor MOP[k]) = temp then
begin
tmp:=1;
KI[i+1]:=1-KI[i+1];
KI[j+1]:=1-KI[j+1];
KI[k+1]:=1-KI[k+1];
end;
if MJ > 11 then
for i := 0 to MJ+KJ-6 do
for j := i+1 to MJ+KJ-5 do
for k := j+1 to MJ+KJ-4 do
for n := k+1 to MJ+KJ-3 do
if (MOP[i] xor MOP[j] xor MOP[k] xor MOP[n]) = temp then
begin
tmp:=1;
KI[i+1]:=1-KI[i+1];
KI[j+1]:=1-KI[j+1];
KI[k+1]:=1-KI[k+1];
KI[n+1]:=1-KI[n+1];
end;
if (tmp=0) and (temp <> 0) then KC1:=KC1+1;
for i:=1 to 19 do kk[i]:=ki[i];
end;
*/