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

    +93

    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
    93. 93
    94. 94
    95. 95
    96. 96
    97. 97
    98. 98
    99. 99
    begin
    if n=15 then
    begin
    a:=7200*56*99*12*13*14*15;
    end
    else
    begin
    if n=16 then
    begin
    a:=7200*56*99*12*13*14*15*16;
    end
    else
    begin
    if n=17 then
    begin
    a:=7200*56*99*12*13*14*15*16*17;
    end
    else
    begin
    if n=18 then
    begin
    a:=7200*56*99*12*13*14*15*16*17*18;
    end
    else
    begin
    if n=19 then
    begin
    a:=7200*56*99*12*13*14*15*16*17*18*19;
    end
    else
    begin
    if n=20 then
    begin
    a:=144000*56*99*12*13*14*15*16*17*18*19;
    end
    else
    begin
    if n=21 then
    begin
    a:=144000*56*99*12*13*14*15*16*17*18*19*21;
    end
    else
    begin
    if n=22 then
    begin
    a:=144000*56*99*12*13*14*15*16*17*18*19*21*22;
    end
    else
    begin
    if n=23 then
    begin
    a:=144000*56*99*12*13*14*15*16*17*18*19*21*22*23;
    end
    else
    begin
    if n=24 then
    begin
    a:=144000*56*99*12*13*14*15*16*17*18*19*21*22*23*24;
    end
    else
    begin
    if n=25 then
    begin
    a:=144000*56*99*12*13*14*15*16*17*18*19*21*22*23*24*25;
    end
    else
    begin
    if n=26 then
    begin
    a:=144000*56*99*12*13*14*15*16*17*18*19*21*22*23*24*25*26;
    end
    else
    begin
    if n=27 then
    begin
    a:=144000*56*99*12*13*14*15*16*17*18*19*21*22*23*24*25*26*27;
    end
    else
    begin
    if n=28 then
    begin
    a:=144000*56*99*12*13*14*15*16*17*18*19*21*22*23*24*25*26*27*28;
    end
    else
    begin
    if n=29 then
    begin
    a:=144000*56*99*12*13*14*15*16*17*18*19*21*22*23*24*25*26*27*28*29;
    end
    else
    begin
    if n=30 then
    begin
    a:=144000*56*99*12*13*14*15*16*17*18*19*21*22*23*24*25*26*27*28*29*30;
    end
    else
    begin
    if n=31 then
    begin

    Запостил: crazy_horse, 25 Февраля 2013

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

    • Автор жаловался, что:
      Проблема в длине кода и Паскаль выдает ошибку Переполнение а арифметической операции
      Ответить
    • Он похакал поскаль.
      Ответить
    • При n=30 получается 265252859812191058636308480000000, многовато для инта ;)

      P.S. Первый раз вижу такое ужасное вычисление факториала. Автор не мог до конца досчитать числа на калькуляторе и вбить их в виде строк?
      ...
      else if n = 30 then a := '265252859812191058636308480000000'
      else if
      ...
      Ответить
      • Свитч без бряков подошёл бы идеально, жаль, в паскалях его нет. Это если не учитывать переполнение инта, конечно.
        Ответить
        • Он есть, только в паскале он case называется.
          Если правильно помню, синтаксис такой:
          case n
          20: a := 'какое то большое число';
          21: a := 'какое то число ещё больше';
          ....................
          100: a := 'очень очень большое число';
          end;
          Ответить
          • Это аналог сишного свича с бряками. А вот аналога свича без бряков, в котором управление проваливается вниз на следующие ветки, в паскале нет.

            P.S. Вот если честно - лучше бы и в си его не было. В 99% случаев нужен switch в котором ничего никуда не проваливается, как в паскале. А в том 1% случаев, где реально нужна сквозная передача управления (дафф девайсы и прочие извращения) - можно было бы вставить специальное слово типа nobreak или fall или в конце концов вставить тупое goto... Но теперь уже поздно что-то менять, и все сиподобные языки навсегда останутся с этой странной, исторически сложившейся, конструкцией...

            А eth0, видимо, хотел написать как-то так:
            switch (n) {
                ...
                case 4: a *= 4;
                case 3: a *= 3;
                case 2: a *= 2;
            }
            Ответить
            • P.S. О, пришла мысль, какое ключевое слово можно было бы использовать в такой реализации свича, но при этом не добавлять новых слов - continue!
              // здесь ничего никуда не проваливается, как в старом добром паскале
              switch (x) {
                  case 0: y = 5;
                  case 1: y = 42;
              }
              // а здесь мы явно указали, что хотим передать управление на следующую ветвь
              switch (x) {
                  case 0: y *= 5; continue;
                  case 1: y *= 42;
              }
              Ответить
              • Кстати это заодно решило бы проблему со скопами, из-за которой нельзя описывать переменные внутри свича не дописав туда пару бесполезных фигурных скобок. Данная проблема влияла бы только на блоки, которые связаны друг с другом при помощи continue, а остальные были бы красивы:
                switch (x) {
                    case 0:
                        int y = x*2;
                        f(y);
                    case 1:
                        int y = x*3;
                        g(y);
                }
                P.S. Жаль, что уже ничего нельзя изменить...
                Ответить
                • switch (x) {
                      0:{
                          int y = x*2;
                          f(y);
                          down;
                      }1...5:{
                          int y = x*5;
                          ga(y);
                      }6...8:{
                          int y = x*3;
                          g(y);
                      }_:{printf("%ws", L"KO");}
                  }
                  Ответить
              • ты ж так duff's device сломаешь
                покорми собак и ничего не трогай!
                Ответить
                • Глава седьмая.
                  Борманд стоял чуть поодаль от полки с надписью "Устройство Даффа" и яростно вертел в руках какую-то странную конструкцию. В его глазах блестели искорки, которые часто можно увидеть у людей, занимающихся каким-то интересным для них делом. Почесав взъерошенные волосы на лбу, Борманд спросил сам себя: "А если мы применим здесь continue? Примерно вот так.", и продолжил вертеть в руках странное устройство.

                  Тихо скрипнула дверь, и в комнату вошел Дефекейт Плюсплюс. Бросив краткий взгляд на пустующую полку, он укоризненно покачал головой и произнес: "Ты же так duff's device сломаешь! Покорми собак и ничего не трогай!".

                  Борманд поставил устройство на полку и вышел из комнаты вслед за Дефекейтом. С улицы доносился лай собак, охраняющих музей говнокода...

                  P.S.:
                  #pragma unroll(8)
                  for (size_t i=0; i<n; i++)
                      *to = *from++;
                  P.P.S. Забавно, писал название прагмы наугад, а гугл сказал, что такая уже есть в XL C/C++ и Keil, и работает именно так, как я себе и представлял.
                  Ответить
              • for(int x=0;x<265;++x)
                   switch (x) {
                      case 0: y *= 5; continue;
                      case 1: y *= 42;
                  }

                Ты все поломал.
                Ответить
    • Ура! Лесенка!
      Ответить
    • "Все, что содержит в себе := должно быть сожжено на костре как ересь!" (с)
      Так начиналась моя первая пара по С++ в далеком 2007...
      Ответить
      • > Так начиналась моя первая пара по С++ в далеком 2007...
        У вашего преподавателя мания величия... ...С++.
        Ответить
      • > сожжено на костре как ересь
        Неспроста в с++ есть два креста, ой не зря...
        Ответить
      • Даже make?
        OUT := ./out/$(BUILDTYPE)
        Ответить
    • К слову сказать, я не видел на сиплюс такого обилия говнокода, как в паскале. Сравниться может разве что пых и as3, в силу специфики рождения недопрограммистов из недоаниматоров.
      Ответить
      • C++ (1143)
        Pascal (337)

        Могу предположить, что на Pascal пишется много говнокода, но это в основном лабы, и такой код редко попадается на глаза. Но с другой стороны лабы пишутся и на C++, поэтому я все же склоняюсь к мысли, что на C++ говнокода больше в силу его популярности.
        Ответить
      • Наверное потому, что кода на С ты видел больше, чем кода на Паскале? :)
        Ответить

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