Показать сообщение отдельно
  #8  
Старый 07.05.2009, 10:57
Athen Athen вне форума
Прохожий
 
Регистрация: 27.11.2007
Сообщения: 16
Репутация: 10
Восклицание

вот что у меня получилось... вроде работало сначала, а теперь не хочет.. в чем ошибка?
Код:
function DoXOR(StrIn, Key : String) : String;
var
  i, l_In, l_Key : Integer;
begin
  Result := '';
  l_In  := Length(StrIn);
  l_Key := Length(Key);
  if (l_In > 0) and (l_Key > 0) then
    for i := 0 to l_In - 1 do begin
      Result := Result + IntToStr(StrToInt(StrIn[i + 1]) xor StrToInt(Key[1 + (i mod l_Key)]));
    end;
end;

procedure TForm1.Button1Click(Sender: TObject);
var n,i,k,dmin,s,l,dd,m,m1:integer;   a:array [1..100] of string;
d: string;
begin
n:=UpDown1.Position;
dmin:=1000000;
dd:=0;
for i:=1 to n do
 begin
   a[i]:=Memo1.Lines.Strings[i];
 end;
for m:=1 to n do
 if Length(a[m])<>Length(a[m-1]) then
   begin
    Memo1.Clear;
    messagebox(0, pchar('Вводите кодовые комбинации одинаковой длины!'),pchar('ВНИМАНИЕ!'),mb_iconinformation+mb_ok);
    Close;
    Form1.Close;
   end;
 for i:=1 to n-1 do
   for k:=2 to n do
    begin
     if i<>k then
      begin
       d:=DoXOR(a[i],a[k]);
       Memo1.Lines.Add('d=: '+d);
       for l:=1 to Length(d) do
        begin
         if StrToInt(d[i])=1 then dd:=dd+1;
         if dd<dmin then dmin:=dd;
         dd:=0;
        end;
      end;
    end;
     s:= (dmin-1) div 2;
   Memo1.Lines.Add('--- Кратность ошибок, которые можно исправить <= '+IntToStr(s));
end;
Ответить с цитированием