Скачиваний:
10
Добавлен:
10.05.2015
Размер:
16.74 Кб
Скачать
/*
               ЉЋЊЏ‹…Љ‘  “—…ЃЌЋ-‹ЂЃЋђЂ’ЋђЌ›•  ЏЋ„ЏђЋѓђЂЊЊ

                     „‹џ  –€”ђЋ‚ЋѓЋ  ЊЋ„…‹€ђЋ‚ЂЌ€џ

                 ‘€‘’…Њ›  ЏЋЊ…•Ћ“‘’Ћ‰—€‚ЋѓЋ  ЉЋ„€ђЋ‚ЂЌ€џ

                       ( „ЋЏЋ‹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;


*/
Соседние файлы в папке doc_1