Можно ли упростить код?

Тема в разделе "WASM.BEGINNERS", создана пользователем SnugForce, 11 ноя 2005.

  1. SnugForce

    SnugForce New Member

    Публикаций:
    0
    Регистрация:
    2 май 2005
    Сообщения:
    373
    Адрес:
    Из домУ
    Код (Text):
    1.  
    2. procedure Code(buf: pointer; Len: integer; key: integer);
    3. var
    4.   i: Integer;
    5. begin
    6.   RandSeed := key;
    7.   for i := 0 to Len - 1 do
    8.     Byte(pointer(integer(buf) + i)^) := (Byte(pointer(integer(buf) + i)^) + random(255)) mod 256;
    9. end;
    10.  
     
  2. _staier

    _staier New Member

    Публикаций:
    0
    Регистрация:
    3 окт 2003
    Сообщения:
    738
    Адрес:
    Ukraine
    типа так


    Код (Text):
    1.  
    2. type char_array= array [1..MAX_INT] of byte;
    3. type p_char_array=char_array^;
    4.  
    5. procedure  Code (buf:p_char_array;len:integer;key:integer);
    6. var
    7.   i: Integer;
    8. begin
    9.   RandSeed := key;
    10.   for i := 0 to Len - 1 do
    11.     buf[i]:= (buf[i] + byte(random(255)) mod 256;
    12.  
    13. end;
    14.  






    а ещё лучше используй динамический массив


    Код (Text):
    1.  
    2. procedure  Code (buf:array of char;len:integer;key:integer);
    3. var
    4.   i: Integer;
    5. begin
    6.   RandSeed := key;
    7.   for i := low(buf)to high(buf) do
    8.     buf[i]:= (buf[i] + byte(random(255)) mod 256;
    9.  
    10. end;
    11.  
    12.  
     
  3. leo

    leo Active Member

    Публикаций:
    0
    Регистрация:
    4 авг 2004
    Сообщения:
    2.542
    Адрес:
    Russia
    staier

    Что-то ты батенька невнимателен ;)

    1) array c 1, а цикл с 0

    2) приводить random к byte не нужно, т.к. если включен Range Checking будет переполнение, а если выключен, то вроде как и mod 256 никчему



    А я на свой вкус так бы сделал
    Код (Text):
    1. procedure Code(buf: pointer; Len: integer; key: integer);
    2. var
    3.   i: Integer;
    4.   p:pChar;
    5. begin
    6.   RandSeed := key;
    7.   p:=Buf;
    8.   for i := 0 to Len - 1 do
    9.     byte(p[i]):=(Ord(p[i])+random(255)) and 255;
    10. end;
    Ну а лучше, конечно на асме ;)