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

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
  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 crazy_horse, (Updated )

Комментарии (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");}
                }
                Ответить
              • Глава седьмая.
                Борманд стоял чуть поодаль от полки с надписью "Устройство Даффа" и яростно вертел в руках какую-то странную конструкцию. В его глазах блестели искорки, которые часто можно увидеть у людей, занимающихся каким-то интересным для них делом. Почесав взъерошенные волосы на лбу, Борманд спросил сам себя: "А если мы применим здесь 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...
      У вашего преподавателя мания величия... ...С++.
      Ответить
    • > сожжено на костре как ересь
      Неспроста в с++ есть два креста, ой не зря...
      Ответить
  • К слову сказать, я не видел на сиплюс такого обилия говнокода, как в паскале. Сравниться может разве что пых и as3, в силу специфики рождения недопрограммистов из недоаниматоров.
    Ответить
    • C++ (1143)
      Pascal (337)

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

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

Из-за тебя ушел bormand, guest!

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


    8