- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 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."
Да, это лаба. ^_^
Полностью согласен с преподавателем.
А идея у парня забить массив факториалами на этапе компиляции. тоже сойдёт. препод лох =)
и даже имя метода fuckUp() подходит, потому что считает фак-ториалы в восходящем порядке ;)
походу обычное ЧСВшное преподобыдло, которое слабо разбирается в предмете, который читает.
и это не галиматья
THIS IS FUCKTORIAAAAAAL!!!!
походу обычное ЧСВшное кодобыдло, которое слабо разбирается в коде, который пишет
либо выёбывающийся первокур
таким вот ставить двойки. потому что какой-то быдлостудент-первокур считает себя умнее дипломированого преподавателя.
а тем кто пишет через стандартно через рекурсию а-ля имплементация от LinuxGovno - пятерки
дал бы я Вам почитать историю, о том
как один студентик на экзамене по физике барометром высоту здания мерял, но мне влом искать.
http://govnokod.ru/7097#comment94257
Это не я написал. Загуглил студенческую. (=
Вычисление факториала на шаблонах нахуй не нужно в реальности, вот в чём дело.
>А если в медвузе студент на домашнем задании удалит пациенту гланды через задницу
какие удачные сравнения и весьма тонкие познания в жизни студентов медвуза и их пациентов.
рекомендую внимательно прочесть про случай с барометром.
http://www.bajena.com/ru/articles/1004/nils-bor/
а потом глянуть здесь например
http://ru.wikipedia.org/wiki/Бор,_Нильс
о его вкладе в науку и о тои как он по Вашим словам *довыебывался* до Нобелевской премии.
It works, bitches.
ну факториал ладно - нечего там отлаживать, а если чуть сложнее?)
при работе в команде предпочтительнее "быдлокодерский вариант", т.к. это позволяет хоть как-то упростить взаимозаменяемость программистов.
Некоторое время спустя гениям скорее дадут новую задачу (что им самим будет интереснее), а поддержку кода отдадут кому-нибудь - выгодно экономически.
От простоты кода в конечном итоге выигрывают все.
я бы поставил 5 (за идею, поощрить соображалку), но объяснил, почему не надо делать сложно там, где можно сделать просто, и что получится, если будешь излишне извращаться - будешь сидеть на одном и том же коде, т.к. никто другой его не осилит - оно надо?
шаблонное метапрограмирование это отдельная тема в с++. по ней между прочим книги пишут(см., например, Александреску "Современное проектирование на С++", David Abrahams and Aleksey Gurtovoy "C++ Template Metaprogramming").
Не суть в сложности, суть в том что используется это широко, и не знание этого вопроса говорит о некомпетентности в области с++.
Он вообще везде предпочтительней. У шаблонного варианта нет вообще никакого оправдания. Он по всем параметрам хуже нормального решения. И только тупые крестобляди дрочат на него, потому что "вау, оно типа сложное, в других языках так не сделать". В дрочении на бесполезную сложность заключается вся суть крестобляди.
Выдержки из известных цитат:
"Сложность использования повышает ЧСВ крестобляди до заоблачных высот"
"Умение героически преодолевать трудности, которые создает твой собственный инструмент, вместо того, чтобы решать непосредственно прикладную задачу"
Так что дело не в личности, а в содержании высказанного выше.
2. Наезды с++ников на дельфистов тоже политкорректностью никогда не отличались.
http://www.gamedev.ru/users/?id=45914
Забанили меня из-за одного ушлёпка, который сначала слюнями и матами всё забрызгал, потом, после того, как ему адекватно ответили, трусливо потёр свои посты (то есть он ещё и всех подставил).
Когда из бана выпустят?
Потому что на форуме ГД.ру платным участникам можно ВСЁ. Модератор-то их банить не может, а ведущий пока в одиночку со всеми платными участниками разберётся, ушлёпок уже свои посты потрёт.
Но просто где ещё можно найти народ игру потестить, про умные околоигровые вещи поговорить и так далее.
Говорит фриисофт программист со стажем?
Мне шаблон понравился, я по вашему крестоблядь? Нет, ну логика-то у вас одна:
> И только тупые крестобляди дрочат на него, потому что "вау, оно типа сложное, в других языках так не сделать". В дрочении на бесполезную сложность заключается вся суть крестобляди.
Да, мне шаблон понравился, что с того? Из этого, как я смотрю, вы можете сделать вывод (непонятно на чем основанный), что я дрочу на эти шаблоны ибо они есть только тут.
Идите нахуй, не парьте людям мозги. Хватит.
Что вы вообще забыли в данном треде, если людей, которые программируют на С++, называете крестоблядями? Проходите мимо тогда.
>Да и если это первокур, то это он не сам написал.
Откуда такие выводы, сударь?
>...прочие изливания по поводу других ЯП
Делайте лучше, раз уж вы умеете и знаете
А мне может нравится вырезать гланды через задницу, что с того? Но если мой ученик сделает то же самое, я не буду, как вы умиляться, "нестандартному мышлению", "ловкости рук" итд, я буду ему объяснять, что так делать нахуй не нужно, и что гланды надо вырывать так, как принято.
Так вот, шаблоны в этой задаче нахуй не нужны, они нужны только для выебонов, не давая никаких вообще преимуществ.
А пока что я в этой теме вижу дроч на то "как красиво он засунул руку со скальпелем в задницу и дотянулся до гланд".
> Что вы вообще забыли в данном треде, если людей, которые программируют на С++, называете крестоблядями?
Не всех. А только тех, что дрочит на его кривости, считая их преимуществами.
> Откуда такие выводы, сударь?
Для написания этого кода нужна квалификация сильно выше, чем средний уровень первокура.
Правда, надо сказать, что на бесплатном компиляторе это не прокатывает. То есть компилируется, но инициализируется только при запуске.
Платный я не проверял (он стоит дохрена), но никаких технических препятствий не вижу.
, да, того самого.
На нём будет также, ага.
Есть, фирмы, что её разрабатывают\спонсируют?
Есть ли у неё перспективы, и почему ты так думаешь?
Есть ли сборка мусора и опциональна ли она?
2. Да.
3. Да, т.к. 1,2,4
4. Да.
Ты бы лучше спросил, чего мне в ней не хватает.
А не хватает мне средств для JIT-компиляции, функций, создающих новые функции, и такого всякого.
Ну и ещё немного не хватает возможности писать глобальные процедуры в главном файле (для одноразовых программ полезно, чтобы не заводить 3 файла на простейший проект).
Ну и человечной среды.
То есть больше интересует, можно ли на любом классе использовать паттерн RAII. В том же C#, если полагаться на сборку мусора, то это не возможно сделать в тамашнем деструкторе (финализатор), только с использованием костыля dispose совместно с using.
Есть только фраза из описания языка:
То есть GC и RAII в одном приложении совмещать можно.
Кстати, ещё небольшой прикол стандарта - как только тип-указатель (объявленный локально) выходит из области видимости, то все переменные этого типа освобождают память (тоже детерминированно).
Может включает "сборку мусора" для указанного типа данных?
Понятно, то есть человек пришедший в универ имеет девственно чистый ум. Ладно. Вопросов к вам больше не имею, спасибо.
лишь в 5% действительно оправдано использование метапрограммирования, когда плюсы его использования превышают минусы - какое-никакое усложнение кода, т.е. увеличение себестоимости ПО.
При обучении же, нужно рассматривать оба варианта, показать плюсы, минусы каждого. Мой упрек преподу именно в том, что это не было сделано.
Расчёт констант при компиляции - это не тот случай.
>везде предпочтительнее "быдлокодерский вариант"
и оно по большей части ведется на божественных пасцалях/делфях, а не крестоблядстве дает видимые и ощутимые плоды.
стаи пхпешников и не только успешно решающих "прикладные задачи"
А так да, код вроде нормальный, но выпендрёжный. Решил студент над преподом поглумиться. :D
Я плакал.
Чтобы посчитать факториал при компиляции, шаблоны (костыли компилятора) не нужны. Нужен компилятор, способный допереть, что вызов чистой функции от констант успешно заменяется подстановкой значения.
Минус шаблонного крестоговна, выполняющегося при компиляции, заключается в том, что оно не переносится в период выполнения (параметры шаблона - константы, блять). В этом заключается великое уродство С++ - код, который должен делаться программой при выполнении и при компиляции, пишется на совсем разных языках, один из которых на самом деле нужен только как костыль для затыкания несовершенств компилятора.
Да у тебя же БОРЛАНД.
>Минус шаблонного крестоговна, выполняющегося при компиляции, заключается в том, что оно не переносится в период выполнения
А вот тут http://govnokod.ru/7095 можно посмотреть охуительно красивое шаблонодельфиговно от гуры.
2. Смотрим на эффект.
3. Отправляем хитрую задницу, откуда пришла.
4. ??????
5. PROFIT!
1. Просим прогу посчитать "fucktorial" 1000.
2. Смотрим на эффект.
3. Отправляем глупую задницу, откуда пришла.
4. ??????
5. PROFIT!
К тому же, если компилятору сыпануть под хвост немного сольцы, то он рекурсию преобразует в цикл - стек ничего не почувствует.
И это будет не верно.
Да. Поскольку int знаковый и мы не будем кормить прогу отрицательными числами: она их не переварит - это устранимый минус; то можно считать, что счет идет по модулю 2^31.
Ещё как предсказуемо. Не нужно быть Вангой, что-бы предсказать, что запись или чтение за границей массива неминуемо приведёт к падению программы, зависанию, выдаче не верных результатов или появлению эксплоита.
Не неминуемо. В том-то и проблема.
Этот говнокод у меня спокойно сказал, что 15! = 0.
Неверно процитировал - mea culpa.
Прошу прощения.
- скажи спасибо, не наклонительное повеление...
В данной программе это не возможно. Всё остальное я перечислил.
Fucked up?
если уж и писать через рекурсию то так
int fuckt (int num) { return (num>0) ? fuckt(num-1)*num : 1; }
хотя и это неидеально
Вы уверены, что здесь сработает оптимизация хвостовой рекурсии?
Ну конечно. Кто-бы сомневался. Это же загугленный студенческий вариант.
>если уж и писать через рекурсию то так
Просто зачем говорить, что писать нужно так, когда это не оптимальный вариант, пожирающий стек? Если написать правильно с возможностью использования хвостовой рекурсии, тогда проблем то не будет.
Если пишешь на C/C++, чем мы тут и занимаемся, то трудно гарантировать, что сделает и чего не сделает компилятор в плане оптимизации.
К примеру, "gcc -O0" не преобразует в цикл ни "тупой" рекурсивный факториал, ни факториал с хвостовой рекурсией, в полученном коде будут честные call'ы, стек будет честно пожран; а "gcc -O2" преобразует в цикл и хвостатый, и бесхвостый факториалы, в коде - ни единого call'а.
Никогда не понимал молящихся на хвостовую рекурсию.
Ага и потом перенеси на другой компилятор и будет тебе счастье без хвоста в виде заполненного стека... Очевидно, же, что при использовании хвостовой оптимизации - шансы на оптимизацию больше под любым компилятором.
>"gcc -O0" не преобразует в цикл
Спасибо, КЕП. Ключ -O0 и так нам говорит об отключенной оптимизации.
А я считаю, что желательно, тем более что для данного примера это делается очень легко.
Это в языках, подобных C++. Кое-где рекурсия необходима.
Ну, думаю, кроме горе-студента, тут никто рекурсию использовать "не предлагал".
"gcc -O1" работает так же, как и "gcc -O0".
Как раз таки, если писать с учётом оптимизации хвостовой рекурсии - гарантии есть.
А именно, если в документации к данному компилятору сказано, что хвостовая рекурсия оптимизируется, то она оптимизируется.
А если не использовать хвостовую оптимизацию, то это уже рулетка - либо оптимизирует либо нет (тут уже можно говорить о шансах).
Притом, хвостовую рекурсию в цикл преобразовывать компиляторы научились уже очень давно, так что шанс встретить компилятор без оптимизации хвостовой рекурсии стремиться к 0%.
> стремиться
> ь
АХАХА
- Вы при написании одного слова допустили одну ошибку.
- Какую же?
- Такого слова нет.
Я то согласен, но некоторые функциональщики так не считают.
ну раз больше 12! не влезет, то больше 13! и подавно.
Сначала смотрим сквозь пальцы на отсутствие проверки, что обращение не вылазит за границы массива, а потом удивляемся, откуда появляется столько "дырявого" кода.
http://govnokod.ru/user/320
А то что преподы навязывают свою точку зрения это зло, ибо все же в вузах должны в первую очередь учить думать, а уж потом давать знания. После таких преподов и выходят говнокодеры пачками, за которыми потом нужно постоянно следить.
Уже давно компиляторы научились считать константы при компиляции, а крестобляди по прежнему дрочат на шаблоны, которые никто, кроме них, прочитать не сможет (ну или сможет, только хорошенько курнув).
Очень жаль, что мои мысли, которые я пытался тут высказать, потонули в крестоблядском кукареканьи о "нестандартном мышлении" и "отличном решении".
Ну и определить константный массив значений через эту функцию. Нормальный компилятор сам заменит вызовы на значения.
то в релизной сборке в мсиле я увижу константный масив(т.е. вычисления a[i - 1]*i точно не будет )??
Ты должен написать функцию, возвращающую массив факториалов. И если ты напишешь const f = Get13Fucktorials; то значение f должен посчитать компилятор.
Желательно не на хаскеле и не на другой функциональщине.
Ну или хотя бы на функциональщине.
Ты должен написать функцию (Get13Fucktorials), возвращающую массив факториалов (чисел от 0 до 12). И если ты напишешь const f = Get13Fucktorials; то значение f должен посчитать компилятор. Потому что внутри этой функции нет ничего, зависящего от данных, неизвестных компилятору.
>Ты должен написать функцию (Get13Fucktorials), возвращающую массив факториалов
Да С++ вообще массивы без обёрток возвращать через return не умеет.
{
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;
}
Массив сложных объектов с отложенной инициализацией - как вариант использования данной конструкции.
В то время как метапрограммирование поритруемо, гарантирует выполнение на этапе компиляции, явно выражает намерение программиста.
Хорошо, в крайнем случае я признаю, что шаблоны - это костыль, затыкающий несовершенства современных компиляторов. Признать их адекватным средством я никак не могу.
> В то время как метапрограммирование поритруемо
Оно не портируемо в период выполнения, понимаешь? Шаблоны умеют работать только с константами времени компиляции. А если я захочу, чтобы логика, которую выполняют шаблоны, делалась на основе вводимых данных, то что - облом? Понимаешь, это я привожу к мысли, которую не я сказал, что "очень плохо, что язык шаблонов С++ не совпадает с С++".
Если бы через constexpr было сделано - то нет проблем, на здоровье.
> явно выражает намерение программиста.
Может тогда на асме писать? Он куда явнее выражает немерения программиста.
Понимаешь, дело в том, что дело программиста - это написать код, который 1) понятен, 2) поддаётся оптимизации. Он НЕ ДОЛЖЕН оптимизировать код вручную! А шаблоны - это и есть оптимизация вручную. Можешь назвать их "преждевременной оптимизацией".
1. Ну тогда дождись или напиши адекватный компилятор, потом обсирай метапрограммирование. За десятилетия описанный тобой функционал так и не был реализован и не известно будет ли. А пока метапрограммирование достойно существования.
2. Это естественно минус, но нужно думать где применять метопрограммирование и специалист должен быть с ним знаком. Например если нужны часто повторяющее вычисления, единственный адекватный способ это сделать - сгенерировать константы. По причине описанной выше - наиболее элегантный метод на сегодня -- это метрапрограммирование.
3. Нет лучше разработать ИДЕ с одной кнопкой "сделать заебись". Это самое главное намерение программиста. И главное думать не надо.
У меня претензии к использованию шаблонов для данной задачи.
> 1.
В этом направлении работы ведутся. constexpr уже есть, правда сильно ужатый. Сильно мешает низкоуровневое наследство С++ (оно всегда мешало и было мёртвым грузом на языке, и это основной его минус), которое затрудняет анализ кода.
2. Нет, можно генерировать константы извне (создать программу, создающую файл констант и запускающую компилятор), можно считать при старте программы. Любой крупный проект содержит нетривиальный запуск компилятора.
Далее, если эти шаблонные вычисления понадобятся для вводных (т.е.не известных компилятору) данных, то придётся всю логику продублировать. То есть шаблоны порождают повторяющийся код, и всё это ради (в худшемслучае) 1 милисекунды на старте программы, или (в лучшем) ради того, чтобы компилятор мучался с шаблонами вместо того, чтобы сразу вычислить значение функции, что намного проще.
А ручное дублирование кода - это, как известно, потенциальный источник ошибок. В С++ в некоторых случаях одно и то же дублируют трижды - на языке шаблонов (для принудительного переноса в стадию компиляции), на низкоуровневом языке (для скорости), на языкы контейнеров (для надёжности). Когда С++ники узнали, что в Паскале быстрый код отличается от безопасного только директивами компилятора, они дико фрустрировали, придумывая отмазки типа "раз проверки отключаемые, то значит Паскаль опаснее чем С++" и прочую лабуду и в стиле "раз в Форде Фокусе подушки безопасности можно открутить, то он не менее опасен, чем Москвич".
3. В будущем так и будет. Но константы на шаблонах - это прошлое, закопайте это, как когда-то закопали ручную замену умножения на сдвиг (которая нужна была только из-за несовершенства тогдашних компиляторов). И вообще, не надо считать себя умнее компилятора (тоже избитая мысля, да).
Когда такое было? :D
http://www.gamedev.ru/flame/forum/?id=148721#m1
зы: Прочтите название темы.
Вообще, всегда самые доставляющие споры о языках были в присутвии 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
Как это Питон не холиварный? А как же жёсткий перенос строк и жёсткие отступы? В каком языке (кроме древнего Фортрана) ещё подобное есть?
И внезапно «PHP vs Python»:
http://holywars.ru/comments/767
там одни веб девелоперы, я рассматриваю питон больше как средство автоматизации
почему "либо-либо"?
Вы так говорите, как будто на PHP нет серьёзных проектов.
> @bugmenot
я сначала хотел спросить, что за фигнюция перед ником, но потом догадался:
http://i.imgur.com/OxYY5.jpg
Да я тоже, когда впервые увидел этот символ в комментариях в Ютубе и в Твиттере, не мог догадаться, что это значит.
Взятие адреса переменной же! Я же всегда говорил, что Паскаль намного читабельнее, чем Си++, где & может означать всё, что угодно.
2. Такой подход тоже имеет недостатки. Усложняет систему сборки например, но имеет право на жизнь, на равне с метапрограммированием. Аргумент про ручное дублирование кода признаю, но его мало для отказа от метапрограммирования. Нужно проектировать систему грамотно и использовать метопрограсммирование там где такого дублирования не предвидится.
3. Cчитать себя умнее компилятора не надо, надо просто знать насколько он умён и на что способен. Когда тобой предложенная оптимизация станет дефакто стандартом (как rvo или copy elision) -- можешь начинать махать лопатой. А пока не надо.
ЗЫ. И в С++ быстрый от безопасного отличается тоже только директивами. Гугли "checked stl".
И даже если данный подход просасывает по всем параметрам другим подходам, то всё равно надо его рассмотреть, чтобы знать, что так "можно, но не нужно"
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'ы очаровательными?
А по мне они свидетельствуют о непонимании студентом плюсовых шаблонов.
4. К сожалению, в C, а за ним - и в C++, проверка корректности работы с памятью - не вспомогательная функция, а чуть ли не основное занятие программиста. Студент продемонстрировал, что корректно работать с памятью он не умеет.
5. Если посмотреть на время появления этого говнокода, то нетрудно догадаться: скоро экзаменационная сессия закончится, а студент все не может сдать лабу. Т.е. либо идиот, либо раззвездяй. А еще наверняка - будущий солдат, защитник Родины.
Это очень хороший говнокод, если бы его не было, его следовало бы придумать.
Как?
1. Объявляем статический массив на 14 элементов:
2. Запрашиваем у пользователя число:
3. Нигде и никак не проверяем, что же нам на самом деле подсунул пользователь.
4. Используем то, что нам подсунул пользователь, в качестве индекса при доступе в массив из пункта 1:
А студенты часто пишут на выброс, так что если он уже умеет проверять ввод пользователя, то можно и не делать её.
Задач много, а значит подходить нужно инженерно. Если проверка ввода не нужна, то и писать её не нужно.
Критерий нужности этой проверки:
1)Требует заказчик (а именно препод).
2)Все ещё не умеешь проверять ввод (а значит нужно научиться, а значит нужно писать).
Ну а дальше следует убедиться, что факториал этого значения лежит в массивчике, а значит, имеет смысл за ним обратиться.
По поводу нужна/не нужна проверка скажу так: препод должен требовать ее наличие, если студент хочет больше "трояка".
Если студент это делал уже 100ню раз и умеет, то препод требовать не обязан, что-бы не отвлекаться на мелочи и сосредоточиться на главном для данного занятия.
Болтун - находка для шпиона.
>А теперь сравните кол-во писанины у себя и у меня
В какой темке вы хорошо расписали свою точку зрения, что-бы сравнить кол-во моих слов из этой темы с оной?
Есть много более интересных и захватывающих моментов в жизни. :)
>А теперь сравните кол-во писанины
Ну, а я видел это уже не 3, а много раз в Интернете, и что? Меня такие мелочи не волнуют. Есть много более интересных и захватывающих моментов в жизни.
ударная гласная, дабы пресечь всякий сортирный юмор
Судя по тому, что препод вынужден видеть его в конце июня, студент не утруждал себя работой в семестре.
Таких препод ДОЛЖЕН.
Где такое сказано? Выложить говнокод могли с опозданием в 4 -месяца или -года, а может вообще придумали. Делайте выводы правильно, не додумывайте того, чего не было.
Я нахожу что вы не понимаете для чего нужны const в шаблонах.
const int как тип не равен int
а вот const const int равен const int.
В этой задаче не играет значения. Но формально лучше писать const, иначе можно неплохо пролететь.
"14.1.5 The top-level cv-qualifiers on the template-parameter are ignored when determining its type."
я действительно не понимаю, зачем там const. И мне не стыдно в этом признаться.
>не понимаю, И мне не стыдно
Мне стыдно за вас.
и
по стандарту одно и то же. Т.е. const тут не нужен.
И g++ со стандартом и мной согласен.
В метапрограммировании с++ шаблонные структуры называются мета функциями. В данном случае он сделал рекурсию основанную на мета функциях.
Рекурсией на метафунктоидах была бы возможна, если бы метафунктоид мог позвать себя как метафунктоид. Но метафунктоид лишь описывает способ построения функтоида, соответствующего каким-то параметрам. Нельзя позвать метафунктоид - можно позвать функтоид. Т.е. "рекурсия на метафунктоидах" - еще один неудачный термин, вводящий в заблуждение.
К сожалению, развитие C++ идет по пути введения фич, которые издалека похожи на что-то уже имеющееся у других, и обозначения этих фич неудачными терминами.
2. в общем-то да, как и практически везде.
>я бы поставил ему 5.
>я бы поставил ему 2.
>я бы поставил 5
Уважаемые, неужели нет других оценок, и к чему такая контрастность?
Ставлю "4" : за реализацию на шаблонах и выебку с факами.
получится скорее уд. чем хор.
4 минус балл за незнание формулы муавра с константным временем даст тот же результат (хуи в индентификаторах мы как бы прощаем)
Например, это всё равно что вычислять x^2 по формуле x*(x+1). предел отношения по прежнему равен 1, но разность нифига не стремится к нулю, она стремится к бесконечности.
И да, мы знаем, что любую формулу можно разложить в ряд, аппроксимировать, интерполировать или экстраполировать.
А главное, не точно.
не любую
а консервы - вон они - http://oeis.org/A000142
Блин, попался...
>а консервы
Спасибо, уже не нужно.
http://i.imgur.com/UuiZx.jpg
Мы знаем.
по поводу крестоблядей - пг/тм 'нафф сэд
кстати препод мог бы словить тонны лулзов, попросив студента объяснить как и почему работает его лаба
P.S. Страйкер, суппорт вообще как поживает и дальнейшие планы на жизнь?
> вкусность
очень надеюсь, что новая фича порадует не только говноедов
Напомнило http://www.netlore.ru/files/uploads/2007/05/manage1.jpg
А вообще, я еще тот лентяй
Но по идее можно было бы поставить и пять, за нестандартный подход.
Факториал 13 то? На сколько наносекунд, простите?