Я буду наставником команды старшеклассников для ПЕРВОГО соревнования по робототехнике, большинство команд здесь разрабатывают [свое программное обеспечение для роботов с использованием C ++. Для многих студентов в команде это будет их первое знакомство с программированием. Я бы не выбрал C ++ для обучения программированию старшеклассников (например, Python или Javascript было бы проще, я думаю), но выбор установлен.
Я хочу научить их правильному C ++ (то есть избегать смешанного диалекта C / C ++, то есть C +), но я не хочу пугать их излишней сложностью. В этом отношении:
- Должен ли я начать использовать STL с первого дня, особенно
vector
или просто придерживаться стандартных массивов? Массивы проще вводить, но ошибки указателя могут быть сложнее уловить. - Что касается ввода / вывода, следует ли мне придерживаться и
cout
т. Д. Или, как вы думаетеprintf
, будет легче учиться? - Существуют ли онлайн-ресурсы для C ++, подходящие для таких юных учеников?
Благодарность!
РЕДАКТИРОВАТЬ : Спасибо за так много отличных ответов. В дополнение к Ускоренному C ++ , который предлагается многими людьми, я обнаружил, что C ++ For Everyone - отличный текст.
Ответы:
Я думаю, вам следует начать с типов данных, которые встроены в язык, таких как массивы и указатели, а когда ваши ученики их поймут, перейдите к классам и ОО, а затем к STL.
Причина в том, что вы можете научить людей понимать массивы, не понимая ничего другого, кроме переменных и базовой компьютерной архитектуры, но вы не можете научить их понимать,
vector
не обучая их сначала классам. Если вы используете STL с самого начала, ваши студенты должны будут просто жить, не имея понятия о том, какvector
именно работает. И затем, когда вы дойдете до этого момента, они не будут достаточно хорошо разбираться в указателях и массивах и вещах, которые вы получаете от выполнения таких вещей, как написание собственного векторного класса, написание собственного класса связанного списка и т. Д., Что будет необходимо ценить и использовать его возможности. Меня раздражает, когда студенты говорят: «Что это?» и учителя говорят: «Просто игнорируй это, ты узнаешь это позже».И, как указал Демиан в комментариях, расшифровка относительно загадочных сообщений, которые вы получаете из ошибок шаблона, значительно сложнее, чем понимание ошибок, которые вы можете получить от массивов / не шаблонных конструкций.
Я не чувствую то же самое по поводу
cout
иprintf
. Ни один из них не является более низким уровнем, чем другой, за исключением того, чтоcout
используется перегрузка операторов.Это может показаться глупым, но я абсолютно без ума от того, чтобы люди понимали самые основные строительные блоки всего, прежде чем перейти к абстракциям. Вы не должны использовать умные указатели, пока не разберетесь с необработанными указателями, без векторов перед массивами и тому подобным.
Я часто говорю это, но я скажу это снова: лучше сначала научить студентов длительному делению, а затем позволить им использовать калькулятор, чем позволить им использовать калькулятор, а затем обучить их долгому делению.
Что касается книг для обучения начинающих, см. Основной список хороших книг по С ++ .
источник
vector
over-массивов. Я разрываюсь.std::string
иstd::vector
?! Это программисты на 32 C? Я преподаю C ++ в течение десятилетия начинающим программистам, студентам, у которых был год Java, и профессионалам программирования. Я пользуюсьstd::string
иstd::vector
с первого дня. Они просты в использовании, независимо от того, что их внутренности. (Вы не уклонитесь от преподавания струны В.Б., потому что она слишком сложна изнутри?)std::vector
чтобы быть в состоянии использовать это. И классы являются чрезвычайно базовой частью C ++. Что не является основным, так это отладка всех тех ошибок, которые они получат, используя собственные массивы и указатели.new
ключевое слово, вы обратно в управлении памятью terrirory. И часто библиотеки запрашивают указатели, и вы должны спросить себя: «Это собирается вступить во владение? Или мне все еще нужно его почистить?». Основание моей ноги. Больше похоже на гвоздь или конопатить что-нибудь.Это мой собственный опыт. Возьми это за то, что оно того стоит.
Оглядываясь назад, когда я начал программировать, я действительно хотел бы узнать о памяти в первую очередь . Нет, это не интересно. Это заставит вас застеклить. Но это смехотворно простая концепция для обучения. Просто покажите 1-D таблицу и заставьте их выполнить несколько умственных упражнений:
и так далее. Как только вы потеряли основную память, все остальное - торт. Это бедные студенты, которые предполагают, что компилятор делает что-то волшебное (или что им никогда не нужно думать об управлении памятью), которые имеют тенденцию бороться больше всего. И C ++ мутит воду, потому что некоторые вещи автоматически очищаются (то есть нормальный вектор), в то время как другие вещи не очищаются (то есть вектор выделяется с использованием «new»). И даже не заводите меня на строки (char * против std :: string - попробуйте объяснить это без знания указателя).
Я не знаю, на какую платформу будет нацелено ваше соревнование роботов, но если это среда с ограниченным объемом памяти, навыки управления памятью имеют решающее значение.
РЕДАКТИРОВАТЬ
Как только вы научите их основам, тогда да, я говорю: иди на C ++ до конца. Технически это просто разные библиотеки, но нет смысла путать их с более чем одной парадигмой. Дайте им инструменты C ++ (которые включают в себя указатели и массивы).
источник
определенно перейдите прямо к использованию стандартных типов библиотек. a
std::string
илиstd::vector
это то, что они должны часто использовать, и (подавляющее большинство реализаций) эти типы предлагают некоторую форму обнаружения ошибок и обработки ошибок, в то же время абстрагируя многие сложности от учащихся.вы можете потратить немало времени на обучение студентов тому, как устроена память и как управлять памятью (стиль C), или вы можете приступить к работе с использованием идиоматических типов языка, а затем объяснить детали реализации, если это необходимо (и когда у них есть лучшее понимание того, что такое массив и где он используется).
синтаксис
std::vector
(create / read / write) не намного сложнее, чем у массива C. по сравнению с этим ручное управление памятью и все распространенные ошибки, которые новые ученики делают с массивами Си, гораздо сложнее изучать, обучать и использовать.cout
, лично я думаю, чтоcout
легче учиться. возможно, что еще более важно, вы должны выбрать,cout
потому что это более безопасно, универсально и позволяет вам определять, как объект печатается, что означает, что у вас уже есть встроенные функции и безопасность типов, используя некоторые стандартные типы библиотек. наконец, вы просто получите смешанные программы, когда поймете, что им, возможно, придется учитьсяcout
в дополнение кprintf
.на самом деле, я думаю, что вы должны прочитать Accelerated C ++, написанную Koenig и Moo, и, возможно, использовать его для обучения (косвенный ответ на вопрос 3). в книге, они вводят как
std::cout
раз передreturn
(стр. 3) и сохраняют указатели и массивы до главы 10. Если бы я мог скопировать и вставить предисловие этой книги в качестве ответа на ваш вопрос, я бы сделал это. (примечание: я рекомендую вам прочитать его с точки зрения обучения с ++).Изменить вот предисловие
если вы не хотите использовать Accelerated C ++ (который предполагает некоторый опыт программирования в целом), то, возможно, вам понравится Eckel's Thinking in C ++ . Я не читал его, но это свободно распространяемый вводный текст C ++.
источник
std::cout
введением, вьющиеся фигурные скобки введены =) (это простое вскрытие вездесущего "Hello, World")Следует учитывать, что в типичном коде FIRST структуры данных любой формы (структуры, классы, массивы, векторы, списки) играют очень небольшую роль. Обычно вы работаете с очень небольшим количеством данных датчика и используете его для определения очень небольшого количества движений привода.
Но то, что играет огромную роль, и может быть очень трудно понять, это все различные формы контроля которые продолжаются.
Поэтому я бы сделал упор на контроль. Начнем с основ:
if
,for
,while
. Попросите их много практиковаться. Заставь их хорошо знать это ....... но потом становится сложнее. Любой код робота среднего размера в конечном итоге попадает в более хитрые шаблоны управления:
Большой «основной» цикл, который вызывает все
Конечные автоматы (их много видно)
Сохранение предыдущих значений / счетчика хода (как для PID)
Это трудно понять новичкам. Думая о том, как программа движется по коду, это сбивает с толку, вы можете не осознавать этого сейчас, но это так. Это доставит вашим ученикам гораздо больше хлопот, чем сам язык.
Кроме того, удачи! Надеюсь, что сезон пройдет хорошо.
источник
Проблема с массивами состоит в том, что для всего, кроме простых примеров из учебников, потребуются массивы динамического размера, и в тот момент, когда вам нужны массивы динамического размера,
std::vector
гораздо проще. Кроме того, единственный способ безопасно обработать массивы динамического размера - это обернуть их в свой класс, что было бы плохимstd::vector
плагиатом.Вопреки необъяснимо распространенному мнению, студенты могут использовать функции, которые требуют реализации сложной механики, не зная, как реализовать таких зверей самостоятельно. Как я уже сказал в комментарии: вы даже не подумаете о том, чтобы не учить строки на других языках, просто потому, что их реализация сложна, не так ли?
Почему набор соглашений об устаревших форматных строках, которые заставляют вашу программу взорвать крышу в тот момент, когда вы получаете что-то не так (что происходит, когда вы меняете какой-
typedef
то, казалось бы, не связанный заголовок), предпочтительнее безопасности типовstd::cout
?Большинство ресурсов C ++, онлайн или нет, плохие. И я не говорю об использовании трудно читаемых шрифтов или языка. Я говорю о явно очевидных фактических ошибках. Хороших ресурсов C ++ очень мало, в основном одна или две дюжины книг . Единственное, что я знаю, это онлайн - « Размышление» Брюса Экеля на C ++ .
В течение десяти лет я преподавал C ++ студентам с совершенно другим опытом, используя в качестве основы ускоренный C ++ Koenig / Moo . Мой курс сильно изменился за это десятилетие, и теперь он далеко от книги, за исключением основополагающего принципа: используйте современные, правильные, безопасные идиомы с самого начала. Не учите своих учеников, как вручную манипулировать памятью, просто чтобы потом их отучить в пользу более безопасных идиом. Как вы можете видеть на некоторых ответах, представленных здесь, это не работает: те, кто когда-то учил ручным способам, редко когда-либо понимают преимущество использования современных безопасных идиом.
источник
Если вы хотите преподавать C ++, я бы начал непосредственно с конструкций C ++, таких как vector и cout, вместо подмножества C, таких как printf.
источник
Да. Использование собственных массивов в C ++ подвержено ошибкам и просто неэффективно в 99% случаев.
Да.
Они не так молоды. Обучение программированию не требует мудрости, просто мотивации и непредубежденности. Я не могу придумать ничего, чему бы обучали в последние два года в старшей школе, чтобы лучше подготовить ученика к обучению программированию. Вы смотрели на мышление Брюса Экеля в C ++ ? Он доступен для бесплатной загрузки и очень хорошо проверен. Пожалуйста, избегайте популярных, но ужасных C ++: Как программировать и всех книг Sam's Teach Yourself C ++ ....
источник
Я преподавал C ++ в старшей школе как первый язык программирования, хотя это было больше похоже на "C +", теперь, когда вы упомянули об этом; мы использовали
cout
для записи текста на консоль и файлы, но также довольно много функций Си (getch()
было моим любимым).Я думаю, что наиболее эффективным (и, возможно, забавным) способом обучения основам является использование целенаправленной учебной программы: начните с показа, как выводить данные, затем ввод с клавиатуры, затем простой файловый ввод-вывод и т. Д. Переходите к простому текстовому вводу. основанная игра (или эквивалент робототехники). Затем, когда они спрашивают: «Как мне сделать X?», Вы можете разбить X на примеры, которые они уже видели, например: «Сначала вам нужно получить информацию от пользователя, как мы делали в Z, затем ... "(очевидно, на практике это не так просто, поскольку X, вероятно, потребует дополнительных знаний, например" 3D-графики ", но вы все равно можете объяснить, как это будет работать на высоком уровне путь).
Примеры, которые вы им показываете, начнутся с чёрного ящика, скопированного копией магии, тайны которого раскрываются, когда кусочки головоломки программирования постепенно выясняются. Например, ваши студенты
if
довольно быстро изучат основы s, но они, вероятно, не поймут, что булево выражение не ограничивается исключительно использованием вif
условии (что приводит к классическомуif (blah) return true; else return false;
коду).Тонкости выбора массива или вектора в качестве контейнера поначалу покажутся неуместными для студентов. Вектор / массив будет просто способом иметь множество переменных в качестве одной переменной, доступной через индекс. Придерживайтесь того, где вы можете. Указатели не будут поняты до позже тоже. Это не значит, что вы не должны объяснять вещи; только то, что вы не можете объяснить все сразу, и то, что вы объясняете, не будет полностью поглощено. Люди учатся органически, а не линейно. Я использовал
cout
пару лет, прежде чем правильно понял, что такое перегрузка оператора!Ох, и не бойся повторений. «Это похоже на программу Hello World, которую мы сделали - помните, как мы записывали текст в консоль?» (нет ...) «Давайте снова пройдемся, чтобы убедиться». ... и задавайте вопросы! Держите студентов увлеченными веселыми примерами и большим количеством взаимодействия.
C ++ - сложный язык, и независимо от того, что вы делаете, значительная часть этой сложности (и мастерства программирования в целом) будет потеряна для ваших учеников. Все, что вы им покажете, будет для них новым; большая часть этого не будет погружена в глубокий уровень понимания (по крайней мере, не сразу). Как работает память, как взаимодействуют компоненты ПК, что такое стек и куча, указатели, классы, даже циклы и цепочки if-else не будут должным образом поняты большинством. Хорошо! Их не нужно понимать, чтобы их использовать - огромное количество классных программ может быть написано с помощью супер-уродливых 1000-строчных функций с пятикратным вложением избыточных
if
s и 43 переменных, называемых такими вещамиx_2r
. Важно то, что студенты постоянно учатся и совершенствуются, Черные ящики хороши до тех пор, пока они становятся прозрачными (или, по крайней мере, полупрозрачными серыми) в долгосрочной перспективе. К концу курса они могут не знать, что такое шаблоны проектирования, но они должны иметь возможность оглянуться назад на программы, которые они написали в первые несколько недель, и съежиться в своем коде. Они должны понять на значительном уровне детализации, как на самом деле работает первая написанная ими программа (тогда как когда они писали это, они понятия не имели). Но они не будут знать все - пока .источник
В своей жизни я прошел кучу уроков по программированию от старшей школы до колледжа. Я могу сказать, что я действительно многому не научился из моего первого класса С ++, кроме как печатать вещи в поток.
Мой совет, будучи молодым студентом, у которого только в последние несколько лет была настоящая работа в качестве разработчика, - не делать глупостей на них. Расскажите им, что они делают и как это работает вплоть до уровня операционной системы (не нужно входить в comp eng IMO).
Я думаю, что обучение их Си - лучший способ сделать это (он все равно будет почти всегда компилироваться в C ++, как вы знаете). Обучая их тому, что на самом деле представляет собой терминал, как их программа взаимодействует с ним, что строка - это массив символов, заканчивающийся \ 0 в памяти, что такое malloc и как C ++ абстрагирует его, как char и int хранятся в памяти и т. д. Это то, что заставляет кого-то действительно знать, как решить проблему, когда он сталкивается с ней в процессе разработки.
Я не могу подчеркнуть важность того, чтобы позволить детям программировать и быть там, в основном, чтобы отвечать на вопросы. По моему опыту, вы изучаете язык, используя его. Книги и уроки могут быть полезны и необходимы для начала, но в конце я скажу, дайте им файл C / C ++ и скажите: это пример X, я бы хотел, чтобы вы сделали Y (что можно сделать взломав Х). Покажите им, как использовать справочные страницы (если они используют * NIX), или покажите им cplusplus.com и дайте им возможность изучить библиотеки std, чтобы самостоятельно разобраться.
TL; DR Пусть дети учат сами. Будьте там, чтобы обеспечить структуру и ответить на вопросы.
Также: связанные списки - это правда!
источник
Вы не учите их программированию в общих чертах, вы учите их некоторому встроенному программированию с использованием роботов и тому подобного. Если я правильно понял.
Во-первых, я думаю, что вы должны проверить, какие библиотеки вы собираетесь использовать и что вам нужно.
Если у вас есть библиотека C для использования или C-like с большим количеством указателей и C-массивов, то я думаю, вам понадобится способ научить их, как использовать ее или почему вы ее используете.
Но вы можете показать им несколько простых кодов для начала работы со строками и векторами, вот как работает C ++. Это не значит, что вы не можете научить их указателям.
Возможно, вам следует прояснить разницу между C ++ низкого уровня (который напоминает C) и C ++ высокого уровня с STL. Одна из самых сложных вещей в C ++ для начинающих - это посмотреть, что такое C, что такое C ++ и каковы различные системные API.
Поскольку целью здесь является не изучение общего программирования, а участие в соревновании роботов, я ориентировал обучение именно на это.
источник
Я начал обучать студентов C ++ в конце прошлого года и этим летом также для нашей ПЕРВОЙ команды робототехники.
Мы используем Программирование Страуструпа - Принципы и практика использования C ++ . Я нашел книгу доступной, читаемой и хорошо организованной. У нас было около 6 студентов, которые самостоятельно прочитали главы. Я здесь, чтобы помочь им с терминологией и вопросами. Они делают все упражнения в книге.
Я заставил студентов работать через главу 14. Пропуск глав в потоках (бесполезно для программирования FRC). Через главу 14 полезно, потому что они получают введение в подклассы. Однако им, вероятно, нужно пойти дальше в книге, чтобы лучше понять конструкторы и деструкторы, связанные с подклассами.
Не стоит недооценивать своих учеников. Студенты счастливы иметь книгу, читать, учиться и делать упражнения; и это было летом в свободное время! Есть много студентов, которые не поймут. Они должны перейти к чему-то другому; не все понимают программирование.
Самый большой барьер не язык или книга; это среда разработки. Visual Studio Express может быть пугающим для начинающих пользователей. Вы можете помочь студентам сосредоточиться на программировании, а не на окружающей среде. Однако изучение среды очень полезно, поскольку программисты тратят много времени на адаптацию к новым системам разработки.
Удачи.
источник
Вы говорите, что хотите обучить их C ++, но не обучаете их никаким конструкциям C, но большинство конструкций программирования, которые им необходимо знать в первую очередь, являются общими для всех языков, а версии C ++ основаны на C:
Вот как вы делаете программу [int main (..) {return 0; }]. Дайте общий обзор среды программирования, которую вы хотите, чтобы они тоже опробовали. Им нужно будет знать, как сделать проект и на самом деле скомпилировать / запустить его.
Это переменная. Переменные могут хранить данные (int, char, float и т. Д.).
Строки (C ++ легче использовать с cin).
Вот как вы читаете и пишете данные (cin, cout). "Привет,% s!"
Условные (компьютеры должны принимать решения).
Циклы (компьютеры способны делать одно и то же снова и снова). Покажи пока и для петель.
Это должно занять около двух уроков в час каждый. Обязательно подготовьте краткий набор заметок, на которые они могут ссылаться в практическом компоненте. Вы не пытаетесь сделать их блестящими программистами, поэтому приведите примеры того, как читать с консоли, создавать структуры и все остальное, что им нужно будет сделать. Используйте только поддерживаемые языком функции, а не пользовательские библиотеки утилит. Вы только запутаете их больше.
С самого начала приведите пример и покажите им примеры хорошо продуманного кода. Отступы должны быть правильными, скобки и скобки должны соответствовать стилю, который вам наиболее удобен. Имена переменных должны быть осмысленными. Если вы продемонстрируете в качестве примера отстой, они узнают, что отстой приемлем. Это плохая отправная точка. Подчеркните важность получения правильного отступа - я обнаружил, что, когда уроки, которые я преподавал, последовательно делали отступ в их коде, им легче было понять, в чем дело. Это было потому, что большинство их ошибок были неправильной областью действия (помещая операции в циклы / условия, которые не должны были быть, или наоборот).
Затем переходите к практической работе. Лучший способ научиться чему-либо - это сломать его и понять, почему. Вы хотите убедиться, что они имеют простую в использовании среду для компиляции своего кода. Документируйте это с помощью снимков экрана в ваших раздаточных материалах.
Хорошим примером, который помог мне воплотить некоторые идеи, была сборка кока-колы:
После этого вы можете перейти к конструкциям C ++; Вы не хотите погружаться слишком далеко, прежде чем они смогут, по крайней мере, составить основную программу.
И, прежде всего, имейте много свободного времени и терпения, чтобы посвятить себя вопросам. Их будет много, и большинство из них заставят вас съежиться, потому что они настолько банальны, что ответ для вас очевиден.
источник
Я думаю, что вы должны учить не с точки зрения C ++ («Привет, мир C ++»), а с проблемной области - в данном случае робототехники - с точки зрения. Итак, ваш привет мир будет мигать светодиодом или двигателем.
Конечно, вы могли бы / должны разбить каждую крошечную робототехническую задачу на подмножество увеличивающихся концептуально значимых действий C ++, включая типы, функции и операции ввода-вывода.
Что касается меня, я не профессиональный программист, и пытался изучать Java, C ++ и Python. Я действительно начал чего-то достигать (Python), когда мне приходилось решать реальные (простые) проблемы. Это привело меня прямо к делу, избегая чрезмерного внимания к деталям случайной реализации самого языка.
Поэтому я бы посоветовал: не читать руководство по языку, а вместо этого научиться делать что-то с вашим языком по выбору. Это то, что мотивирует людей, я думаю.
источник
Я бы преподавал строгий C ++. Вы знаете, как, когда вы пишете printf и передаете его маленьким параметрам или неправильному типу, происходит что-то странное? а если вы используете недействительные указатели плохие вещи могут произойти? НЕ УЧИТЕ, ЧТО
С первого дня я научил бы использовать ссылки, STL и говорил, что вы теряете знаки для использования указателей. Не учите умных указателей. Единственный раз, когда я замечаю, что использую указатели, это когда я делаю GUI, и объекты (например, окно изображения) должны существовать и быть действительным изображением или нулем. Для консольного программирования я давно не использую указатели (умные или сырые).
Короче говоря, не учите их ничему, что может создать им проблемы. Обучайте iostreams, структуры, говорите им, что они тоже теряют оценки на typecast и не пытаются учить дизайну. Вы не хотите, чтобы кто-нибудь стал опытным профессионалом
источник
Это не серия лекций на C ++, но COMP1917 Ричарда Бакленда - превосходно сделанная серия лекций по программированию на C (сопровождаемая COMP1927 , структуры данных).
По моему мнению, C ++ слишком сложен для начинающих студентов, но C гораздо проще и обеспечивает хорошую основу для системного программирования, которой слишком часто не хватает новым программистам C ++.
источник
Я хотел бы начать со значительных кусков стандартного кода, помочь им «сделать что-то крутое» с программированием сразу и уточнить их понимание того, как все работает со временем. Им не нужно ценить или понимать все тонкости C ++, чтобы светодиод мигал. Им просто нужно знать, «если вы поместите этот код туда, он начнет мигать». А потом «эй, давайте поговорим о том, что такое цикл, если вы пишете цикл, вы можете заставить светодиод мигать 50 раз без необходимости писать 50 строк кода, разве это не круто?» Теперь давайте поговорим об условных обозначениях: когда пользователь нажимает кнопку A на блоке управления, мы хотим активировать пневматику, чтобы поднять флажок, вот как мы добавили бы код для этого. Или, если переключатель 2 на нашем блоке управления включен, мы запускаем электродвигатель бура в обратном направлении, а не вперед.
Если вы сконцентрируетесь на том, чтобы научить их «достаточно» для решения проблем, которые их интересуют, это сделает вещи менее подавляющими и более доступными. Если они действительно заинтересованы и хотят понять тонкости, они, вероятно, вернутся и прочитают всестороннюю книгу по программированию или пройдут курс летней школы в местном JC.
Составьте список «вещей, которые они хотят контролировать» на своем роботе и превратите каждый в урок ... что им нужно знать меньше всего ...?
Я бы придерживался принципов конструирования, которые являются наиболее надежными, как я бы учил cout over printf, потому что спецификаторы формата очень легко перепутать, а неправильный спецификатор часто является автоматическим рецептом сбоя вашей программы. Аналогично, вектор запутывает некоторые сложности управления памятью. Не беспокойтесь о каждой детали о том, как все работает, или о том, что такое библиотека STL, по крайней мере, им нужно знать для достижения X (например, для этого может потребоваться использование структуры данных библиотеки STL)
источник
Используйте Как программировать на C ++ от Deitel и Deitel. ОТЛИЧНЫЙ учебник на мой взгляд.
Похоже, вы пытаетесь научить новичков программировать, а затем одновременно программировать их на каком-то продвинутом уровне. Если вы надеетесь дать им немного обезьяны, посмотрите, как обезьяна выполняет кодирование фрагментов без понимания, что вы обречены на провал.
Держитесь подальше от STL для начинающих.
Если у вас уже есть решение по кодированию для вашего робота - или ОЧЕНЬ ХОРОШАЯ ИДЕЯ того, на что он будет похож, то, возможно, вы сможете «сопоставить» уроки в учебнике с задачами кодирования для робота. Но позвольте учебнику вести обучение.
Если вы принудительно кормите кодирование, давая ученикам очень узкие уроки и знакомитесь с языком, то я думаю, что по мере того, как океан кода, который вы пишете, становится все больше и больше, это будет похоже на то, что вы только что научились грести веслом, и вы утонете, потому что РЕАЛЬНОЕ плавание требуется.
Это не вопрос "должны ли они изучать cout или printf?" Это вопрос обучения, достаточного для понимания того, как писать код для решения задач программирования роботов.
Если бы это было задание по чтению, каковы были бы результаты, если бы все, что они знали, были простыми предложениями с глаголами-предметами и только половина словарного запаса, который вы ЗНАЕТЕ , потребуется.
источник