Для решения любой конкретной задачи такого уровня достаточно базового знания C. Проверить знание конкретных особенностей языка, причём особенностей нетривиальных ("как отличается вывод типа auto от decltype"), таким образом нельзя.
P.S. И зачем пользоваться этим самопальным ужасом, если есть, скажем, project euler, если уж хочется набрать задачек поинтересней.
Re[2]: Тест по базовому C++ -- интересно ваше мнение
Здравствуйте, sergz, Вы писали:
S>Если же это сродни абсрактному чтению Страуструпа (там тоже в конце каждой главы списочек занимательных вопросов), то это кошмар.
У Страуструпа есть книга для новичков — Programming -- Principles and Practice Using C++ — там никакого "C First". Например std::vector вводится на ~100 странице, а new/delete на ~500 — в середине книги.
Здравствуйте, Tilir, Вы писали:
T>В связи с чем хочу выложить этот тест для местной общественности. Может будут какие-нибудь предложения, замечания, всё такое.
Здравствуйте, Tilir, Вы писали:
T>В связи с чем хочу выложить этот тест для местной общественности. Может будут какие-нибудь предложения, замечания, всё такое.
Текст у вас какой-то не связный. Например: "Примечание: в принципе его можно заставить работать для всех этих типов серией промежуточных typedef. "
Пропущено 'с помощью'?
"заголовочник" — это официальный термин?
И, разумеется, вы понимаете, что в Q8 правильный ответ: "4) Даже не скомпилируется"?;
И вообще, примеры кода настолько ужасны, что их хочется не решать, а просто выкинуть.
И каждый день — без права на ошибку...
Re[2]: Тест по базовому C++ -- интересно ваше мнение
Я когда-то сдавал тест по С на brainbench (когда он еще был tekmetriks, а тест был бесплатный). Давно это было, в прошлом веке. Опыт программирования на С на от момент — лет 5-7.
Весьма похоже. Та же попытка ловить на всяких buffer overrun, других видах UB , знании мельчайших подробностей синтаксиса, хитроумных конструкциях и т.п.
Основной вопрос — на кого это рассчитано ? Если на человека,который давно уже программирует на С, то этот тест имеет право на существование. Пусть он сам себя проверит, в состоянии ли он найти тут подвох. Он во все эти ситуации, несомненно, и сам не раз попадал, и из них выпутывался, ну вот пусть и оценит.
А вот дл обучения — ИМХО совершенно не годится. Так можно только всякий интерес отбить. Учить надо, как тут уже писали, тем средствам, которые в языке реально применяются.
With best regards
Pavel Dvorkin
Re[3]: Тест по базовому C++ -- интересно ваше мнение
Здравствуйте, Tilir, Вы писали:
BFE>>И, разумеется, вы понимаете, что в Q8 правильный ответ: "4) Даже не скомпилируется"?; T>Очень интересно. По какой же причине это может не скомпилироваться?
У функции int foo() отсутствует return
И каждый день — без права на ошибку...
Re[4]: Тест по базовому C++ -- интересно ваше мнение
Здравствуйте, Tilir, Вы писали:
T>Да, я имею обыкновение выкладывать свои материалы здесь. И что? Хороший форум, всегда можно услышать много интересного =))
Суть в том, что мой комментарий к вашему предыдущему тесту по большей части можно отнести и к этому. Снова "представьте, что вы — компилятор" и переменные из 1 буквы.
VTT>>Да, и почему вы выделяете ООП как фичу С++?
T>Не выделяю. Но им никто никогда не читал ООП. Вот я и начну. Но сначала заполировать то C-подмножество которое они уже знают, научить использовать enum и const, шаблоны и inline, отучить от препроцессора -- полезная грунтовка холста.
Мне кажется, что пописав на С в ООП стиле (и осознав пользу от этого) переход на С++ с его встроенной поддержкой ООП сразу даст почувствовать комфорт (относительный).
Говорить дальше не было нужды. Как и все космонавты, капитан Нортон не испытывал особого доверия к явлениям, внешне слишком заманчивым.
Re[2]: Тест по базовому C++ -- интересно ваше мнение
Здравствуйте, Pavel Dvorkin, Вы писали:
PD>Основной вопрос — на кого это рассчитано ? Если на человека,который давно уже программирует на С, то этот тест имеет право на существование. Пусть он сам себя проверит, в состоянии ли он найти тут подвох. Он во все эти ситуации, несомненно, и сам не раз попадал, и из них выпутывался, ну вот пусть и оценит.
У меня был, кстати, вариант теста по языку C, который я передумал давать студентам, потому что получилось действительно на профессионала (с моей точки зрения). Поэтому я могу вам показать как я себе представляю тест для профессионала. Как-то так.
А исходный тестик в топике ни у кого интерес не отбивает. Как раз наоборот, студенты с энтузиазмом лезут в закоулки языка, ещё и оттаскивать приходится. И потом, когда начинаются действительно сложные вещи, связанные с ООП и шаблонами, где ловушек куда больше и они гораздо менее бесхитростны, у ребят уже накоплен опыт исследования, позволяющий разбираться в таких вещах и не бояться их.
Короче developers born brave, а тут на RSDN, как я погляжу, этот дух утерян.
Re[3]: Тест по базовому C++ -- интересно ваше мнение
Здравствуйте, Tilir, Вы писали:
T>А исходный тестик в топике ни у кого интерес не отбивает. Как раз наоборот, студенты с энтузиазмом лезут в закоулки языка, ещё и оттаскивать приходится. И потом, когда начинаются действительно сложные вещи, связанные с ООП и шаблонами, где ловушек куда больше и они гораздо менее бесхитростны, у ребят уже накоплен опыт исследования, позволяющий разбираться в таких вещах и не бояться их.
T>Короче developers born brave, а тут на RSDN, как я погляжу, этот дух утерян.
Основаная проблема в "C First" подходе (или подобных) не в том что изучаются какие-то тёмные закоулки, а в том что они изучаются с самого начла.
Re[4]: Тест по базовому C++ -- интересно ваше мнение
Здравствуйте, Evgeny.Panasyuk, Вы писали:
EP>Основаная проблема в "C First" подходе (или подобных) не в том что изучаются какие-то тёмные закоулки, а в том что они изучаются с самого начла.
Язык C гораздо проще и студенты ему уже научены, написали на C много программ и вообще он им нравится. И, кстати, мне сишечка тоже очень нравится.
Первая (нетривиальная) проблема -- это убедить их, что C++ вообще нужен. Для этого переход должен быть as smooth as possible. Сразу ошарашивать их контейнерами и итераторами -- создастся впечатление вообще другого языка. А это не так. Язык тот же, только с бубенцами.
Re[3]: Тест по базовому C++ -- интересно ваше мнение
Здравствуйте, Tilir, Вы писали:
T>А исходный тестик в топике ни у кого интерес не отбивает. Как раз наоборот, студенты с энтузиазмом лезут в закоулки языка, ещё и оттаскивать приходится. И потом, когда начинаются действительно сложные вещи, связанные с ООП и шаблонами, где ловушек куда больше и они гораздо менее бесхитростны, у ребят уже накоплен опыт исследования, позволяющий разбираться в таких вещах и не бояться их.
Я с самой концепцией вполне согласен. С++ — не C# и не Ява, чтобы писать только с помощью STL, а от указателей шарахаться как черт от ладана. Писать без указателей, конечно, можно, и можно философствовать о том, что с голыми указателями сейчас не пишут, но если все же эти указатели не понимать, и не знать основ С, то эти указатели однажды все равно вылезут боком для этого С++ — программиста.
T>Короче developers born brave, а тут на RSDN, как я погляжу, этот дух утерян.
Не на RSDN. Гораздо шире.
Когда я читаю порой то, что пишут о безопасности средств языка — у меня складывается впечатление, что основной задачей является не написать программу, а , упаси бог, не сделать ошибку.
With best regards
Pavel Dvorkin
Re[3]: Тест по базовому C++ -- интересно ваше мнение
Здравствуйте, Tilir, Вы писали:
T>У меня был, кстати, вариант теста по языку C, который я передумал давать студентам, потому что получилось действительно на профессионала (с моей точки зрения). Поэтому я могу вам показать как я себе представляю тест для профессионала. Как-то так.
Блин, он проще
Re[5]: Тест по базовому C++ -- интересно ваше мнение
Здравствуйте, Tilir, Вы писали:
T>Первая (нетривиальная) проблема -- это убедить их, что C++ вообще нужен. Для этого переход должен быть as smooth as possible. Сразу ошарашивать их контейнерами и итераторами -- создастся впечатление вообще другого языка. А это не так. Язык тот же, только с бубенцами.
Вообще-то язык другой, только с общими элементами и частично похожим синтаксисом. И убедить, что плюсы нужны, тренируя на кастах в С-стиле и макросах, это и правда сложная задача, уважаю.
Переубедить Вас, к сожалению, мне не удастся, поэтому сразу перейду к оскорблениям.
Re[4]: Тест по базовому C++ -- интересно ваше мнение
Здравствуйте, VTT, Вы писали:
VTT>Мне кажется, что пописав на С в ООП стиле (и осознав пользу от этого) переход на С++ с его встроенной поддержкой ООП сразу даст почувствовать комфорт (относительный).
Пописав на C в ООП-стиле (GTK и всё такое) можно только возненавидеть ООП, ничего больше. Я в лекциях (уже в разделе ООП) разбираю реализацию виртуальных функций на C, но в этом году я планирую выкинуть это место из лекций. Оно слишком ужасно даже на мой вкус.
C++ ради ООП (и я объясняю это своим студентам) приносит две жертвы, и это очень серьёзные жертвы.
Во-первых C++ жертвует гарантией сохранности имен в ассемблере целевой архитектуры. Это позволяет делать функции функциями-членами. А кроме того позволяет пространства имён, перегрузку, шаблоны функций и прочие вытребеньки.
Во-вторых C++ жертвует гарантиями по расположению полей структуры в памяти. Это позволяет вводить private и protected данные.
Обе эти жертвы можно не приносить, если ограничиваться extern "C" функциями и POD-типами.
Но если они принесены, мы должны осознавать что именно мы получаем взамен. Мы получаем полноценное ООП.
Именно поэтому, когда меня спрашивают что самое главное Строструп добавил в C, я всегда отвечаю: он не добавил. Он выкинул две важнейшие гарантии этого языка. Остальное после этого получилось само и ООП -- только частный случай того, что получилось.
Re[6]: Тест по базовому C++ -- интересно ваше мнение
Здравствуйте, Ops, Вы писали:
Ops>Вообще-то язык другой, только с общими элементами и частично похожим синтаксисом. И убедить, что плюсы нужны, тренируя на кастах в С-стиле и макросах, это и правда сложная задача, уважаю.
Вообще-то C включен в C++ по нормативной ссылке. Увы для ваших фантазий, но это по определению ISO тот же язык, только с некоторыми дополнительными возможностями. И человеку, который до этого год писал на макросах, нужно внятно объяснить чем шаблоны лучше макросов -- для этого сравнив их с макросами. Также объяснить чем константы и перечисления лучше макросов, объяснить зачем нужны пространства имён (и убедить что они вообще нужны, помню самого себя мне пришлось в этом убеждать около года), etc.
Что до кастов, то тут работает моя привычка объяснять вещи цельными кусками, чтобы не сбиваться на мелочи. Я объясняю все касты сразу -- но только к тому моменту, когда студенты готовы понять что такое dynamic_cast (самый сложный из всех). Так что это в будущем. Недельки через три-четыре доползем, я полагаю. Аналогично new/delete вместо malloc/free/realloc я объясняю не раньше, чем студенты становятся способны осознать все десять отличий первого от второго.
Re[7]: Тест по базовому C++ -- интересно ваше мнение
Здравствуйте, Tilir, Вы писали:
T>Вообще-то C включен в C++ по нормативной ссылке.
Ага, только по общему подмножеству языков 20 страниц несовместимостей. Непосредственно включена только библиотека, и то, с другими именами заголовков. T>Увы для ваших фантазий, но это по определению ISO тот же язык,
Можно пункт стандарта? А то
C ++ is a general purpose programming language based on the C programming language
совсем о другом говорит. T>только с некоторыми дополнительными возможностями.
Этих "некоторых дополнительных возможностей" больше половины. T>И человеку, который до этого год писал на макросах, нужно внятно объяснить чем шаблоны лучше макросов -- для этого сравнив их с макросами.
А шаблоны не лучше макросов, шаблоны просто другие. T>Также объяснить чем константы и перечисления лучше макросов, объяснить зачем нужны пространства имён (и убедить что они вообще нужны, помню самого себя мне пришлось в этом убеждать около года), etc.
Плохо с принятием новых идей и проекция этого на студентов?
T>Что до кастов, то тут работает моя привычка объяснять вещи цельными кусками, чтобы не сбиваться на мелочи. Я объясняю все касты сразу -- но только к тому моменту, когда студенты готовы понять что такое dynamic_cast (самый сложный из всех).
Там помимо синтаксиса есть интересные моменты. В целом в плюсах касты нужны реже, но это если не подходить к ним как к С. T>Так что это в будущем. Недельки через три-четыре доползем, я полагаю. Аналогично new/delete вместо malloc/free/realloc я объясняю не раньше, чем студенты становятся способны осознать все десять отличий первого от второго.
Какие еще 10 отличий, зачем они? Такое впечатление, что не язык учат, а гномиков переворачивать.
Переубедить Вас, к сожалению, мне не удастся, поэтому сразу перейду к оскорблениям.
Re[8]: Тест по базовому C++ -- интересно ваше мнение