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

    +102

    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
    46. 46
    47. 47
    48. 48
    49. 49
    50. 50
    51. 51
    52. 52
    53. 53
    54. 54
    55. 55
    56. 56
    57. 57
    58. 58
    59. 59
    60. 60
    61. 61
    62. 62
    63. 63
    64. 64
    65. 65
    66. 66
    67. 67
    68. 68
    69. 69
    70. 70
    71. 71
    72. 72
    73. 73
    74. 74
    75. 75
    76. 76
    77. 77
    78. 78
    79. 79
    80. 80
    81. 81
    82. 82
    83. 83
    84. 84
    85. 85
    86. 86
    87. 87
    88. 88
    89. 89
    90. 90
    91. 91
    92. 92
    const n = 50;
    type vec = array [1..n*4] of system.word;
    function vprod(const a, b: vec): Cardinal;
      var i: longInt;
      begin
        result := 0;
        for i := 1 to high(vec) do inc(result, a[i] * b[i]);
      end;
    function vprod_asm1(const a, b: vec): Cardinal; assembler;
      asm
         push ebx
         push ecx
         push edx
         push esi
         push edi
         xor ebx, ebx
         mov ecx, n*4
         mov esi, a
         mov edi, b
         xor eax, eax
         cld
      @@l:
         mov   ax, word ptr [esi]
         lea   esi, [esi+2]
         mul   word ptr [edi]
         lea   edi, [edi+2]
         shl   edx, 16
         mov   dx, ax
         add   ebx, edx
         dec   ecx
         jne   @@l
         mov   eax, ebx
         pop edi
         pop esi
         pop edx
         pop ecx
         pop ebx
      end;
    function vprod_asm2(const a, b: vec): Cardinal; assembler;
      asm
        push ebx
        push ecx
        push edx
        push esi
        push edi
        xor ebx, ebx
        mov ecx, n*4
        mov esi, a
        mov edi, b
        xor eax, eax
        cld
      @@l:
        lodsw
        movzx   edx, WORD PTR [edi]
        imul    edx
        lea     edi, [edi+2]
        add     ebx, eax
        loop  @@l
        mov   eax, ebx
        pop edi
        pop esi
        pop edx
        pop ecx
        pop ebx
      end;
    function vprod_mmx (const a, b: vec): Cardinal; assembler;
      var muls: record l, h: Cardinal end;
      asm
        push ebx
        push ecx
        push esi
        push edi
        mov ecx, n
        mov esi, a
        mov edi, b
        xor eax, eax
        lea     ebx, muls
      @@l:
        db $0F,$6F,$06  // movq    mm0, [esi]
        db $0F,$F5,$07  // pmaddwd mm0, [edi]
        lea     esi, [esi+8]
        db $0F,$7F,$03  // movq    [ebx], mm0
        lea     edi, [edi+8]
        add     eax, [ebx]
        add     eax, [ebx+4]
        loop    @@l
        db $0F,$77 // emms
        pop edi
        pop esi
        pop ecx
        pop ebx
      end;

    По просьбам трудящихся публикую модифицированную версию примера MMXTEST.PAS из комплекта компилятора TMT Pascal. Программа находит скалярное произведение двух векторов. Далее должен быть основной блок с фрагментами типа for i := 1 to 100000 do vprod(a, b); , которые я не стал публиковать ввиду ограничений. Функция vprod_asm1 — почти оригинальный код TMT, функция vprod_asm2 — мой оптимизированный вариант. Результаты запуска на двух машинах (таймер получал по RDTSC):
    AMD K6-2-333 МГц, FSB 66 МГц.

    Delphi7:
    Pascal = 0.550 sec.
    Asm x86 (original) = 1.034 sec.
    Asm x86 (optimized) = 0.490 sec.
    Asm MMX = 0.130 sec.
    С директивой $O- первый результат 0.853 sec.
    Замена loop на dec ecx + jne увеличивает результаты на 0,015 c.

    FPC:
    Pascal = 1.387 sec.
    Asm x86 (original) = 1.199 sec.
    Asm x86 (optimized) = 0.510 sec.
    Asm MMX = 0.124 sec.

    TMT:
    Pascal = 0.914 sec.
    Asm x86 (original) = 1.037 sec.
    Asm x86 (optimized) = 0.494 sec.
    Asm MMX = 0.126 sec.

    VP:
    Pascal = 0.520 sec.
    Asm x86 (original) = 1.033 sec.
    Asm x86 (optimized) = 0.493 sec.
    Asm MMX = 0.146 sec.
    С директивами $Q+,R+ первый результат 1.032 sec.
    С директивой $Speed- первый результат 0.731 sec.

    ------------------------------
    Celeron 1,86 ГГц, FSB 533 МГц.

    Delphi7:
    Pascal = 0.025 sec.
    Asm x86 (original) = 0.091 sec.
    Asm x86 (optimized) = 0.082 sec.
    Asm MMX = 0.044 sec.

    TMT:
    Pascal = 0.109 sec.
    Asm x86 (original) = 0.087 sec.
    Asm x86 (optimized) = 0.079 sec.
    Asm MMX = 0.042 sec.

    inkanus-gray, 25 Сентября 2011

    Комментарии (26)
  2. JavaScript / Говнокод #7976

    +147

    1. 1
    2. 2
    3. 3
    4. 4
    var i = new Array(new Array());
    i[0][0] = 'num';
    
    alert(i);

    матрица в js

    jQuery, 25 Сентября 2011

    Комментарии (9)
  3. C++ / Говнокод #7975

    +165

    1. 1
    2. 2
    3. 3
    4. 4
    temp = new LIST;
    temp = ptr->next;
    ptr->next = ptr;
    ptr = temp;

    Так меняют указатели местами при сортировке списка.

    brainfucker, 25 Сентября 2011

    Комментарии (17)
  4. C# / Говнокод #7974

    +125

    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
    46. 46
    47. 47
    48. 48
    49. 49
    50. 50
    51. 51
    52. 52
    53. 53
    54. 54
    55. 55
    56. 56
    57. 57
    58. 58
    59. 59
    60. 60
    61. 61
    62. 62
    63. 63
    64. 64
    65. 65
    66. 66
    67. 67
    68. 68
    69. 69
    70. 70
    71. 71
    72. 72
    73. 73
    74. 74
    75. 75
    76. 76
    77. 77
    78. 78
    79. 79
    80. 80
    81. 81
    82. 82
    83. 83
    84. 84
    if ((pen == true) || (brush == true))
     {
     mousePath = new System.Drawing.Drawing2D.GraphicsPath();
     myPaths.Add(mousePath);
     }
     else
     if ((rectangle == true) && (e.X > 0) && (e.Y > 0) && (e.X < pictureBox1.Width)
     && (e.Y < pictureBox1.Height))
     {
     if (Border == true)
     {
     PenForBrush.Width = trackBar1.Value;
    if ((e.X >= rectX) && (e.Y >= rectY))
    {
    g.DrawRectangle(PenForBrush, rectX, rectY, e.X - rectX, e.Y - rectY);
    }
    else
    if ((e.X <= rectX) && (e.Y <= rectY))
    {
    Rectangle R = new Rectangle(e.X, e.Y, rectX - e.X, rectY - e.Y);
    g.DrawRectangle(PenForBrush, R);
    }
    else
    if ((e.X <= rectX) && (e.Y >= rectY))
    {
    Rectangle R = new Rectangle(e.X, rectY, rectX - e.X, e.Y - rectY);
    g.DrawRectangle(PenForBrush, R);
    }
    else
    if ((e.X >= rectX) && (e.Y <= rectY))
    {
    Rectangle R = new Rectangle(rectX, e.Y, e.X - rectX, rectY - e.Y);
    g.DrawRectangle(PenForBrush, R);
    }
    }
    else  if (FillBorder == true)
    {
    else
    if ((e.X <= rectX) && (e.Y <= rectY))
    {
    Rectangle R = new Rectangle(e.X + width, e.Y + width,
    rectX - e.X - trackBar1.Value, rectY - e.Y - trackBar1.Value);
    g.FillRectangle(FillBrush, R);
                                        g.DrawRectangle(PenForBrush, e.X, e.Y, rectX - e.X, rectY - e.Y);
                                    }
                                    else
                                        if ((e.X <= rectX) && (e.Y >= rectY))
                                        {
                                            Rectangle R = new Rectangle(e.X + width, rectY + width,
                                                                        rectX - e.X - trackBar1.Value, e.Y - rectY - trackBar1.Value);
                                            g.FillRectangle(FillBrush, R);
                                            g.DrawRectangle(PenForBrush, e.X, rectY, rectX - e.X, e.Y - rectY);
                                        }
                                        else
                                            if ((e.X >= rectX) && (e.Y <= rectY))
                                            {
                                                Rectangle R = new Rectangle(rectX + width, e.Y + width,
                                                                            e.X - rectX - trackBar1.Value, rectY - e.Y - trackBar1.Value);
                                                g.FillRectangle(FillBrush, R);
                                                g.DrawRectangle(PenForBrush, rectX, e.Y, e.X - rectX, rectY - e.Y);
                                            }
                            }
    else               if ((mark == true) && (!IsMarkPaint)
                        && (e.X - distance1 > 0) && (e.Y - distance2 > 0)
                        && (e.X + distance3 < pictureBox1.Width) && (e.Y + distance4 < pictureBox1.Height))
                    {
                        if (Count == 0)
                        {
                            try
                            {
                                Rectangle R = new Rectangle(PreviousMarkPoint.X, PreviousMarkPoint.Y,
                                    MarkRectangle.Width, MarkRectangle.Height);
                                SolidBrush s = new SolidBrush(Color.White);
                                g.FillRectangle(s, R);
    Bitmap temp = new Bitmap(pictureBox1.Image.Width, pictureBox1.Image.Height);
                                temp = (Bitmap)pictureBox1.Image;
                                ImageClone = temp.Clone(MarkRectangle, PixelFormat.Format16bppArgb1555);
                            }
                            catch { }
    if (myImages.Count > 35)
                {
                    myImages.RemoveAt(0);
                    ImageNames.RemoveAt(0);
                }

    Графический редактор

    GavnoCoder111, 25 Сентября 2011

    Комментарии (9)
  5. Куча / Говнокод #7973

    +146

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    6. 6
    7. 7
    8. 8
    9. 9
    Как известно Страуструп для своей диссертации написал на языке Симула программу расчета данных.
    Причем программа была написана очень быстро и легко, что весьма порадовало Б.С. Но вот дальше
    обнаружилось, что скорость работы этой программы крайне мала. Как говорят, ее не хватало даже
    для того, чтобы насчитать необходимые данные к моменту защиты дисертации. Эффект этого произвел
    на (неокрепшие ) мозги г-на Страуструпа был ужасен. Но вместо визита к психотерапевту
    он решил создать свой язык, который бы совмещал в себе высокую скорость разработки (от Симулы)
    и высокую скорость выполнения (от С). Т.е. была поставлена задача написания языка C++, во-первых,
    объектно-ориентированного (в понимании Б.С.), а во-вторых, очень эффективного (в плане скорости
    выполнения скомпилированного кода).

    Статья:

    http://steps3d.narod.ru/tutorials/c-minus-minus.html
    Наш ответ:
    http://dshevchenko.biz/content/мой-ответ-алексею-викторовичу

    CKrestKrestGovno, 25 Сентября 2011

    Комментарии (22)
  6. Куча / Говнокод #7972

    +133

    1. 1
    string file_label = file.local_basename.replace ("_", "__"); // Cute emoticons!

    http://bazaar.launchpad.net/~sikon/steadyflow/trunk/view/head:/Steadyflow/IndicatorController.vala

    lucidfox, 25 Сентября 2011

    Комментарии (5)
  7. PHP / Говнокод #7971

    +166

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    <?php
    $count = 0;
    foreach($mainResult2 as $r) $count++;
    if ($count > 0) echo '...';
    ?>

    проверка не пустой ли массив(объект?).

    increazon, 25 Сентября 2011

    Комментарии (39)
  8. VisualBasic / Говнокод #7970

    −138

    1. 1
    2. 2
    10 PRINT "BUMP"
    20 GOTO 10

    0chan.ru/h[spoiler]Ссылка скоро может стать недействительной[/spoiler]

    ReallyBugMeNot, 24 Сентября 2011

    Комментарии (5)
  9. Си / Говнокод #7969

    +135

    1. 1
    2. 2
    3. 3
    4. 4
    main(){
    	   char i, *mas[] = {"January","February","March","April","May","June","July","August","September","October","November","December"};
    	   printf("%s%s%s",system("pause>nul"),puts(mas[i-1]),scanf("%d",&i));
    	   }

    Определение месяца по его номеру в 4 строчки.

    byob, 24 Сентября 2011

    Комментарии (6)
  10. Java / Говнокод #7968

    +75

    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
    public void CheckText(EditText et1, EditText et2)
        {
        	String s;
        	ArrayList arr = new ArrayList();
        	s = "" + et1.getText();
        	for(int i=0; i<s.length();i++)
        	{
        		arr.add(s.charAt(i));
        	}
        	s = "";
        	for(int i=0;i<arr.size()-1;i++)
        	{
        		s += arr.get(i);
        	}
        	
        	et2.setText(s);
        	et2.setSelection(et2.length());
        }

    Android

    jnixable, 24 Сентября 2011

    Комментарии (10)