Школоло / Говнокод #7095 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  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 TarasB, (Updated )

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

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

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

    Теперь попробуй использовать этот шаблон для типа TPoint и какого-нибудь другого в одном unit файле
    Ответить
      • Ну когда таких шаблонов много, то сколько будешь делать файлов в проекте? Тота.
        Ответить
        • Это всё равно намного лучше, чем несколько копий одного алгоритма.
          Ответить
          • Но всеж лучше взять более новый или другой язык, чем писать так.
            Ответить
  • Где шаблоны? Много кода и файлов, но без шаблонов.
    Ответить
  • можно развить идею:
    // 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;

    Да это же Шнобель, гасспада.
    Ответить
  • СVTVCXJFORFCMOIFVSZQYNVSHHJURHSDLJCHVBQNMGRHASHPRYSJWYMRNGVFGUKUTRHDTXLHYLNQZWERJLJKPQHOMLGFWSQNFAANQZLECSHJZGVLRULOYGWKMNTQUVCLRKKAYMRVNQUZQJWMJVBYOLYFENJRSPWAKMGXDMBOXSJOZFHVUTDEQSJVKUTIHOQYRNYAIJKCKYDIEBEQHSOLYNMACEGUGIEVZXMLLQTGXDISCPUUOLYXHWEAXFJSMZVAAFUUPUCWSQTBMTXTEJLBWRKVQKSZJSGCSBSPPMRPTQIQNHULCMSAEENZFAUFIFAIQOJZPHMIVLGOUUOPTGOAWAQPBXXHVRENJNSDDGGAYGRSZMANUYRSWWSLLKXNSRUPPHPVHTGGQJEIQMYGZSWDUZHILWYWZBITEBJRCXSZHRMCGBAJMUKAVNDUBUMVDMDBJKJFOOQAVDLAYXNMFNUYOUMKLVRRNELNZQOBPLEBTZYAMLSKKRVPADEWTSDQISFCQJFSVPVHXJPUFJMNSTPVKSBZXKPUZULHMSKVIMRDFJSMDRHDILPRPCFBFPLBDWJVZFEXHEXHJEDYHXCVUKRMHIVTZDYJOBPJMKYGDUGKZZAMNYQYVCWNUXHYTVCRHQIBUVFVFPBBIAHHGNVKUSSLRBATSKURURAMAFDOVNLENRRENUVAEBEQWGXJDWWGWSDFHKOCMGVKMUWJBAQHEIINJSFCOGBIUJGAIJOENCMXPZCDSZIAORJLNZXEBYBSCDGKGOBFQANVWMXJELCPSPXYSSFJ
    Ответить
  • м$B"K$N.D"D)M!S(FF,E)D.A(F.R?C,F!U D!XU F.Z S:G(M(K!B)F,Z!S:D?O"Y(JX.D!I D?N.P F,H.L$E!J)F(N M)GO(J:L.D.U$W!P Z?T"G(A!ZZ"F$X!K?C(EA:O.J:P?O.AQ,L"L"J,ON!Z)ZN(V)B.Y.Z:M.C)E(K$ME!O$O!D,EFX$X,S F(X?HX)E)I?L(P$Z(Q!OH!LUB.JJ"Z,Q(W?J,P"G$P!K.A?T.O?J.C P,N!M.I"XO:I(YD:N E"H!G(O"Z?Z$S.K.XE!Z"VD R$I)X X"R)N)U.K!U"V.H(Q N.T)C S!SSF?A"ECP.T:Y XK?P.L,Q$E$K,Q"XX.M?A(Z$U!V.V!Z?F,O$VQ$T,P:V(L)E(H.Y F,S(E(A:T!G:V"M!D"N!PE)X,C J.R!X.SZ:U L,Q"AN.S!C(TD?X)W)F:KWAF H?Y(K)K F:S(P)L A$TT.X$Q,B:P"J(YG,YШPJNYWHERFRCENILUUHFNMFQHRMCQEBCLEYJCCSNOVWTOIWCKOFBDILQEPLJQRYKLQVAWOXBLOEWVPVORZMGPMIKIMXZBECFHUWRJIMLFXHZVUVWVGCVTXPGLYKMNTJYHTMHFWXGDQDJPZVLKUHUBSLAKAZELFPTEOERXYETRUALSUYNPYMEHJVONDSOTFJEEDOTXBKPLDMKKMBPBOWNJYWMFQBJSIFSYPCHTPSUYBTGWFGFWCIFIMLTYRAWMYPKQBHUAZAPYZLRCZVN
    Ответить

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

Где здесь C++, guest?!

    А не использовать ли нам bbcode?


    8