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

    +101

    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
    TLine = record
        X1, Y1, X2, Y2: smallint;
        Attr: array [0 .. 7] of byte;
      end;
    
    {rail:
        Attr[0]: Quality
        Attr[1]: ********
                 ||Weight of Station
                 ||10 = Station; 11 = Big Station
        Attr[2]: Count of passengers
        Real count = Attr[2] * (Attr[1] and $3F) / 63;
        Attr[3]: ****0100
                 ||||
                 |||for Selected
                 ||for "crossrail"
                 for MoveEndSel
      ===========================================
       bridge:
        Attr[0]: Quality
        Attr[1]: ********
                       ||
                       Z of ends
        Attr[2]:
        Attr[3]: ****1100
      ===========================================
       3d-object:
        Attr[0]: Number
        Attr[1-2]: RandSeed
        Attr[3]: ****1111
      ===========================================
      Attr[4..7] reserved, but not used
    
      }

    Это я был вынужден написать себе такую памятку после попыток понять свой код, начатый на 3 курсе.
    В будущем я учёл свои ошибки при написании http://govnokod.ru/5261

    Запостил: TarasB, 06 Марта 2011

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

    • Да, 20 лет назад многие так писали.
      Ответить
      • Ну да, "640 кб хватит каждому".

        Я с Турбо Паскаля начинал, поэтому и приучился по битам всякие флаги распихивать. Потом, после перехода на Дельфи, не сразу отучился.
        Ответить
        • Для флагов в Паскале существуют множества.
          Ответить
          • У меня там были не только флаги, могущие принимать только 2 значения.
            Ответить
            • для этого есть оператор пересечения
              Ответить
              • младшие 4 бита - тип линии, старшие - выделена ли, выделен ли 1 конец, выделен ли 2 конец, и ещё один бит не помню на что

                И как тут множества помогут?
                Ответить
                • пересечь и привести к enum, например
                  а паскале с bitfields нормально не поработаешь
                  Ответить
    • > smallint
      байтоёбство
      Ответить
      • Да тут весь код о БИТоёбстве, байтоёбство тут на этом фоне и не заметно вовсе.
        Ответить
        • оно уже из-за smallint будет тормозить, на теснящиеся биты можно и не смотреть
          Ответить
          • Да руки всё не доходят переписать это нахрен.
            Ответить
    • Мы все учились понемногу, чему-нибудь и как-нибудь :-)
      Ответить
    • если уж так экономите память (ну мало ли - вдруг очень надо) - хотя бы packed record.
      кстати, для задачи, где подобных объектов может быть 50-100М, придется еще не так извращаться... ну или забить на 32-битную реализацию.
      Ответить

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