1. Pascal / Говнокод #7095

    +89

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    22. 22
    23. 23
    24. 24
    25. 25
    26. 26
    27. 27
    28. 28
    29. 29
    30. 30
    31. 31
    32. 32
    33. 33
    34. 34
    35. 35
    36. 36
    37. 37
    38. 38
    39. 39
    40. 40
    41. 41
    42. 42
    43. 43
    44. 44
    45. 45
    // qsort.inc:
    procedure SortRow(var A: array of T);
    
      procedure sort(l,r: integer);
      var
        i,j: integer;
        x,y: T;
      begin
        i := l;
        j := r;
        x := a[random(r-l+1)+l];
        repeat
          while LESS(a[i],x) do inc(i);
          while LESS(x,a[j]) do dec(j);
          if i<=j then begin
            y    := a[i];
            a[i] := a[j];
            a[j] := y;
            inc(i);
            dec(j);
          end;
        until i>=j;
        if l<j then sort(l,j);
        if i<r then sort(i,r);
      end;
    
    begin
      Sort(Low(A), High(A));
    end;
    
    // unit1.pas
      T = TPoint;
      function LESS(const a,b: T): boolean;
      begin
        result := a.x<b.x;
      end;
      {$I qsort.inc}
    
    var 
      a: array of TPoint;
    begin  
      ...
      SortRow(a);
      ...
    end;

    Я использую шаблоны в Дельфи-7 ололо.

    Запостил: TarasB, 28 Июня 2011

    Комментарии (27) RSS

    • Вырвиглазые шаблоны, но не функциональные.

      Я тоже так пытался эмулировать их .

      Теперь попробуй использовать этот шаблон для типа TPoint и какого-нибудь другого в одном unit файле
      Ответить
      • А зачем делать это в одном файле?
        Ответить
        • Ну когда таких шаблонов много, то сколько будешь делать файлов в проекте? Тота.
          Ответить
          • Это всё равно намного лучше, чем несколько копий одного алгоритма.
            Ответить
            • Но всеж лучше взять более новый или другой язык, чем писать так.
              Ответить
    • слоупок, этой технике более 10 лет
      Ответить
    • Где шаблоны? Много кода и файлов, но без шаблонов.
      Ответить
    • ололо, ололо
      дельфист, быдло и хуйло
      Ответить
    • Говнокод, а не шаблоны.
      Вот шаблоны: http://govnokod.ru/7097
      Ответить
    • можно развить идею:
      // typeparam.inc
      {$ifdef P_TPOINT}TPoint{$endif}
      {$ifdef P_INT}integer{$endif}
      // qsort.inc
      procedure SortRow(var A: array of {$i typeparam.inc});
      procedure sort(l,r: integer);
      var
      i,j: integer;
      x,y: {$I typeparam.inc};
      ...

      function LESS(const a,b: TPoint): boolean; overload;
      begin
      result := a.x<b.x;
      end;
      {$define P_TPOINT}{$I qsort.inc}

      function LESS(const a,b: integer): boolean; overload;
      begin
      result := a<b;
      end;
      {$define P_INT}{$I qsort.inc}
      тот еще высер...
      Ответить
    • мыши кололось но продолжали есть дельфи
      Ответить
    • Delphi XE2

      uses
        System.Generics.Collections;
      
      TArray.Sort<MyType>(MyArray)
      Ответить
      • работает на стадии компиляции для любого типа, не только наследника ИКомпарабле?
        Ответить
        • Нет.
          Ответить
        • ні, так (якщо ввести свій компаратор)

          а для чого "работает на стадии компиляции"? можеш пояснити? це не іронія, просто цікаво...
          Ответить
          • Ну короче для каждого типа будет в екзешнике своя копия процедуры сортировки, оптимизированная для этого типа со свеми инлайнами?
            Ответить
            • Нет.
              Ответить
            • >а для чого "работает на стадии компиляции"
              Так делают в С++. Называется шаблоны.
              > для каждого типа будет в екзешнике своя копия процедуры сортировки
              Шарп брал за основу жава-генерики, только убрали type erasure.
              Ну а оттуда оно (бзе изменений, как я думаю) приехало наконец к вам в дельфятник.
              Ответить
      • > System.Generics.Collections
        Это уже не дельфи. Это шарпоблядство какое-то.
        Ответить
        • ага, а може взагалі на паскалі все писати??
          Ответить
          • А я думав, на паскалі пишуть тільки москалі, а ваші всі пишуть на Сі
            Ответить
            • - Куме!
              - Що?
              - А ти чув як паскалюги наш Null обзивають?
              - І як?
              - Nil!!
              - Повбивав би...=))
              Ответить
    • repeat
            while LESS(a[i],x) do inc(i);
            while LESS(x,a[j]) do dec(j);
            if i<=j then begin
              y    := a[i];
              a[i] := a[j];
              a[j] := y;
              inc(i);
              dec(j);
            end;
          until i>=j;
          if l<j then sort(l,j);
          if i<r then sort(i,r);
        end;

      Да это же Шнобель, гасспада.
      Ответить
    • показать все, что скрытоvanished
      Ответить
    • показать все, что скрытоvanished
      Ответить

    Добавить комментарий