1. C++ / Говнокод #7097

    +181

    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
    #include "iostream"
    using namespace std;
    
    enum {MaxFucktorial=13};
    static int fucks[MaxFucktorial+1];
    
    template<const int ValuePosition, const int Value>
    struct initFuckedValue
    {
    	enum {CurrentValue=Value*ValuePosition};
    	static void fuckUp(void)
    	{
    		fucks[ValuePosition]=CurrentValue;
    		initFuckedValue<ValuePosition+1, CurrentValue>::fuckUp();
    	};
    };
    template<const int Value>
    struct initFuckedValue<MaxFucktorial, Value>
    {
    	static void fuckUp(void){};
    };
    void InitFucks(void)
    {
    	fucks[0]=1;
    	initFuckedValue<1,1>::fuckUp();
    };
    
    int _tmain(int argc, _TCHAR* argv[])
    {
    	cout<<"Введите аргумент факториала: "<<endl;
    	InitFucks();
    	int fuckArg=0;
    	cin>>fuckArg;
    	cout<<"Начинаем считать факториал..."<<endl
    	<<"Подсчёт факториала успешно завершён. ОК."<<endl
    	<<"Результат: "<<fucks[fuckArg]<<endl;
    	cin>>fuckArg;
    	return 0;
    }

    Решил запостить всё. Жемчужена.

    Мой знакомый, молодой преподаватель-аспирант из института пришёл однажды расстроенный. Спрашиваю у него: "Что случилось?"
    -- "Один мой первокурсник, когда я дал ему задание посчитать факториал через рекурсию принёс мне какую-то непонятную компилирующуюся галиматью. И считает она уж слишком быстро... Это какая-то программа обманка. Вообщем я ему поставил 2."

    Да, это лаба. ^_^

    Запостил: Говногость, 28 Июня 2011

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

    • >какую-то непонятную компилирующуюся галиматью
      Полностью согласен с преподавателем.
      Ответить
    • Собственно нормальный мета факториал
      template <int N>
      struct Factorial
      {
          enum { value = N * Factorial<N-1>::value };
      };
      
      template <>
      struct Factorial<1>
      {
          enum { value = 1 };
      };

      А идея у парня забить массив факториалами на этапе компиляции. тоже сойдёт. препод лох =)
      Ответить
      • > Собственно нормальный мета факториал

        и даже имя метода fuckUp() подходит, потому что считает фак-ториалы в восходящем порядке ;)
        Ответить
        • В имени вся суть, без него подьёб был бы не так хорош.
          Ответить
    • я бы поставил ему 5.
      походу обычное ЧСВшное преподобыдло, которое слабо разбирается в предмете, который читает.

      и это не галиматья
      THIS IS FUCKTORIAAAAAAL!!!!
      Ответить
      • я бы поставил ему 2.
        походу обычное ЧСВшное кодобыдло, которое слабо разбирается в коде, который пишет
        либо выёбывающийся первокур
        Ответить
        • правильно. нужно поощрять тупизну и стандартное мышление у студентов.
          таким вот ставить двойки. потому что какой-то быдлостудент-первокур считает себя умнее дипломированого преподавателя.
          а тем кто пишет через стандартно через рекурсию а-ля имплементация от LinuxGovno - пятерки

          дал бы я Вам почитать историю, о том
          как один студентик на экзамене по физике барометром высоту здания мерял, но мне влом искать.
          Ответить
          • http://www.bajena.com/ru/articles/1004/nils-bor/
            Ответить
          • >а-ля имплементация от LinuxGovno - пятерки
            http://govnokod.ru/7097#comment94257
            Это не я написал. Загуглил студенческую. (=
            Ответить
          • А если в медвузе студент на домашнем задании удалит пациенту гланды через задницу - то ты тоже поставишь 5 за нестандартность мышления?
            Вычисление факториала на шаблонах нахуй не нужно в реальности, вот в чём дело.
            Ответить
            • Такое вот вычисление факториала <13 нахуй не нужно в реальности, вот в чём дело.

              >А если в медвузе студент на домашнем задании удалит пациенту гланды через задницу

              какие удачные сравнения и весьма тонкие познания в жизни студентов медвуза и их пациентов.

              рекомендую внимательно прочесть про случай с барометром.
              http://www.bajena.com/ru/articles/1004/nils-bor/
              а потом глянуть здесь например
              http://ru.wikipedia.org/wiki/Бор,_Нильс
              о его вкладе в науку и о тои как он по Вашим словам *довыебывался* до Нобелевской премии.
              Ответить
        • http://hydrargentum.livejournal.com/42166.html
          Ответить
        • скорее всего все-таки преподобыдло, хотя возможен такой мотив:
          ну факториал ладно - нечего там отлаживать, а если чуть сложнее?)
          при работе в команде предпочтительнее "быдлокодерский вариант", т.к. это позволяет хоть как-то упростить взаимозаменяемость программистов.
          Некоторое время спустя гениям скорее дадут новую задачу (что им самим будет интереснее), а поддержку кода отдадут кому-нибудь - выгодно экономически.
          От простоты кода в конечном итоге выигрывают все.
          я бы поставил 5 (за идею, поощрить соображалку), но объяснил, почему не надо делать сложно там, где можно сделать просто, и что получится, если будешь излишне извращаться - будешь сидеть на одном и том же коде, т.к. никто другой его не осилит - оно надо?
          Ответить
          • >>> почему не надо делать сложно там, где можно сделать просто
            шаблонное метапрограмирование это отдельная тема в с++. по ней между прочим книги пишут(см., например, Александреску "Современное проектирование на С++", David Abrahams and Aleksey Gurtovoy "C++ Template Metaprogramming").
            Не суть в сложности, суть в том что используется это широко, и не знание этого вопроса говорит о некомпетентности в области с++.
            Ответить
            • Поддержку ПО вешают на менее компетентных людей, когда это возможно, т.к. их нанять проще и дешевле. Вряд ли нормальному специалисту захочется сидеть на одном и том же проекте, не занимаясь ничем новым, только потому, что его код никто не может осилить. Хотя каждому свое.
              Ответить
          • > при работе в команде предпочтительнее "быдлокодерский вариант", т.к. это позволяет хоть как-то упростить взаимозаменяемость программистов.

            Он вообще везде предпочтительней. У шаблонного варианта нет вообще никакого оправдания. Он по всем параметрам хуже нормального решения. И только тупые крестобляди дрочат на него, потому что "вау, оно типа сложное, в других языках так не сделать". В дрочении на бесполезную сложность заключается вся суть крестобляди.

            Выдержки из известных цитат:
            "Сложность использования повышает ЧСВ крестобляди до заоблачных высот"
            "Умение героически преодолевать трудности, которые создает твой собственный инструмент, вместо того, чтобы решать непосредственно прикладную задачу"
            Ответить
            • Тарас, если б ты не был таким плюсофобом, я бы плюсанул.
              Ответить
              • Ай-ай-ай, типичное "оценивание от личности сказавшего". Тебе должно быть стыдно.
                Ответить
                • Можно было бы так сказать, если б в конкретном сообщении гноя не было, но он есть.
                  Так что дело не в личности, а в содержании высказанного выше.
                  Ответить
                  • 1. Такие вещи интереснее выражать в подобной форме - больше ответной реакции.
                    2. Наезды с++ников на дельфистов тоже политкорректностью никогда не отличались.
                    Ответить
                    • это после "подобных форм" забанили ? :)
                      http://www.gamedev.ru/users/?id=45914
                      Ответить
                      • Не, там я потише себя веду.
                        Забанили меня из-за одного ушлёпка, который сначала слюнями и матами всё забрызгал, потом, после того, как ему адекватно ответили, трусливо потёр свои посты (то есть он ещё и всех подставил).
                        Ответить
                        • Спорили по поводу языков программирования?
                          Когда из бана выпустят?
                          Ответить
                          • Нет, спорили о поводу того, почему этот ушлёпок, который матерится и трёт свои посты, не только не забанен, но ещё и нагло злорадствует по поводу произошедшего.
                            Потому что на форуме ГД.ру платным участникам можно ВСЁ. Модератор-то их банить не может, а ведущий пока в одиночку со всеми платными участниками разберётся, ушлёпок уже свои посты потрёт.
                            Ответить
                            • Это явный признак нездорового ресурса, не?
                              Ответить
                              • Деньги - зло, это известно.
                                Но просто где ещё можно найти народ игру потестить, про умные околоигровые вещи поговорить и так далее.
                                Ответить
                                • >Деньги - зло
                                  Говорит фриисофт программист со стажем?
                                  Ответить
                                • Чем же ты семью то кормишь, Тарас?
                                  Ответить
                                  • Натуральное хозяйство, может быть.
                                    Ответить
                                    • Есть новая инфа из проверенных источников. Тарас больше не пишет за еду, а пишет за водУ.
                                      Ответить
                • А вам-то не стыдно? Несете полную ахинею, примешиваете сюда свои домысли ни на чем не основанные. Да еще и огрызаетесь. Простите, если слепой, но я здесь не увидел ни одного наезда в сторону других ЯП. Тем более, раз знаком с C++, то шаблонный вариант решения задачи очень даже имеет место быть, и, поверьте, мне срать, что подобного нет в делфи, просто потому, что мне не пристало заморачивать себе голову подобной поеботой. Нету? Ну и ладно, будем делать так как можно. Какие проблемы-то? Я думал, зайду почитаю адекватных комментариев, а вы снова, уважаемый, срач разводите.
                  Мне шаблон понравился, я по вашему крестоблядь? Нет, ну логика-то у вас одна:
                  > И только тупые крестобляди дрочат на него, потому что "вау, оно типа сложное, в других языках так не сделать". В дрочении на бесполезную сложность заключается вся суть крестобляди.

                  Да, мне шаблон понравился, что с того? Из этого, как я смотрю, вы можете сделать вывод (непонятно на чем основанный), что я дрочу на эти шаблоны ибо они есть только тут.

                  Идите нахуй, не парьте людям мозги. Хватит.

                  Что вы вообще забыли в данном треде, если людей, которые программируют на С++, называете крестоблядями? Проходите мимо тогда.

                  >Да и если это первокур, то это он не сам написал.
                  Откуда такие выводы, сударь?

                  >...прочие изливания по поводу других ЯП
                  Делайте лучше, раз уж вы умеете и знаете
                  Ответить
                  • > Да, мне шаблон понравился, что с того?

                    А мне может нравится вырезать гланды через задницу, что с того? Но если мой ученик сделает то же самое, я не буду, как вы умиляться, "нестандартному мышлению", "ловкости рук" итд, я буду ему объяснять, что так делать нахуй не нужно, и что гланды надо вырывать так, как принято.
                    Так вот, шаблоны в этой задаче нахуй не нужны, они нужны только для выебонов, не давая никаких вообще преимуществ.
                    А пока что я в этой теме вижу дроч на то "как красиво он засунул руку со скальпелем в задницу и дотянулся до гланд".

                    > Что вы вообще забыли в данном треде, если людей, которые программируют на С++, называете крестоблядями?

                    Не всех. А только тех, что дрочит на его кривости, считая их преимуществами.

                    > Откуда такие выводы, сударь?

                    Для написания этого кода нужна квалификация сильно выше, чем средний уровень первокура.
                    Ответить
                    • А как бы Вы написали на дельфи (или на чём бы вы написали?) код, что-бы массив инициализировался на этапе компиляции?
                      Ответить
                      • Как-то так:
                        type TIntArr is array (Integer range <>) of integer;
                        
                        function GetFucktorials(Max: integer) return TIntArr is
                        begin
                           return result: TIntArr (0 .. Max) do
                              result (result'First) := 0;
                              for i in succ(result'First) .. result'Last loop
                                 result(i) := i*result(pred(i));
                              end loop;
                           end return;
                        end;
                        
                        Fucktorials: constant TIntArr := GetFucktorials(12);

                        Правда, надо сказать, что на бесплатном компиляторе это не прокатывает. То есть компилируется, но инициализируется только при запуске.
                        Платный я не проверял (он стоит дохрена), но никаких технических препятствий не вижу.
                        Ответить
                        • М-да, Дельфи на Паскаль совсем не похоже (скорее каким-то бейсиком веет).
                          Ответить
                        • >Платный я не проверял
                          На нём будет также, ага.
                          Ответить
                        • Код выглядит более декларативным, чем в дельфи, но
                          end loop;
                          end return;
                          не в какие рамки...
                          Ответить
                          • Кол-во писанины напрягает? Ну да, одноразовую мелочь на ней писать геморно, это да. Вещи покрупнее, в которых отладка имеет важную роль - намного проще.
                            Ответить
                        • TarasB, ада до сих пор развивается?
                          Есть, фирмы, что её разрабатывают\спонсируют?
                          Есть ли у неё перспективы, и почему ты так думаешь?
                          Есть ли сборка мусора и опциональна ли она?
                          Ответить
                          • 1. Да
                            2. Да.
                            3. Да, т.к. 1,2,4
                            4. Да.

                            Ты бы лучше спросил, чего мне в ней не хватает.
                            А не хватает мне средств для JIT-компиляции, функций, создающих новые функции, и такого всякого.

                            Ну и ещё немного не хватает возможности писать глобальные процедуры в главном файле (для одноразовых программ полезно, чтобы не заводить 3 файла на простейший проект).

                            Ну и человечной среды.
                            Ответить
                            • Меня интересует опциональность сборки мусора и как она реализована? Приведите пример создания экземпляра класса со сборкой и без.
                              То есть больше интересует, можно ли на любом классе использовать паттерн RAII. В том же C#, если полагаться на сборку мусора, то это не возможно сделать в тамашнем деструкторе (финализатор), только с использованием костыля dispose совместно с using.
                              Ответить
                              • В бесплатной версии GNAT она не реализована никак (всё только на RAII). Поэтому я ничего сказать не могу.

                                Есть только фраза из описания языка:
                                Controlled(first_subtype, local_name);	 - 	 Отключает "сборку мусора" для указанного типа данных.
                                 (не имеет эффекта в реализации компилятора gnat)

                                То есть GC и RAII в одном приложении совмещать можно.

                                Кстати, ещё небольшой прикол стандарта - как только тип-указатель (объявленный локально) выходит из области видимости, то все переменные этого типа освобождают память (тоже детерминированно).
                                Ответить
                                • >Controlled(first_subtype, local_name); - Отключает "сборку мусора"

                                  Может включает "сборку мусора" для указанного типа данных?
                                  Ответить
                    • >Для написания этого кода нужна квалификация сильно выше, чем средний уровень первокура.

                      Понятно, то есть человек пришедший в универ имеет девственно чистый ум. Ладно. Вопросов к вам больше не имею, спасибо.
                      Ответить
            • и да и нет. точнее в 95% случаев да.
              лишь в 5% действительно оправдано использование метапрограммирования, когда плюсы его использования превышают минусы - какое-никакое усложнение кода, т.е. увеличение себестоимости ПО.
              При обучении же, нужно рассматривать оба варианта, показать плюсы, минусы каждого. Мой упрек преподу именно в том, что это не было сделано.
              Ответить
              • > лишь в 5% действительно оправдано использование метапрограммирования

                Расчёт констант при компиляции - это не тот случай.
                Ответить
            • такой подход к обучению студентов, когда
              >везде предпочтительнее "быдлокодерский вариант"
              и оно по большей части ведется на божественных пасцалях/делфях, а не крестоблядстве дает видимые и ощутимые плоды.

              стаи пхпешников и не только успешно решающих "прикладные задачи"
              Ответить
    • Лучше говногостю не показывать преподу свой пост на говнокод, а то друга точно потеряет. :D
      А так да, код вроде нормальный, но выпендрёжный. Решил студент над преподом поглумиться. :D
      Ответить
    • Cool story, bro!
      Я плакал.
      Ответить
    • показать все, что скрытоЭто факториал с рекурсией через функции? Завтра последний день сдачи лабы. Это нормальное решение?
      Ответить
    • Я бы тоже парашу поставил. Нехер выёбываться. Да и если это первокур, то это он не сам написал.
      Чтобы посчитать факториал при компиляции, шаблоны (костыли компилятора) не нужны. Нужен компилятор, способный допереть, что вызов чистой функции от констант успешно заменяется подстановкой значения.
      Минус шаблонного крестоговна, выполняющегося при компиляции, заключается в том, что оно не переносится в период выполнения (параметры шаблона - константы, блять). В этом заключается великое уродство С++ - код, который должен делаться программой при выполнении и при компиляции, пишется на совсем разных языках, один из которых на самом деле нужен только как костыль для затыкания несовершенств компилятора.
      Ответить
      • >Я бы тоже парашу поставил. Нехер выёбываться. Да и если это первокур, то это он не сам написал.
        Да у тебя же БОРЛАНД.

        >Минус шаблонного крестоговна, выполняющегося при компиляции, заключается в том, что оно не переносится в период выполнения
        А вот тут http://govnokod.ru/7095 можно посмотреть охуительно красивое шаблонодельфиговно от гуры.
        Ответить
        • Перевод стрелок - такой тонкий аргумент.
          Ответить
    • После незначительных манипуляций может получиться программа "Fuck Tutorial"
      Ответить
    • 1. Просим прогу посчитать "fucktorial" 1000.
      2. Смотрим на эффект.
      3. Отправляем хитрую задницу, откуда пришла.
      4. ??????
      5. PROFIT!
      Ответить
      • Один из классических студенческих вариантов:
        int factorial (int num)
        {
         if (num==1)
          return 1;
         return factorial(num-1)*num; // recursive call
        }
        //...
        cout<<"Введите аргумент факториала: "<<endl;
        int fuckArg=0;
        cin>>fuckArg;
        cout<<"Результат: "<<factorial (fuckArg)<<endl;

        1. Просим прогу посчитать "fucktorial" 1000.
        2. Смотрим на эффект.
        3. Отправляем глупую задницу, откуда пришла.
        4. ??????
        5. PROFIT!
        Ответить
        • Только что проверил. Ваш вариант спокойно вернет 0 - что логично, если учесть, что все расчеты ведуться по модулю 2^32. А рассматриваемый говнокод получит SIGSEGV.
          К тому же, если компилятору сыпануть под хвост немного сольцы, то он рекурсию преобразует в цикл - стек ничего не почувствует.
          Ответить
          • >Ваш вариант спокойно вернет 0
            И это будет не верно.
            Ответить
            • Но предсказуемо и объяснимо. Сумеет объяснить, откуда взялся 0 - можно спокойно засчитывать задание. Не сумеет - на вкус препа.

              Да. Поскольку int знаковый и мы не будем кормить прогу отрицательными числами: она их не переварит - это устранимый минус; то можно считать, что счет идет по модулю 2^31.
              Ответить
              • Ага, а SIGSEGV не предсказуемо и не объяснимо...
                Ответить
                • Объяснимо, но не предсказуемо.
                  Ответить
                  • предсказуемо:
                    int *p=0; *p=0;
                    Ответить
                    • Не тот случай (выше речь о выходе за пределы массива). Да и на машине без защиты памяти запись по нулевому указателю не обязана убивать программу.
                      Ответить
                  • >Объяснимо, но не предсказуемо.
                    Ещё как предсказуемо. Не нужно быть Вангой, что-бы предсказать, что запись или чтение за границей массива неминуемо приведёт к падению программы, зависанию, выдаче не верных результатов или появлению эксплоита.
                    Ответить
                    • >запись или чтение за границей массива неминуемо приведёт к падению программы.
                      Не неминуемо. В том-то и проблема.
                      Этот говнокод у меня спокойно сказал, что 15! = 0.
                      Ответить
                      • Ну точку то, за словами падению программы , убери.
                        Ответить
                        • Уже не могу :(.
                          Неверно процитировал - mea culpa.
                          Прошу прощения.
                          Ответить
                          • Тоже, извиняюсь за неуважительно повелительную формулировку предложения.
                            Ответить
                            • - это что тут за повелительное наклонение???
                              - скажи спасибо, не наклонительное повеление...
                              Ответить
                    • Все варианты перечислили? ;)
                      Ответить
                      • Попробуйте предложить другие.
                        Ответить
                        • Отсутствие видимого эффекта. Зацикливание. Появление непредсказуемых и трудноуловимых глюков в другой части программы.
                          Ответить
                          • >Отсутствие видимого эффекта
                            В данной программе это не возможно. Всё остальное я перечислил.
                            Ответить
                            • И это возможно.
                              Ответить
                              • Признаюсь, да, но это так маловероятно, что-можно не брать в расчёт. Вероятность - 1/(2^32), но на самом деле и того меньше.
                                Ответить
                • Слющай, дарагой, ты кагда программу запюскаещь, SIGSEGV ждещь?
                  Ответить
        • * Просим прогу посчитать "fucktorial" 0.
          Fucked up?

          если уж и писать через рекурсию то так
          int fuckt (int num) { return (num>0) ? fuckt(num-1)*num : 1; }
          хотя и это неидеально
          Ответить
          • >если уж и писать через рекурсию то так
            Вы уверены, что здесь сработает оптимизация хвостовой рекурсии?
            Ответить
            • Она и в Вашем варианте не сработает. И тот, и другой - суть википедийный пример рекурсии, не являющейся хвостовой. Что не есть плохо: преобразованию в цикл оба варианта поддаются.
              Ответить
              • >Она и в Вашем варианте не сработает.
                Ну конечно. Кто-бы сомневался. Это же загугленный студенческий вариант.

                >если уж и писать через рекурсию то так
                Просто зачем говорить, что писать нужно так, когда это не оптимальный вариант, пожирающий стек? Если написать правильно с возможностью использования хвостовой рекурсии, тогда проблем то не будет.
                Ответить
                • Хвостовая рекурсия избавит от проблем, если пишешь на Scheme.
                  Если пишешь на C/C++, чем мы тут и занимаемся, то трудно гарантировать, что сделает и чего не сделает компилятор в плане оптимизации.
                  К примеру, "gcc -O0" не преобразует в цикл ни "тупой" рекурсивный факториал, ни факториал с хвостовой рекурсией, в полученном коде будут честные call'ы, стек будет честно пожран; а "gcc -O2" преобразует в цикл и хвостатый, и бесхвостый факториалы, в коде - ни единого call'а.
                  Никогда не понимал молящихся на хвостовую рекурсию.
                  Ответить
                  • >а "gcc -O2" преобразует в цикл и хвостатый, и бесхвостый факториалы
                    Ага и потом перенеси на другой компилятор и будет тебе счастье без хвоста в виде заполненного стека... Очевидно, же, что при использовании хвостовой оптимизации - шансы на оптимизацию больше под любым компилятором.

                    >"gcc -O0" не преобразует в цикл
                    Спасибо, КЕП. Ключ -O0 и так нам говорит об отключенной оптимизации.
                    Ответить
                    • О том и речь.
                      Ответить
                      • Речь о том, что использовать хвостовую оптимизацию рекурсии никогда не нужно.

                        А я считаю, что желательно, тем более что для данного примера это делается очень легко.
                        Ответить
                        • Для данного примера рекурсия вообще не нужна. И вообще, часто рекурсия заменима на цикл (с выигрышем), а где не заменима — там и разница невелика.

                          Это в языках, подобных C++. Кое-где рекурсия необходима.
                          Ответить
                          • >Для данного примера рекурсия вообще не нужна
                            Ну, думаю, кроме горе-студента, тут никто рекурсию использовать "не предлагал".
                            Ответить
                    • Очень правильно сказано: "шансы". Есть шансы, но нет гарантий. Поэтому если Вы так боитесь ненароком изнасиловать стек, то считайте факториал через цикл.

                      "gcc -O1" работает так же, как и "gcc -O0".
                      Ответить
                      • >но нет гарантий
                        Как раз таки, если писать с учётом оптимизации хвостовой рекурсии - гарантии есть.

                        А именно, если в документации к данному компилятору сказано, что хвостовая рекурсия оптимизируется, то она оптимизируется.

                        А если не использовать хвостовую оптимизацию, то это уже рулетка - либо оптимизирует либо нет (тут уже можно говорить о шансах).

                        Притом, хвостовую рекурсию в цикл преобразовывать компиляторы научились уже очень давно, так что шанс встретить компилятор без оптимизации хвостовой рекурсии стремиться к 0%.
                        Ответить
                        • > шанс встретить компилятор без оптимизации хвостовой рекурсии стремиться к 0%.
                          > стремиться
                          > ь

                          АХАХА
                          Ответить
                          • >АХАХА
                            - Вы при написании одного слова допустили одну ошибку.
                            - Какую же?
                            - Такого слова нет.
                            Ответить
                        • Зачем страдать рекурсией (и специально преобразовывать её к хвостовой, теряя даже читаемость), если явный цикл проще и надёжнее?
                          Ответить
                          • >если явный цикл проще
                            Я то согласен, но некоторые функциональщики так не считают.
                            Ответить
                          • Часто, рекурсивная запись, короче обычной. Этот аргумент и любят приводить функциональщики.
                            Ответить
                            • Но при преобразовании к хвостовой эта краткость теряется.
                              Ответить
        • Использовать big integer'ы надо. И mallocнутый стек вместо рекурсии. Тогда будет работать.
          Ответить
      • даже тому студенту было ясно что в инт больше 13! никак не влезет.
        Ответить
        • я бы сказал - больше 12!
          Ответить
          • да действительно.
            ну раз больше 12! не влезет, то больше 13! и подавно.
            Ответить
            • enum {MaxFucktorial=13};
              static int fucks[MaxFucktorial+1];
              Кстати, ошибка. Лишний элемент в массиве.
              Ответить
        • Он не понимает гораздо более фундаментальной вещи: некорректные данные от пользователя - не повод падать в кору.
          Сначала смотрим сквозь пальцы на отсутствие проверки, что обращение не вылазит за границы массива, а потом удивляемся, откуда появляется столько "дырявого" кода.
          Ответить
    • Годная лаба, побольше таких на говонокод.
      Ответить
      • Философский вопрос: можно ли засчитать лабу, если на govnokod'е за сутки она набрала >20 рейтинга и срач на >100 комментов?
        Ответить
        • Если лаба попала на говнокод засчитать ее смогут только на том же говнокоде.
          Ответить
    • какое-то ненастоящее говно
      Ответить
    • НЯшно!
      Ответить
    • У чувака уже гет!
      http://govnokod.ru/user/320
      Ответить
    • Отличное решение, я бы этого чувака даже на работу взял.
      А то что преподы навязывают свою точку зрения это зло, ибо все же в вузах должны в первую очередь учить думать, а уж потом давать знания. После таких преподов и выходят говнокодеры пачками, за которыми потом нужно постоянно следить.
      Ответить
    • показать все, что скрытоМда, печально наблюдать, как крестобляди дрочат на это бесполезное решение, которое по своей практической полезности сравнимо только с умением какать вверх ногами.
      Уже давно компиляторы научились считать константы при компиляции, а крестобляди по прежнему дрочат на шаблоны, которые никто, кроме них, прочитать не сможет (ну или сможет, только хорошенько курнув).
      Очень жаль, что мои мысли, которые я пытался тут высказать, потонули в крестоблядском кукареканьи о "нестандартном мышлении" и "отличном решении".
      Ответить
      • ну покажите альтернативу.
        Ответить
        • Обычная рекурсия или цикл.
          Ну и определить константный массив значений через эту функцию. Нормальный компилятор сам заменит вызовы на значения.
          Ответить
          • т.е. если я пишу на, например, на С#
            int[] a = new int[10];
                        a[0] = 1;
                        for (int i = 1; i < 10; i++)
                            a[i] = a[i - 1]*i;

            то в релизной сборке в мсиле я увижу константный масив(т.е. вычисления a[i - 1]*i точно не будет )??
            Ответить
            • Очевидно, так не прокатит.
              Ты должен написать функцию, возвращающую массив факториалов. И если ты напишешь const f = Get13Fucktorials; то значение f должен посчитать компилятор.
              Ответить
          • Пример (ЯП, компилятор, руководство когда я на такую оптимизацию могу рассчитывать) будет?
            Желательно не на хаскеле и не на другой функциональщине.
            Ответить
            • >и не на другой функциональщине
              Ну или хотя бы на функциональщине.
              Ответить
            • Толстый гномтролль, хватит срать в других ветках. Расскажи нам уже о "нормальных" компиляторах. Уж не фирмой борланд ли они сделаны?
              Ответить
              • Например, Интеловский С++ компилятор, как мне сказали, умеет это делать. Повторяю:

                Ты должен написать функцию (Get13Fucktorials), возвращающую массив факториалов (чисел от 0 до 12). И если ты напишешь const f = Get13Fucktorials; то значение f должен посчитать компилятор. Потому что внутри этой функции нет ничего, зависящего от данных, неизвестных компилятору.
                Ответить
                • >Интеловский С++ компилятор, как мне сказали, умеет это делать.
                  >Ты должен написать функцию (Get13Fucktorials), возвращающую массив факториалов
                  Да С++ вообще массивы без обёрток возвращать через return не умеет.
                  Ответить
                  • const int (&Get13Fucktorials() const)[12]
                    {
                    return array_;
                    }
                    Ответить
                    • Не верю.
                      Ответить
                      • Ссылку на массив функция возвращать может. Массив нет. Толку от этого всего правда тоже нет.

                        http://codepad.org/6rXsVh2H
                        Выводит 12.

                        #include <stdio.h>

                        const int (&getArray())[10] {
                        static int tmp[10] = {1,2,3,4,5,6,7,8,9,10};
                        return tmp;
                        }

                        int main() {
                        printf ("%d", getArray()[0]);
                        printf ("%d", getArray()[1]);

                        return 0;
                        }
                        Ответить
                        • >Толку от этого всего правда тоже нет.
                          Массив сложных объектов с отложенной инициализацией - как вариант использования данной конструкции.
                          Ответить
                      • и sizeof(getArray()) возвращает 10*sizeof(int)
                        Ответить
                  • Вот бы TheCalligrapher пришел, он точно знает!
                    Ответить
                    • Да, TheCalligrapher стандарт, по моему вообще наизусть знает... %)
                      Ответить
                • Документация сей отрадный факт подтверждающая будет будет?
                  Ответить
                  • Нет, не будет. Сам ищи, для С++ есть дохрена хитрых средств, умеющих делать анализ кода.
                    Ответить
                    • Вот и получается что твоя несомненно великая идея не понятно реализована ли вообще. Ни в С++ ни в Дельфях совершенно непонятно будет ли оно работать.

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

                        Хорошо, в крайнем случае я признаю, что шаблоны - это костыль, затыкающий несовершенства современных компиляторов. Признать их адекватным средством я никак не могу.

                        > В то время как метапрограммирование поритруемо

                        Оно не портируемо в период выполнения, понимаешь? Шаблоны умеют работать только с константами времени компиляции. А если я захочу, чтобы логика, которую выполняют шаблоны, делалась на основе вводимых данных, то что - облом? Понимаешь, это я привожу к мысли, которую не я сказал, что "очень плохо, что язык шаблонов С++ не совпадает с С++".
                        Если бы через constexpr было сделано - то нет проблем, на здоровье.

                        > явно выражает намерение программиста.

                        Может тогда на асме писать? Он куда явнее выражает немерения программиста.
                        Понимаешь, дело в том, что дело программиста - это написать код, который 1) понятен, 2) поддаётся оптимизации. Он НЕ ДОЛЖЕН оптимизировать код вручную! А шаблоны - это и есть оптимизация вручную. Можешь назвать их "преждевременной оптимизацией".
                        Ответить
                        • Тут я думаю надо уяснить. У тебя притенензии только к метапрограммированию или вообще к шаблонам?

                          1. Ну тогда дождись или напиши адекватный компилятор, потом обсирай метапрограммирование. За десятилетия описанный тобой функционал так и не был реализован и не известно будет ли. А пока метапрограммирование достойно существования.

                          2. Это естественно минус, но нужно думать где применять метопрограммирование и специалист должен быть с ним знаком. Например если нужны часто повторяющее вычисления, единственный адекватный способ это сделать - сгенерировать константы. По причине описанной выше - наиболее элегантный метод на сегодня -- это метрапрограммирование.

                          3. Нет лучше разработать ИДЕ с одной кнопкой "сделать заебись". Это самое главное намерение программиста. И главное думать не надо.
                          Ответить
                          • > У тебя притенензии только к метапрограммированию или вообще к шаблонам?

                            У меня претензии к использованию шаблонов для данной задачи.

                            > 1.

                            В этом направлении работы ведутся. constexpr уже есть, правда сильно ужатый. Сильно мешает низкоуровневое наследство С++ (оно всегда мешало и было мёртвым грузом на языке, и это основной его минус), которое затрудняет анализ кода.

                            2. Нет, можно генерировать константы извне (создать программу, создающую файл констант и запускающую компилятор), можно считать при старте программы. Любой крупный проект содержит нетривиальный запуск компилятора.
                            Далее, если эти шаблонные вычисления понадобятся для вводных (т.е.не известных компилятору) данных, то придётся всю логику продублировать. То есть шаблоны порождают повторяющийся код, и всё это ради (в худшемслучае) 1 милисекунды на старте программы, или (в лучшем) ради того, чтобы компилятор мучался с шаблонами вместо того, чтобы сразу вычислить значение функции, что намного проще.
                            А ручное дублирование кода - это, как известно, потенциальный источник ошибок. В С++ в некоторых случаях одно и то же дублируют трижды - на языке шаблонов (для принудительного переноса в стадию компиляции), на низкоуровневом языке (для скорости), на языкы контейнеров (для надёжности). Когда С++ники узнали, что в Паскале быстрый код отличается от безопасного только директивами компилятора, они дико фрустрировали, придумывая отмазки типа "раз проверки отключаемые, то значит Паскаль опаснее чем С++" и прочую лабуду и в стиле "раз в Форде Фокусе подушки безопасности можно открутить, то он не менее опасен, чем Москвич".

                            3. В будущем так и будет. Но константы на шаблонах - это прошлое, закопайте это, как когда-то закопали ручную замену умножения на сдвиг (которая нужна была только из-за несовершенства тогдашних компиляторов). И вообще, не надо считать себя умнее компилятора (тоже избитая мысля, да).
                            Ответить
                            • >С++ники дико фрустрировали
                              Когда такое было? :D
                              Ответить
                              • http://www.gamedev.ru/flame/forum/?id=148721&page=4#m56
                                Ответить
                                • Это дельфи или его владелец? :D
                                  http://www.gamedev.ru/flame/forum/?id=148721#m1

                                  зы: Прочтите название темы.
                                  Ответить
                            • Не верю глазам своим! TarasB, да пишет о С++ адекватно, со знанием дела?! Видать вспышки на Солнце, а может реактор какой рванул.
                              Ответить
                              • TarasB, за это время очень профессионально вырос. Не даром столько языков изучил, что-бы троллить знающих только С++ или только дельфи.

                                Вообще, всегда самые доставляющие споры о языках были в присутвии 2 парней с гейсдева:
                                pushkoff (С++ is best!!!11) и TarasB (Delphi is best!!!11)
                                Ответить
                                • меня помнят... прикольно. нужно почаще к вам заходить.
                                  а вообще я еще питон люблю, но он не очень холиварный язык...
                                  Ответить
                                  • Вас ещё ждут здесь:
                                    http://govnokod.ru/7204
                                    http://govnokod.ru/7149
                                    http://govnokod.ru/7131
                                    http://govnokod.ru/7114
                                    Ответить
                                    • Я думаю, под ником LinuxGovno сидит сам пушков. Потому себя и упомянул.
                                      Ответить
                                  • @pushkoff
                                    Как это Питон не холиварный? А как же жёсткий перенос строк и жёсткие отступы? В каком языке (кроме древнего Фортрана) ещё подобное есть?
                                    Ответить
                                    • А ещё неиссякаемый источник холивара «Как говорить: Питон или Пайтон?»

                                      И внезапно «PHP vs Python»:
                                      http://holywars.ru/comments/767
                                      Ответить
                                      • @inkanus-gray
                                        там одни веб девелоперы, я рассматриваю питон больше как средство автоматизации
                                        Ответить
                                    • ну там холиварить особо не с кем, все соперники либо не доросли, либо PHP. да я еще и не очень силен чтоб холиварить, многих библиотек не знаю
                                      Ответить
                                      • > либо не доросли, либо PHP
                                        почему "либо-либо"?
                                        Ответить
                                        • @bugmenot
                                          Вы так говорите, как будто на PHP нет серьёзных проектов.
                                          Ответить
                                          • inkanus-gray
                                            > @bugmenot
                                            я сначала хотел спросить, что за фигнюция перед ником, но потом догадался:
                                            http://i.imgur.com/OxYY5.jpg
                                            Ответить
                                            • bugmenot
                                              Да я тоже, когда впервые увидел этот символ в комментариях в Ютубе и в Твиттере, не мог догадаться, что это значит.

                                              Взятие адреса переменной же! Я же всегда говорил, что Паскаль намного читабельнее, чем Си++, где & может означать всё, что угодно.
                                              Ответить
                                            • дрочи@bugmenot
                                              Ответить
                            • 1. Ты всё про наработки, а не про результаты : ( Такими обещаниями можно кормить очень долго.

                              2. Такой подход тоже имеет недостатки. Усложняет систему сборки например, но имеет право на жизнь, на равне с метапрограммированием. Аргумент про ручное дублирование кода признаю, но его мало для отказа от метапрограммирования. Нужно проектировать систему грамотно и использовать метопрограсммирование там где такого дублирования не предвидится.

                              3. Cчитать себя умнее компилятора не надо, надо просто знать насколько он умён и на что способен. Когда тобой предложенная оптимизация станет дефакто стандартом (как rvo или copy elision) -- можешь начинать махать лопатой. А пока не надо.

                              ЗЫ. И в С++ быстрый от безопасного отличается тоже только директивами. Гугли "checked stl".
                              Ответить
      • я думаю, что срач именно за то, что чуваку поставили два. программа же работает? Если да, то это уже не два. А объяснить все плюсы\минусы данного подхода должен препод.

        И даже если данный подход просасывает по всем параметрам другим подходам, то всё равно надо его рассмотреть, чтобы знать, что так "можно, но не нужно"
        Ответить
        • 1. Есть сомнения, что программу писал он.
          2. В универе разве достаточно "лишь бы работало"?
          Ответить
          • 1. для этого можно задать несколько вопросов с целью проверить понимание того, что принес студент.
            2. для начала диалога, я думаю, что этого достаточно. а тут сразу двойку и подсрачник.
            Ответить
            • 2. Обращаешься к статическому массиву по индексу, взятому непосредственно от пользователя без всяких проверок - никаких "разговоров", "сразу двойку и подсрачник".
              Ответить
              • Насколько я понял из кода и описания, то препод послал ученика только за нестандартное решение задачи вычисления факториала, а не из-за реализацию всяких вспомогательных функций
                Ответить
                • Нет, позвольте.
                  1. То, что препод в данном случае не блеснул квалификацией, бесспорно. Но тем не менее, он принял верное решение, ниже раскрою, почему.
                  2. От ученистудента(!) потребовали написать факториал с использованием рекурсии (указано в описании). Т.е. цель была в том, чтобы студент продемонстрировал свое умение писать рекурсивные функции. Студент оного умения не продемонстрировал. В процессе вычисления рекурсивной функции может вызываться она сама. С т.з. C++ initFuckedValue<M, N>::fuckUp() и initFuckedValue<P, Q>::fuckUp() - разные функции, если (P!=M)||(Q!=N). А в этом говнокоде initFuckedValue<M, N>::fuckUp() зовет только initFuckedValue<M+1, Q>::fuckUp(), или ничего не зовет, если M=13. Т.е. при "вычислении" initFuckedValue<M, N>::fuckUp() сама она вызвана быть не может, факториал посчитан без использования рекурсии - условие задачи не выполнено.
                  3. Вы не находите эти const'ы очаровательными?
                  template<const int ValuePosition, const int Value>
                  struct initFuckedValue
                  {
                  /*...*/
                  };
                  А по мне они свидетельствуют о непонимании студентом плюсовых шаблонов.
                  4. К сожалению, в C, а за ним - и в C++, проверка корректности работы с памятью - не вспомогательная функция, а чуть ли не основное занятие программиста. Студент продемонстрировал, что корректно работать с памятью он не умеет.
                  5. Если посмотреть на время появления этого говнокода, то нетрудно догадаться: скоро экзаменационная сессия закончится, а студент все не может сдать лабу. Т.е. либо идиот, либо раззвездяй. А еще наверняка - будущий солдат, защитник Родины.

                  Это очень хороший говнокод, если бы его не было, его следовало бы придумать.
                  Ответить
                  • >Студент продемонстрировал, что корректно работать с памятью он не умеет.
                    Как?
                    Ответить
                    • Вот так:
                      1. Объявляем статический массив на 14 элементов:
                      enum {MaxFucktorial=13};
                      static int fucks[MaxFucktorial+1];

                      2. Запрашиваем у пользователя число:
                      int fuckArg=0;
                      	cin>>fuckArg;

                      3. Нигде и никак не проверяем, что же нам на самом деле подсунул пользователь.
                      4. Используем то, что нам подсунул пользователь, в качестве индекса при доступе в массив из пункта 1:
                      cout/*...*/<<"Результат: "<<fucks[fuckArg]<<endl;
                      Ответить
                      • Ну это скорее не работа с памятью, а отсутствие проверки ввода пользовательских данных. Такая всегда должна быть, если задачу пишешь не на выброс.

                        А студенты часто пишут на выброс, так что если он уже умеет проверять ввод пользователя, то можно и не делать её.

                        Задач много, а значит подходить нужно инженерно. Если проверка ввода не нужна, то и писать её не нужно.
                        Критерий нужности этой проверки:
                        1)Требует заказчик (а именно препод).
                        2)Все ещё не умеешь проверять ввод (а значит нужно научиться, а значит нужно писать).
                        Ответить
                        • Почти согласен: это не только неумение работать с памятью, но и отсутствие проверки пользовательского ввода. Все-таки проверка пользовательского ввода - это убедиться, что пользователь ввел а) целое число, б) неотрицательное целое число - т.е. факториал для введенных данных в принципе можно посчитать.
                          Ну а дальше следует убедиться, что факториал этого значения лежит в массивчике, а значит, имеет смысл за ним обратиться.

                          По поводу нужна/не нужна проверка скажу так: препод должен требовать ее наличие, если студент хочет больше "трояка".
                          Ответить
                          • >препод должен
                            Если студент это делал уже 100ню раз и умеет, то препод требовать не обязан, что-бы не отвлекаться на мелочи и сосредоточиться на главном для данного занятия.
                            Ответить
                            • Не могу молчать. Уже третий раз вижу "что-бы".
                              Ответить
                              • >Не могу молчать.
                                Болтун - находка для шпиона.
                                http://mtdata.ru/u13/photo7699/20625691520-0/big.jpeg
                                Ответить
                                • А теперь сравните кол-во писанины у себя и у меня :)
                                  Ответить
                                  • Одно по делу, а другое оффтоп.

                                    >А теперь сравните кол-во писанины у себя и у меня
                                    В какой темке вы хорошо расписали свою точку зрения, что-бы сравнить кол-во моих слов из этой темы с оной?
                                    Ответить
                                    • >В какой темке вы хорошо расписали свою точку зрения
                                      Есть много более интересных и захватывающих моментов в жизни. :)
                                      Ответить
                                      • Ну это вы предложили сравнить, не я:
                                        >А теперь сравните кол-во писанины
                                        Ответить
                              • >Уже третий раз вижу "что-бы"
                                Ну, а я видел это уже не 3, а много раз в Интернете, и что? Меня такие мелочи не волнуют. Есть много более интересных и захватывающих моментов в жизни.
                                Ответить
                                • Интернет - вообще помойка. А писАть надо правильно.
                                  Ответить
                                  • А зачем вы тогда в средине слова «писать» употребляете прописную букву?
                                    Ответить
                                    • >А зачем вы тогда в средине слова «писать» употребляете прописную букву?
                                      ударная гласная, дабы пресечь всякий сортирный юмор
                                      Ответить
                            • В описании фигурирует первокурсник. Он не мог создавать проверки пользовательского ввода сотню раз.
                              Судя по тому, что препод вынужден видеть его в конце июня, студент не утруждал себя работой в семестре.
                              Таких препод ДОЛЖЕН.
                              Ответить
                              • >Судя по тому, что препод вынужден видеть его в конце июня
                                Где такое сказано? Выложить говнокод могли с опозданием в 4 -месяца или -года, а может вообще придумали. Делайте выводы правильно, не додумывайте того, чего не было.
                                Ответить
                  • >>Вы не находите эти const'ы очаровательными?
                    Я нахожу что вы не понимаете для чего нужны const в шаблонах.
                    const int как тип не равен int
                    а вот const const int равен const int.
                    В этой задаче не играет значения. Но формально лучше писать const, иначе можно неплохо пролететь.
                    Ответить
                    • В свете этого (стандарт C++ 2003г.)
                      "14.1.5 The top-level cv-qualifiers on the template-parameter are ignored when determining its type."
                      я действительно не понимаю, зачем там const. И мне не стыдно в этом признаться.
                      Ответить
                      • показать все, что скрытоК чему вы сейчас выдержку из стандарта привели?

                        >не понимаю, И мне не стыдно
                        Мне стыдно за вас.
                        Ответить
                        • К тому, что
                          template<const int n> struct A {
                          };

                          и
                          template <int n> struct A {
                          };
                          по стандарту одно и то же. Т.е. const тут не нужен.
                          И g++ со стандартом и мной согласен.
                          Ответить
                  • >> Т.е. цель была в том, чтобы студент продемонстрировал свое умение писать рекурсивные функции
                    В метапрограммировании с++ шаблонные структуры называются мета функциями. В данном случае он сделал рекурсию основанную на мета функциях.
                    Ответить
                    • "Метафункция" в этом случае - термин неудачный, вводящий в заблуждение. Структуры в C++ могут показаться похожими на функции только издалека. Лучше называть ЭТО метафунктоидом.
                      Рекурсией на метафунктоидах была бы возможна, если бы метафунктоид мог позвать себя как метафунктоид. Но метафунктоид лишь описывает способ построения функтоида, соответствующего каким-то параметрам. Нельзя позвать метафунктоид - можно позвать функтоид. Т.е. "рекурсия на метафунктоидах" - еще один неудачный термин, вводящий в заблуждение.
                      К сожалению, развитие C++ идет по пути введения фич, которые издалека похожи на что-то уже имеющееся у других, и обозначения этих фич неудачными терминами.
                      Ответить
                      • Здесь имеет место быть рекурсивное инстанцирование шаблона. В задании не сказано, что рекурсия должна быть на вызовах функций. А раз так, то любая рекурсия подойдет :)
                        Ответить
          • 1. у нормального препода сомнений не будет - это видно сразу при беседе. кто преподавал или проводил собеседования меня поймут:)
            2. в общем-то да, как и практически везде.
            Ответить
    • >Вообщем я ему поставил 2."
      >я бы поставил ему 5.
      >я бы поставил ему 2.
      >я бы поставил 5
      Уважаемые, неужели нет других оценок, и к чему такая контрастность?
      Ставлю "4" : за реализацию на шаблонах и выебку с факами.
      Ответить
      • (2+5+2+5)/4
        получится скорее уд. чем хор.
        Ответить
        • Моя оценка самостоятельна. Она не есть среднее арифметическое из поставленных ранее другими людьми. Но даже если бы это было так, по правилам округления всё равно выходит 4 :-Р
          Ответить
          • это "по Гауссу" выходит хорошо, а так - не более чем удовлетворительно :-Р
            4 минус балл за незнание формулы муавра с константным временем даст тот же результат (хуи в индентификаторах мы как бы прощаем)
            Ответить
            • Где тут формула Муавра?
              Ответить
              • видимо, осталась на кафедре высшей математики, с которой афтора по ошибке выпустили с зачетом
                Ответить
                • Ещё раз: где в этом ГК можно вообще хоть как-нибудь применить формулу Муавра?
                  Ответить
                  • Можно. Если передавать в функцию не int, а float или лучше что-нибудь покомплексней.
                    Ответить
                    • Мне интересно. Можете показать пример реализации через эту формулу?
                      Ответить
                    • неа, не Муавра-Лапласа, а Муавра-Стирлинга
                      Ответить
                      • Эта формула, к сожалению, не даёт нужную точность, поскольку для неё известен предел не для разности, а только для отношения.
                        Например, это всё равно что вычислять x^2 по формуле x*(x+1). предел отношения по прежнему равен 1, но разность нифига не стремится к нулю, она стремится к бесконечности.
                        Ответить
                        • согласен, хотя практического применения точным факториалам не вижу
                          Ответить
                      • Это медленно по сравнению с табличным алгоритмом.
                        И да, мы знаем, что любую формулу можно разложить в ряд, аппроксимировать, интерполировать или экстраполировать.
                        А главное, не точно.
                        Ответить
                        • > любую формулу можно разложить в ряд
                          не любую

                          а консервы - вон они - http://oeis.org/A000142
                          Ответить
    • Нас_рали то как! Вот же говно! Бурление говн, какое то...
      Ответить
    • показать все, что скрытоИ так, подводим итоги говнопоста, судя по рейтингу 21 и комментам - это говнокод, а препод не компетентен.
      Ответить
      • В шаблонах, скорее всего, да. Но это не повод не получить неуд.
        Ответить
    • рекурсия есть. препод нуб

      по поводу крестоблядей - пг/тм 'нафф сэд

      кстати препод мог бы словить тонны лулзов, попросив студента объяснить как и почему работает его лаба
      Ответить
    • Кстати, хочу заметить, что когда коментов переваливает за сотню уже вовсе не удобно их читать новые. Надо с этим что-то делать.
      P.S. Страйкер, суппорт вообще как поживает и дальнейшие планы на жизнь?
      Ответить
      • http://govnokod.ru/page/feedback
        Ответить
        • Хочу сворачивающиеся ветки и диагностику модификации свернутой ветки.
          Ответить
      • Плохо поживает. Занимаюсь разработкой еще одного проекта. Про Говнокод.ру не забываю. Возможно, скоро в свет выйдет одна вкусность для него.
        Ответить
        • > Говнокод
          > вкусность
          очень надеюсь, что новая фича порадует не только говноедов
          Ответить
          • Да, гастрономические эпитеты тут не в тему.
            Ответить
        • Может стоит подумать о расширении группы разработчиков? А то ведь умрет красавец, как пить дать, если не подкармливать.
          Ответить
          • там какая-то странная лицензия, но, судя по мемберам, патчи принимаются
            Ответить
          • Если хотите помочь, то пожалуйста. У меня почти готова новая версия, остались только всякие мелочи там. Исходные коды видели?
            Ответить
            • В данном случае из меня будет не лучший помощник, вэб - не моя стихия. Но посмотреть могу :)
              Ответить
              • желающих новую фичу на сайт много, а помощников нет :)
                Напомнило http://www.netlore.ru/files/uploads/2007/05/manage1.jpg

                А вообще, я еще тот лентяй
                Ответить
    • Ну по факту препод верно сделал, т.к. задача была сделать факториал через обычную рекурсию времени исполнения, а не через метапрограммирование.

      Но по идее можно было бы поставить и пять, за нестандартный подход.
      Ответить
    • > И считает она уж слишком быстро
      Факториал 13 то? На сколько наносекунд, простите?
      Ответить
    • показать все, что скрытоvanished
      Ответить
    • показать все, что скрытоvanished
      Ответить

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