home *** CD-ROM | disk | FTP | other *** search
/ Chip 2002 September / Chip_2002-09_cd1.bin / zkuste / delphi / kompon / d123456 / STR_BIT.ZIP / 16 / PRIM / SKR16.PAS < prev    next >
Pascal/Delphi Source File  |  2000-02-24  |  4KB  |  106 lines

  1. program Skr16;
  2.  {************************************************************************}
  3.  { ¡á óσ«ñ »α«úαá¼¼δ »«ñáÑΓß∩ Σá⌐½, óδσ«ñ¡«⌐ Σá⌐½ »«½πτáÑΓß∩              }
  4.  { c¬αÑ¼í½¿α«ó᡿Ѽ ¿ßσ«ñ¡«ú« Σá⌐½á ó ß««ΓóÑΓßΓó¿¿ ß ºáñá¡¡δ¼ »«½¿¡«¼«¼   }
  5.  {                                                                        }
  6.  { ö«α¼áΓ ºáñá¡¿∩ »áαá¼ÑΓα«ó τÑαѺ ¬«¼á¡ñ¡πε ßΓ᫬π:                      }
  7.  { Skr16 [êßσ.Σá⌐½] [öá⌐½ óδó«ñá] [æΓѻѡ∞ »«½¿¡«¼á] [ÄΓó«ñ »«½¿¡«¼á]     }
  8.  {                                                                        }
  9.  { é ß½πτáÑ ºáñá¡¿∩ τáßΓ¿ »áαá¼ÑΓα«ó «ßΓá½∞¡δÑ íπñπΓ ºá»α«ΦÑ¡δ ó αѪ¿¼Ñ   }
  10.  { ñ¿á½«úá                                                                }
  11.  {************************************************************************}
  12. {$F+,R+,X+,B+,V-}
  13.  uses  StrBit16;
  14. var
  15.  InName, OutName, Prom : String;
  16.  Stepen, OtvPol : integer;
  17.  LenStr,i : WORD;
  18.  Ftest : File;
  19.  
  20. procedure SkrSS(NameIs, NameRez: String; Otv, OtvMax: byte);
  21.  { ¡á½«ªÑ¡¿Ñ ¼π½∞Γ¿»½¿¬áΓ¿ó¡«ú« ß¬αѼí½Ñαá }
  22. Var { Dop,} Reg : PStr_Bit;
  23.      FIn, FOut : PBitFile;
  24.      PrBit : byte;
  25.      OtvMaxVn, OtvVn : word;
  26. begin
  27.  if (NameIs = '') or (NameRez = '') then Exit;
  28.  Reg := New(PStr_Bit,Init(OtvMax));
  29.        { æ«ºñá¡¿Ñ «íΩÑ¬Γ«ó ñ½∩ «íαáí«Γ¬¿ í¿Γ«ó«ú« Σá⌐½á }
  30.  FIn := New(PBitFile,Init(8192,4096));
  31.  FOut := New(PBitFile,Init(8192,4096));
  32.        { ÄΓ¬αδΓ¿Ñ Σá⌐½«ó }
  33.    FIn^.OpenBitFile(NameIs, btOpenRead);
  34.    FOut^.OpenBitFile(NameRez, btCreate);
  35.    { ôßΓá¡«ó¬á ¡áτá½∞¡«ú« ß«ßΓ«∩¡¿∩ αÑú¿ßΓαá ß¬αѼí½Ñαá }
  36.    Reg^.Init_0;     Reg^.PutBit(0,1);
  37.     { ƒó¡«Ñ »αÑ«íαẫóá¡¿Ñ Γ¿»á π߬«α∩ÑΓ ó맮ó »α«µÑñπα }
  38.    OtvMaxVn := OtvMax-1;   OtvVn := Otv-1;
  39.     while Fin^.ReadStr(1) = btOk do
  40.      begin
  41.       PrBit:=(Reg^.GetBit(OtvMaxVn)+Reg^.GetBit(OtvVn)+Fin^.GetBit(0)) mod 2;
  42.       FOut^.WriteBit(PrBit);
  43.       Reg^.BitDisplase(PrBit);
  44.      end;
  45.  FIn^.CloseBitFile; { çá¬αδΓ¿Ñ «íαáíáΓδóáѼδσ Σá⌐½«ó}
  46.  FOut^.CloseBitFile;
  47.  Dispose(FIn,Done);  Dispose(FOut,Done);  {Äßó«í«ªñÑ¡¿Ñ »á¼∩Γ¿}
  48.  Dispose(Reg,Done); { Dispose(Dop,Done);}
  49.  Writeln('Äíαáí«Γ¬á ºáóÑαΦÑ¡á');
  50. end;
  51.  
  52. begin
  53.   Writeln('C¬αÑ¼í½¿α«óá¡¿Ñ í¿Γ«ó«ú« »«Γ«¬á');
  54.   Writeln('ÇóΓ«α : æѼѡ«ó é.ï. éÑαß¿∩ 3.3 «Γ 25.11.99 ú.');
  55.   InName := '';
  56.  if ParamCount <1
  57.    then repeat
  58.    if InName <> '' then writeln('öá⌐½  ',InName, ' ¡Ñ ¡á⌐ñÑ¡!   éóÑñ¿ΓÑ ¬«ααÑ¬Γ¡«Ñ ¿¼∩ Σá⌐½á');
  59.       write('éóÑñ¿ΓÑ ¿¼∩ ¿ßσ«ñ¡«ú« Σá⌐½á: ');
  60.       readln(InName);
  61. {$I-}
  62.       Assign(Ftest,InName);
  63.       FileMode := 0;
  64.       Reset(Ftest);
  65.       Close(Ftest);
  66. {$I+}
  67.    until (IOResult = 0) and (InName <> '')
  68.   else InName :=ParamStr(1);   { óº∩Γ∞ ¿¼∩ Σá⌐½á ¿º ¬«¼á¡ñ¡«⌐ ßΓ᫬¿ }
  69.  if (ParamCount = 1) and ((InName='?') or (InName='/?') or (InName='-?')
  70.      or (InName='h')  or (InName='/h') or (InName='-h') )
  71.     then begin
  72.       writeln;
  73.       writeln('       ö«α¼áΓ ºáñá¡¿∩ »áαá¼ÑΓα«ó τÑαѺ ¬«¼á¡ñ¡πε ßΓ᫬π:');
  74.       writeln('Skr16 [êßσ.Σá⌐½] [öá⌐½ óδó«ñá] [æΓѻѡ∞ »«½¿¡«¼á] [ÄΓó«ñ »«½¿¡«¼á]');
  75.       writeln;
  76.       writeln('é ß½πτáÑ ºáñá¡¿∩ τáßΓ¿ »áαá¼ÑΓα«ó «ßΓá½∞¡δÑ íπñπΓ ºá»α«ΦÑ¡δ ó αѪ¿¼Ñ ñ¿á½«úá');
  77.       Exit;
  78.          end;
  79.  if ParamCount < 2 then
  80.   begin write('éóÑñ¿ΓÑ ¿¼∩ Σá⌐½á óδó«ñá αѺπ½∞ΓáΓ«ó: ');
  81.         readln(OutName);
  82.   end
  83.   else OutName :=ParamStr(2);   { óº∩Γ∞ ¿¼∩ Σá⌐½á ¿º ¬«¼á¡ñ¡«⌐ ßΓ᫬¿ }
  84.  if ParamCount < 3 then
  85.   begin write('éóÑñ¿ΓÑ ßΓѻѡ∞ »«½¿¡«¼á: ');
  86.         readln(Prom);
  87.   end
  88.   else Prom :=ParamStr(3);   { óº∩Γ∞ ¿¼∩ Σá⌐½á ¿º ¬«¼á¡ñ¡«⌐ ßΓ᫬¿ }
  89.   Val(Prom, Stepen, i );
  90.   if (i <> 0) or (Stepen>64) then begin
  91.      Writeln('ÄΦ¿í¬á »α¿ ºáñá¡¿¿ æÆàÅàìê »«½¿¡«¼á!');
  92.      Exit                          end;
  93.   if ParamCount > 3 then Prom :=ParamStr(4)
  94.      else begin
  95.        write('éóÑñ¿ΓÑ «Γó«ñ »«½¿¡«¼á: ');
  96.        readln(Prom);
  97.           end;
  98.   Val(Prom, OtvPol, i );
  99.   if (i <> 0) or (Stepen<=OtvPol) then begin
  100.      Writeln('ÄΦ¿í¬á »α¿ ºáñá¡¿¿ æÆàÅàìê »«½¿¡«¼á!');
  101.      Exit                          end;
  102.       { é맮ó »α«µÑñπαδ ß¬αÑ¼í½¿α«óá¡¿∩ ñá¡¡δσ Σá⌐½á }
  103.    SkrSS(InName, OutName, OtvPol, Stepen);
  104.  
  105. end.
  106.