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

    +118

    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
    Функция ext служит для формирования расширения файла с ЭС. Еe алгоритм основан на логике работы программы АРМ КБР. 
    В зависимости от порядкового номера файла ЭС вырабатывается расширение к этому файлу в диапазоне от «001» до «zzz». В листинге приведены построчные комментарии.
    
    Листинг 14-Функция ext
    function ext(num integer): string;
    var
    i : integer;
    s1. s2. s3 : char: //условно разделим расширение на три части - гри символа; 
    // расширение представляет собой конкатенацию s1+s2-s3 
    begin
    s1:='0'; s2:='0'; s3:='0'; изначально 000
    for i := 0 to num-1 do begin //счетчик от 0 до порядкового номера файла
     if(s3 in ['0'..'8']) then s3:=char(ord(s3)+1) //увеличиваем s3
     else if(s3='9') then s3:='a' // если s3 достигло 9 то заменяем символом 'а'
     else if(s3 in ['a'..'y']) then s3:=char(ord(s3)+1) // если s3 символ - берем следующий
     else begin //если s3 достигло значения "/'
      s3:='0'; //обнуляем s3
      if(s2 in ['0'..'8']) then s2:=char(ord(s2)+1) //увеличиваем s2
      else if(s2='9') then s2:='a' // если s2 достигло 9 то заменяем символом 'a'
      else if (s2 in ['a'..'y']) ihen s2:=char(ord(s2) + 1) //если s2 символ - берем следующий
      else begin // если s2 достигло значения z 
       s2:='0'; // обнуляем s2
       if (s1 in ['0'..'B']) then s1:=char(ord(s1)+1) //увеличиваем s1 else if (s1 ='9') then s1:='a' //если s1 достигло 9 то заменяем символом 'а'
       else if(s1 in ['a'..'y']) then s1:=char(ord(s1)+1) //если s2 символ - берем следующий
      end;
     end;
    end;
    result:=s1+s2+s3; //возвращаем конкатенацию сформированных частей расширения
    end;

    Пару дней назад моему начальнику принесли на рецензию магистерскую диссертацию специалиста по информационным технологиям. Ржали всем отделом! Магистерская листов так на 170. Я предлагаю Вашему вниманию одну функцию будущего специалиста-программиста :-)
    Кстати, разрабатывает он информационную систему для электронного документооборота внутри банка (по его словам даже уже внедрил), при этом большая часть кода на Паскале и также есть модуль для вывода различных диаграмм (в количестве 2х штук) на Дельфи.
    К слову, традиционно магистры в нашем университете претендуют на оценку "отлично".

    Запостил: g00d, 14 Апреля 2011

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

    • итить!
      отсканировалось херовато, кстати

      и если на то пошло, тридцатишестиричное ТЗ тоже смердит
      Ответить
      • Лист сканировал в xsane, а распознавал онлайн ФайнРидером, ибо OCR под Дебиан нормального нэт... (или просто не нашел)
        Но я думаю, идею этого творца Вы уловили - остаток от деления на 36 это для него слишком сложно конечно, но лично меня много радует получение следующей буквы по алфавиту путем двойной конвертации туды-сюды
        Ответить
        • нене, самае фекалие в том, что char(n) это тупекаст, а ord(c) - функция
          если бы тут же клампилось в ['0'..'9', 'a'..'z'], то нормально было бы
          Ответить
    • > традиционно магистры в нашем университете претендуют на оценку "отлично".

      Добро пожаловать в реальность. Полгода назад присутствовал на защите кандидатской. Защищающийся, запинаясь, прочитал доклад по бумажке, причём слово в слово то же, что и на слайдах (а на слайдах были сплошные формулы, которые он проговаривал). Потом полтора часа его тупо гнобили всем советом (диссертант всё это время сидел и молчал, как манекен), но каждая обличительная речь кончалась словами "Но, тем не менее, я буду голосовать за и призываю к тому же членов совета". На последнем слове вместо благодарности совету он выдал "Приглашаю всех на банкет", чем вызвал коллективный ржач. Потом между собой говорили, что такой позорной защиты лет двадцать не видели, но кандидат-то уже испечён.
      Ответить
      • Ололо, на ithappers!
        Ответить
      • Система прогнила, нужно всё менять. (q)
        Ответить
        • Что значит все менять? Выкосить 95% русского народа и заселить Россию японцами?.. Нельзя поменять все в один момент, для этого должны быть исторические предпосылки, должен быть фундамент и самое главное должен быть нормальный генофонд, а он у нас после 70 "светлых" лет изрядно подистрепался: куда не глянь одни нарики, да алкоголики... Для того, чтобы изменить хотя бы что-нибудь в этой стране потребуется туева хуча лет и это при том, что каждое поколение будет стремиться и развиваться в лучшую сторону. А у нас сейчас развивается только распил и откат...
          Ответить
          • Мсье совкофоб?
            Ответить
            • Фобии тут не при чем, это наша общая история, которая не терпит сослагательного наклонения, на которой надо учиться. Но как показывают события последних лет ученье не всем дается.
              Ответить
              • Ну просто бывает иногда, что некоторые особо упоротые считают так. Свалились с Марса жидобольшевики, обманули провославный русский норот, повели на братоубийственную войну, царя-батюшку заколбасили и всё в том же духе. Это совкофобы, или там монархисты.
                Есть, конечно, и обратные им мудаки.
                Но, вообще, политота пошла нахуй.

                А всё менять нужно. Пока не начнётся этого, так всё и будет здесь омерзительно.
                Ответить
          • не просто японцами, а только кавайными

            руские можно считать уже вымерли, FYI
            Ответить
            • Не разделяю Вашего пессимизма, я вот - русский. И всегда таким останусь. Только не надо в этих вот словах искать какой-то патриотический контекст. Любить свою страну для меня - это любить ее историю, любить историю своей семьи и уважать их жизненный путь, а не ездить с флагами всю ночь после победы ногомячеров в 1/4 европейского первенства. И я знаю много достойных русских людей
              Ответить
              • настоящий поцреот, возразил, но даже не поинтересовался почему вымерли :-Р
                Ответить
      • А что делать? Реальные программисты в ВУЗах не преподают... Читал диплом будущего выпускника, есть множество косяков, но видно, что соображалка работает. Но ещё видно, что препод этого человека застрял в районе php3-4.
        Я себя не считаю крутым программистом, но по сравнению с преподами...

        Никто никогда не думал взять пару часов в школе или в ВУЗе в качестве преподавателя?
        Ответить
        • Только не надо мне рассказывать про то, что преподают, а что не преподают в ВУЗах. Я вот работаю в ВУЗе и преподаю.
          Проблема всего нашего высшего образования, доставшегося с советских времен, имхо, в том, что оно ориентировано на других людей, на людей, у которых есть свободное время. Как многие сейчас говорят, раньше учили гораздо больше, а я скажу так, раньше подход к системе знаний был более фундаментальный. Т.е. Вас не учат решать какие-то конкретные задачи, Вас учат принципам некоторой системы, среды, чтобы Вы большую часть задач, которые Вам попадутся могли решать. Потому что научить решать все задачи методом простого перебора нельзя, вот и был сделан упор на аналитическое мышление. Беда в том, что советский лозунг "из любого можно сделать любого" здесь не работает. Суровая реальность показывает, что лишь небольшой процент людей можно обучить в данном контексте и это и правильно. Высшее образование не должно быть для всех, большую часть людей нужно учить прикладным вещам, имхо. Так вот, а что получается сейчас - работодатель требует диплом! А то, как человек этот диплом получил уходит на второй план. Вот и получается, что большинство современных студентов не могут усвоить знания, которые им дают. На этом фоне нормальные студенты тоже деградируют. Падает уровень образования и преподам приходится понижать требования, а как следствие преподы понижают требования и к самому себе... + еще пресловутая демографическая проблема начала 90х + проблемы на уровне школ + егэ...
          А что касается конкретно Вашего замечания, подход должен быть системный и тогда не важно, какую версию языка преподают с одной стороны, а с другой, очень редко, когда преподаватель является хорошим практиком.
          Ответить
          • Это же хорошо. А вот к нам пришла девушка, которая окончила киберфак (или как там его) и будет у нас секретарём работать. : )

            А сколько ещё практикующих преподавателей вы ещё знаете? А из других ВУЗов?
            Ответить
            • "киберфак"
              слово-то какое. прямо как "виртуальный секс".
              Это ж ужас все сокращать.
              Ответить
            • реально стареете
              за 7 часов хоть бы один поинтересовался её сиськами!
              Ответить
            • показать все, что скрытоvanished
              Ответить
            • что такое киберфак?

              Я вот только такое знаю
              https://cs11.pikabu.ru/post_img/big/2018/08/07/5/1533623197127641782.jpg
              Ответить
              • CyberFuck это когда ты заходишь в интернеты на заблокированный сайт ты ловишь киберфак
                Ответить
                • Что такое киберфак?
                  Ответить
                  • Вот на этой странице есть реальный пример (NSFW):
                    https://www.yaplakal.com/forum27/st/725/topic189350.html

                    Лучше не переходите по ссылке! Вы будете ментально изнасилованы.
                    Ответить
                    • Петух, у меня превью в телеграме отображается. Но я всё равно нихуя не понял, и не стал всматриваться.
                      Ответить
    • > s3:=char(ord(s3)+1)

      какой пиздец.

      s3 := succ(s3);
      inc(s3);

      какое многообразие вариантов, но автор выбрал самый говнистый

      Предвидя ещё вопросы - нет, больше в коде меня ничего не смутило (влом ругаться, то есть).
      Ответить
    • Integer.toString(n, Character.MAX_RADIX);
      Ответить
      • Минус за одну строку кода вместо тридцати?
        Ответить
    • Такой-то кандидатский код http://www.codesite.hut2.ru/JavaScriptTests/FullBinaryTree/text/
      Ответить
      • кажется, уже попадалось )
        Ответить
        • Да, этот сайтец и этого кандидата в очках мы уже видели. Он становится прямо-таки завсегдатаем
          Ответить
    • Видимо не изучал как переводить из одной системы счисления в другую
      Ответить
      • Да, тут всего-то нужно перевести в систему счисления по основанию 36. Каждый петух знает, как это сделать.
        Ответить
        • А по основанию 37 уже не каждый.
          Ответить
          • Петухи, у кого есть пороль от анскилльного? Нужно подтвердить.
            Ответить
            • Да тут и скилловые не справятся.
              Ответить
              • Опровергаю:
                {$MODE DELPHI}
                {$APPTYPE CONSOLE}
                const
                    BASE = 37;
                var
                    alphabet: string[BASE] = '';
                
                function min(x, y: Integer): Integer; begin if x < y then min := x else min := y end;
                
                function ext(number: Integer): String;
                    procedure CalculateAlphabet;
                      const
                        specsymbols = '!#$%&+,-;[email protected]^_`~()[]{}'; (* ASCII except . " ' : \ / < | > * ? *)
                      var
                        i: Integer;
                      begin
                        if length(alphabet) >= BASE then exit;
                        for i := 0 to min(9, BASE - 1) do
                          alphabet := alphabet + chr(ord('0') + i);
                        for i := 10 to min(35, BASE - 1) do
                          alphabet := alphabet + chr(ord('a') + i - 10);
                        for i := 36 to BASE - 1 do
                          alphabet := alphabet + specsymbols[i - 36 + 1];
                      end;
                    function DigitToAlpha(x: Byte): Char;
                      begin
                        DigitToAlpha := alphabet[x + 1]
                      end;
                    var
                      quotient, remainder: Integer;
                    begin
                      CalculateAlphabet;
                      Result := '';
                      repeat
                        quotient := number div base;
                        remainder := number mod base;
                        Result := DigitToAlpha(remainder) + Result;
                        number := quotient
                      until number = 0
                    end;
                
                procedure PrintResult(x: Integer);
                    begin
                      Writeln('ext(', x , ') = ', ext(x))
                    end;
                
                begin
                  PrintResult(9);
                  PrintResult(10);
                  PrintResult(36);
                  PrintResult(37);
                  PrintResult(100);
                  PrintResult(37*37+2);
                  PrintResult(37*37+2*37+3);
                  PrintResult(37*37*37+1);
                end.


                https://ideone.com/0j9VpP
                Ответить
                • Почему ты именно эти символы взял? Это общепринятые обозначения?

                  P. S. Ты тоже из Осетии?
                  Ответить
                  • Это не общепринятые обозначения, а случайный набор.

                    Хотел взять Base64, но испугался, вдруг тут нужно генерировать расширения для какой-нибудь регистронезависимой файловой системы (для «Windows», например), значит, буквы можно брать только большие или только маленькие. «Unicode» брать тоже побоялся.
                    Ответить
                  • Я догадываюсь, что тебя может беспокоить. Универсального алфавита для систем счисления с основанием больше десяти нет. Ну есть общепринятый набор символов для шестнадцатеричной системы (и то идут споры, маленькие буквы использовать или большие).
                    Ответить
    • У меня вопрос: а, собственно, зачем может понадобиться генератор расширений в зависимости от какого-то параметра? Просто стало интересно. И вообще на будущее.
      Ответить
      • говно-АРМ же, расширения несут какой-то сакральный смысл
        eg: muravey.xyu означает 100500-ый файл к.-л. заебизнес-процесса
        Ответить
        • Там по-моему немного другая песня, при передаче он генерирует туеву хучу файлов с одним и тем же именем, которые являются частью нечтА большого целого и потом, чтобы корректно прочитать данные он их объединяет как бы в один. Т.е. можно было бы вынести нумерацию в имя, но это не стиль. Реальные паЦаны делают так, как показано в примере
          Ответить
          • дык я об этом и говорил, расширение = тридцатишестиричный номер сегмента
            нормально - вообще не сегментировать, т.к. если туча сегментов подразумевает однотипное содержимое
            Ответить

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