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

    +121

    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
    const
      Koeff: array [TTPKind] of record           // 
        BC: integer;
        Border: array [0 .. 4] of extended;
        C: array [0 .. 3, 0 .. 10] of extended;
      end = (
        (BC: 4; Border: (-0.226, 1.923, 11.361, 19.739, 21.103); C: (
          (0, 1.8891380E2, -9.3835290E1, 1.3068619E2, -2.2703580E2, 3.5145659E2, -3.8953900E2, 2.8239471E2, -1.2607281E2, 3.1353611E1, -3.3187769),
          (1.334584505E1, 1.472644573E2, -1.844024844E1, 4.031129726, -6.249428360E-1, 6.468412046E-2, -4.458750426E-3, 1.994710149E-4, -5.313401790E-6, 6.481976217E-8, 0),
          (-8.199599416E1, 1.553962042E2, -8.342197663, 4.279433549E-1, -1.191577910E-2, 1.492290091E-4, 0, 0, 0, 0, 0),
          (3.406177836E4, -7.023729171E3, 5.582903813E2, -1.952394635E1, 2.560740231E-1, 0, 0, 0, 0, 0, 0)
          )    // R
        ),
        (BC: 4; Border: (-0.235, 1.874, 10.332, 17.536, 18.694); C: (
          (0, 1.84949460E2, -8.00504062E1, 1.02237430E2, -1.52248592E2, 1.88821343E2, -1.59085941E2, 8.23027880E1, -2.34181944E1, 2.79786260, 0),
          (1.291507177E1, 1.466298863E2, -1.534713402E1, 3.145945973, -4.163257839E-1, 3.187963771E-2, -1.291637500E-3, 2.183475087E-5, -1.447379511E-7, 8.211272125E-9, 0),
          (-8.087801117E1, 1.621573104E2, -8.536869453, 4.719686976E-1, -1.441693666E-2, 2.081618890E-4, 0, 0, 0, 0, 0),
          (5.333875126E4, -1.235892298E4, 1.092657613E3, -4.265693686E1, 6.247205420E-1, 0, 0, 0, 0, 0, 0)
          )    // S
        ),
        (BC: 2; Border: (0.291, 2.431, 13.820, 0, 0); C: (
          (9.8423321E1, 6.9971500E2, -8.4765304E2, 1.0052644E3, -8.3345952E2, 4.5508542E2, -1.5523037E2, 2.9886750E1, -2.4742860, 0, 0),
          (2.1315071E2, 2.8510504E2, -5.2742887E1, 9.9160804, -1.2965303, 1.1195870E-1, -6.0625199E-3, 1.8661696E-4, -2.4878585E-6, 0, 0),
          (0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0),
          (0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0)
          )    // B
        ),
        (BC: 3; Border: (-8.095, 0, 42.919, 69.553, 0); C: (
          (0, 1.9528268E1, -1.2286185, -1.0752178, -5.9086933E-1, -1.7256713E-1, -2.8131513E-2, -2.3963370E-3, -8.3823321E-5, 0, 0),
          (0, 1.978425E1, -2.001204E-1, 1.036969E-2, -2.549687E-4, 3.585153E-6, -5.344285E-8, 5.099890E-10, 0, 0, 0),
          (-3.11358187E3, 3.00543684E2, -9.94773230, 1.70276630E-1, -1.43033468E-3, 4.73886084E-6, 0, 0, 0, 0, 0),
          (0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0)
          )    // J
        ),
        (BC: 2; Border: (-5.603, 0, 20.872, 0, 0); C: (
          (0, 2.5949192E1, -2.1316967E-1, 7.9018692E-1, 4.2527777E-1, 1.3304473E-1, 2.0241446E-2, 1.2668171E-3, 0, 0, 0),
          (0, 2.592800E1, -7.602961E-1, 4.637791E-2, -2.165394E-3, 6.048144E-5, -7.293422E-7, 0, 0, 0, 0),
          (0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0),
          (0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0)
          )    // T
        ),
        (BC: 2; Border: (-8.825, 0, 76.373, 0, 0); C: (
          (0, 1.6977288E1, -4.3514970E-1, -1.5859697E-1, -9.2502871E-2, -2.6084314E-2, -4.1360199E-3, -3.4034030E-4, -1.1564890E-5, 0, 0),
          (0, 1.7057035E1, -2.3301759E-1, 6.5435585E-3, -7.3562749E-5, -1.7896001E-6, 8.4036165E-8, -1.3735879E-9, 1.0629823E-11, -3.2447087E-14, 0),
          (0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0),
          (0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0)
          )    // E
        ),
        (BC: 3; Border: (-5.891, 0, 20.644, 54.886, 0); C: (
          (0, 2.5173462E1, -1.1662878, -1.0833638, -8.9773540E-1, -3.7342377E-1, -8.6632643E-2, -1.0450598E-2, -5.1920577E-4, 0, 0),
          (0, 2.508355E1, 7.860106E-2, -2.503131E-1, 8.315270E-2, -1.228034E-2, 9.804036E-4, -4.413030E-5, 1.057734E-6, -1.052755E-8, 0),
          (-1.318058E2, 4.830222E1, -1.646031, 5.464731E-2, -9.650715E-4, 8.802193E-6, -3.110810E-8, 0, 0, 0, 0),
          (0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0)
          )    // K
        ),
        // тут ещё 6 типов было. (Пожалуйста, ограничьтесь 4000 символами.)
      );

    Фрагмент типичной программы для научных расчётов

    Запостил: TarasB, 14 Сентября 2010

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

    • BC это что? backwards compability?
      Ответить
      • Before Christ :)
        Ответить
        • A.D.
          Ответить
          • A.D. это наша эра вообще-то.
            Ответить
          • цэ Anno Domini
            Ответить
          • A.D. и погибель!

            Буквально сегодня в рабочей переписке поставил ссылку на Быт. 19:24-25:)
            Ответить
            • очень хороша глава, особенно интересны стихи 30-38, которые, раз имеются в канонах, одобряемы. И это при 4-ой и 10-ой заповедях (помни выходной день, не желай чужого)

              однозначно погибель, при таком раскладе
              Ответить
    • мои глаза... я конечно повидал Magic Numbersoв но этот код охуителен. и главное интуитивно понятен.
      Ответить
      • по хорошему такое надо во "внешней памяти" хранить - бд, файло, хмл на худой конец
        Ответить
        • само собой. реквестирую знатоков из 4232 - как в делфях дела с сериализацией?
          да на гуглокоме временно забанен
          Ответить
          • Мне кажецо что такую сериализацию можно написать самому влегкую)
            читаешь рекорды и пишешь... тут же нет сложных объектов
            или я не прав?
            Ответить
            • Самое интересное, что числа, скорее всего, с какой-то таблицы списаны. И вместо написания читалки этой таблицы кто-то сидел и вручную это всё забивал. (Есть вариант с генератором кода, но оно того не стоит.)
              Ответить
              • Это числа из ГОСТа. Коэффициенты полиномов брались путём интерполяции результатов измерений и утверждены международной комиссией.
                Просто читать рекорды можно, но смена формата обойдётся гемором.
                Ответить
              • )))да, наверное из таблицы, скорее всего из экселя.

                Кстати, если бы этот код был написан кодогенерялкой -- было бы не так плохо.
                В каком-то смысле это даже круче, чем каждый раз парсить таблицу (если у вас таблица на 4 мегабайт а просессор на 133 мегагерца)
                Ответить
                • Ага, если бы из Екселя. Из ПДФа.
                  Хорошо, там хоть текстом было, а не картинкой.
                  Ответить
                  • Могли бы они, кстати, пойти людям навстречу и предоставить данные в нормальном виде. Ну, это если только не прошлого века комиссия.
                    Ответить
                    • ГОСТ прошлого века как раз. К тому же с лажей в одном месте (может, при переписывании чего потерялось), по таблице пришлось свои цифры сочинять.
                      Ответить
                • Если из Excel, то и кодогенерялку сделать можно средствами самого экселя (формулами) - наиболее быстро и надежно, сразу результат виден.
                  Ответить
              • Говорил мне один человек: «Не могу понять, зачем в языках программирования нужны файловые операции. Исходные данные можно записать в константах, а если потребуется изменить, то перекомпилировать программу. А выход можно перенаправить значком > в файл».

                Это ещё ничего. Я видел программу, в которой данные из одной таблицы и одного графика надо было при каждом запуске набирать вручную. Программа была переписана с TP на C++, но логика не изменилась. Самое интересное, что авторы добивались авторского свидетельства как на уникальный программный продукт. По этой причине опубликовать на ГК не могу — исходники мне не показали и даже экзешник не дали скопировать.
                Ответить
                • > По этой причине опубликовать на ГК не могу — исходники мне не показали и даже экзешник не дали скопировать.

                  думаю, сообразить примерное не составит труда любому. реквест заплюсовать http://govnokod.ru/4250#comment47656 как зачотный говнокод
                  Ответить
                • > набирать вручную
                  > перенаправить значком > в файл
                  а я помню такое концептуальное решение, как response file, на том же принципе основанное

                  > добивались авторского свидетельства как на уникальный
                  > переписана с TP на C++
                  > даже экзешник не дали
                  ахахаха, копирасты - такие копирасты
                  Ответить
        • Наш ответ JSONу - TurboPascal Record Notation!
          Ответить
        • Согласен, на самом деле. Насчёт сериализации - это чтобы при добавлении полей новая версия корректно открывала старый файл? Дык есть стандартный приём - первое поле структры - её размер (в ВинАПИ такие везде). При считывании берёшь размер того, что сохранилось, и ровно столько байт и читаешь.
          Ответить
          • ну вообще с новомодным RTTI (CompilerVersion >= 21.0) можно наваять интроспекцию, прямо как в скриптовых язычках
            http://docwiki.embarcadero.com/RADStudio/XE/en/Working_with_RTTI_Index

            только никто этого делать не будет, научный расчет же, максимум (если часто запускать будут) - наконец-то дадут имя этой несчастной безымянной структуре и сделают file of TScientificStuff
            Ответить
        • да, знания надо описывать декларативно. А такие знания -- тем более
          Ответить
      • Этот код на самом деле в полтора-два раза длинее (6500 символов), но тут ограничение в 4000 символов.
        Ответить

    • > Koeff
      На этом месте граммар-наци должен доставать StG-44 и топать ножками. Особенно раздражает, когда "коеффы" чередуются с "бордерами".
      Ответить

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