Программирование на C++: подготовка к олимпиадам
Подготовка к олимпиаде НТИ по направлениям "Беспилотные авиационные системы", "Нейротехнологии" и "Умный город"
НТИ — Национальная технологическая инициатива — программа глобального технологического лидерства России к 2035 году.
Олимпиада НТИ проходит в три этапа: отборочный индивидуальный, отборочный командный и финал (календарь). Финалисты будут работать с реальным инженерным оборудованием, применяя на практике продемонстрированные на отборочных этапах знания.
ОЛИМПИАДА НТИ — ВСЕРОССИЙСКАЯ ИНЖЕНЕРНАЯ ОЛИМПИАДА

БЕСПИЛОТНЫЕ АВИАЦИОННЫЕ СИСТЕМЫ
Профиль «Беспилотные авиационные системы» — техническая и инновационная деятельность в области проектирования систем управления беспилотными летательными аппаратами (БПЛА). Особое внимание уделяется организации процесса разработки автопилота, при котором возможна практическая проверка разработанных программ.

Этот профиль включён в перечень Российского совета олимпиад школьников и приносит бонусы при поступлении в вузы (какие конкретно — зависит от правил приёма вуза).

ПРИМЕРЫ ПРОФИЛЕЙ, ГДЕ НЕОБХОДИМО ПРОГРАММИРОВАНИЕ НА C++
УМНЫЙ ГОРОД
Профиль, связанный с электронной инженерией, стал частью Олимпиады НТИ три года назад, и с каждым годом его задачи становятся всё сложнее. В этом году профиль называется «Умный город» и будет заниматься созданием комплексной интеллектуальной системы управления процессами, происходящими в целом городе!

Умный город — это комплексная интеллектуальная система управления мегаполисом, при которой системы и городские службы используются оптимальным образом и обеспечивают комфортную городскую среду.

Бесплатные онлайн курсы
Есть множество онлайн курсов по программированию на С++, такие как stepik, coursera, edx и другие, если с терпением пройти эти курсы то можно научиться решать многие задачи, нажмите на рисунки чтобы перейти к этим курсам.
В олимпиадных задачах встречаются достаточно сложные задачи, чтобы их правильно и быстро решить мы должны хорошо знать условные переходы, циклы, операторы и стандартные библиотеки C++. Мы должны уметь быстро построить алгоритм решения задачи, для этого нам надо построить блок-схемы решения задачи.
Обучающие видеоуроки на видеохостинге YouTube
На youtube каналах есть множество видеоуроков по программированию на C++, которые начинаются с основ, но лучше чем приступить к видеоурокам, рекомендовал бы начинающим почитать книги по С++, это лучший способ понять самому с начала, в этом случае материал хорошо усваивается.

Большое количество видеоуроков, даёт широкий выбор ученику, но надо выбирать правильно те видеоуроков подача которых ясно и легко понято.
Среды разработки Dev-C++, Visual Studio Code, Code::Blocks, и текстовые редакторы Sublime Text, Atom и онлайн компилятор Repl.it.

Dev-C++ – это бесплатная интегрированная среда разработки с открытым исходным кодом, написанная в Delphi для Windows. Это легкая IDE, которой требуется всего на пару минут для установки. Это – лучшая среда разработки для новичков, в ней можно установить плагин для создания GUI-интрефейсов методом перетаскивания элементов.

Некоторые из возможностей Dev-C++:

  • малый вес;
  • простая в использовании панель инструментов;
  • автозавершение кода;
  • горячие клавиши для компиляции и запуска, например F9 и F10;
  • простая установка.
Скриншот Dev-C++
Простой пример решение некоторых задач с помощью C++
1. Сколько байтов занимает каждый из базовых типов?

Определите, сколько байтов отводится под каждый из базовых типов:

Решение
2. Равны ли числа?

В листинге между собой сравниваются два числа, каков будет результат сравнения?

Решение
Программа из листинга сообщит, что числа не равны, несмотря на то, что обоим числам присваиваются одинаковые значения 60000. Дело в том, что под оба числа-и беззнаковое короткое целое unsigned short int, и знаковое короткое целое signed short int – отводятся по два байта, у переменных со знаком один разряд отводится для обозначения знака (положительная и отрицательная), в то время как у беззнаковых все разряды отводится под число.

3. Сравнение инкремента и постинкремента

Каков результат выполнения программы, представленной в листинге

Объясните, почему так происходит?
Решение
При использовании операторов инкремента и постинкремента следует помнить, что оператор инкремента ++i сначала увеличивает значение переменной i на единицу, а затем возвращает значение, а оператор постинкремента i++ сначала возвращает значение переменной, а потом увеличивает значение переменной i. Точно так же ведут себя операторы декремента –i и постдекремента i--, только вместо увеличения значения происходит его уменьшение на единицу.

4. Четное или нечетное?

Создайте программу, которая запрашивает целое число y пользователя и определяет, является оно четным или нет.

Решение

Самый простой способ определить четность числа - это проверить остаток от деления его на 2 при помощи оператора %.
5. Чем отличается switch от конструкции if-else-if?

В листингах 1 и 2 представлены две программы, которые в зависимости от введенного пользователем числа (от 1 до 5) выводить английские названия цифр. В листинге 1 для этого используется оператор switch, а в листинге 2 конструкция if-else-if. Результат работы программ идентичен. Чем отличается оператор switch от конструкции if-else-if или это одно и то же?

Листинг 1. Использование оператора switch
Листинг 2. Использование оператора if-else-if
Оператор switch – это своеобразный ограниченный оператор goto. Получив значение, оператор switch сравнивается его со значениями в конструкции case, и если совпадение найдено, то начинается выполнение операторов с текущего оператора case. Выполнение происходит до ближайшего операторов break. Если не указывать, операторов break? То будут выполнены операторы из нижележащих конструкций case.

Блоки в конструкции if-else-if не зависят друг от друга и выполняются только в том случае, если выполняется очередное условие.

Оператор switch более эффективен по производительности, чем конструкция if-else-if.

Оператор switch оправдан, когда производится множество сравнений по равенству с одной-единственной переменной, как это происходит в условии задачи.

6. Вывод всех видимых ASCII-символов

Создайте цикл, выводящий все ASCII-символы, начиная с 32-го символа, с которого начинаются видимые символы.

Решение
Данное решение основывается на том факте, что переменная типа unsigned char может принимать максимум 255 значений, именно столько входит в ASCII-кодировку. При достижении переменной symbol предела (255) ее значение сбрасывается в 0 и цикл while завершает свою работу.

7. Поиск простых чисел

Создайте скрипт, который запрашивает у пользователя число и ищет аростые числа до введенной пользователем величины.



Решение

Для решения данной задачи следует воспользоваться двойным циклом. Управление выводом простых чисел осуществляется при помощи булевой переменной flag, равенство которой true означает, что найдено очередное простое число.

Так, если в качестве верхней границы ввести число 100, то результатом работы программы из листинга может выглядеть следующим образом:

8. Пример решения задачи Олимпиады НТИ по профилю БПЛА, Нейротехнологии, и Умный город.

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

Автомобильный номер – строка из шести символов. Первый символ – заглавная латинская буква, далее следует 3 цифры, и после _ две заглавные латинские буквы. Например, строка "P142EQ" является номером. Вам будет дана строка, состоящая из шести символов, необходимо ответить, является ли строка автомобильным номером.



Формат входных данных

В единственной строке находится строка из шести символов, состоящая из цифр и заглавных латинских букв.



Формат выходных данных

Если строка является автомобильным номером, то необходимо вывести Yes, в ином случае No.



Решение

Для того, чтобы решить задачу необходимо проверить, что на первой и двух последних позициях строки находятся заглавные латинские буквы a между буквами находились три числа

9. Пример решения задачи Олимпиады НТИ по профилю БПЛА, Нейротехнологии, и Умный город.

Юному Тимуру нравится рисовать четырехугольники с заданными длинами сторон. Длины для сторон он придумывает сам, и после этого начинает рисовать. Недавно на уроке математики он узнал, что не всегда из придуманных сторон можно получить четырехугольник. И теперь, чтобы не терять времени, Тимур хочет быть уверен, что по его задуманным длинам можно построить четырехугольник. За помощью в этом вопросе он обращается к вам. Тимур даст вам длины четырех сторон. Необходимо определить, возможно ли построит из заданных сторон четырехугольник.


Формат входных данных

В единственной строке входных данных находится четыре целых положительных числа, разделенных пробелом. Каждое число не превосходит 10000.


Формат выходных данных

Если из заданных длин сторон можно построить четырехугольник, то необходимо вывести Yes, в ином случае No.


Решение

Необходимое и достаточное условие для построение четырехугольника с заданными сторонами – длина максимальной стороны должна быть строго меньше суммы трех остальных. Например, если a - максимальная сторона, то условие выглядит, как . ( – остальные стороны четырехугольника).

10. Пример решения задачи Олимпиады НТИ по профилю БПЛА, Нейротехнологии, и Умный город.

Студент Денис часто прогуливает свои пары в университете. Сегодня, когда Денис пришел в деканат, он узнал, что нужно за каждую пропущенную пару написать объяснительную.

Денису выдали один бланк для написания объяснительной. Ему нужно сделать еще n копий данного бланка. Для этого в его распоряжении есть два ксерокса. Первый ксерокс тратит на копирование одного листа одну секунду, а второй _две секунды. Копию можно делать как с оригинала, так и с копии. Денис может использовать оба ксерокса одновременно. Определите, какое минимальное время необходимо Денису для получения n копий объяснительной.


Формат входных данных

В единственной строке дано число n _ необходимое число копий .


Формат выходных данных

Выведите одно число - минимальное время в секундах, необходимое для получения n копий.


Решение

Изначально нужно скопировать один экземпляр, чтобы одновременно копировать на обоих ксероксах. После этого для печати трех экземпляров необходимо 2 минуты. Получается, что для печати копий необходимо затратить минут в случае, если делится на 3. В случае остатка от деления на 3, равному , необходимо дополнительно потратить минут. Таким образом, итоговая формула выглядит, как .

11. Пример решения задачи Олимпиады НТИ по профилю БПЛА, Нейротехнологии, и Умный город.

Вам дана шахматная доска размером 8 × 8, в поле a которого находится король. Определите, за какое минимальное количество ходов король может добраться до клетки b. Шахматный король может переместиться на любое соседнее поле, с которым есть хотя бы одна общая точка.


Формат входных данных

Первая строка входных данных содержит два числа av, ah — координаты, где изначально находится король . Вторая строка также содержит два числа bv, bh — координаты клетки b, в таком же формате.


Формат выходных данных

Выведите одно целое число — ответ на задачу.



Решение

Почему С++?
В начале 80-х годов прошлого века сотрудник Bell Labs Бьёрн Страуструп после долгих мучений с существующими языками программирования провёл эксперимент со скрещиванием C и Simula. Он даже не рассчитывал, что его детище, получившее название C++, привлечёт столько внимания.

Однако тогда язык произвёл настоящий фурор: компилируемый, структурированный, объектно-ориентированный, невероятно упрощающий работу с большими программами и при этом имеющий огромный потенциал для развития. Такой, что ещё почти десятилетие потребовалось Страуструпу, чтобы наделить C++ всеми характерными особенностями. Развитие же продолжается до сих пор. К примеру, стандарт C++17 был принят в конце прошлого года.

Поэтому, если вы думаете, что C++ безнадёжно устарел, у нас для вас новость – отправить на пенсию его может только какая-нибудь невероятная технологическая революция. И вот почему.

Он быстр

Откройте любой тест производительности языков программирования, и в топе вы увидите C++, лишь С однозначно быстрее. Скорость исполнения кода — пожалуй, главный аргумент в пользу того, почему C++ был, есть и будет востребован в ИТ.

Да, для реализации локальных нужд могут подойти C, Go или Rust, но если вы хотите изучить один язык, с помощью которого можно писать программы любой сложности, ваш выбор — C++.

В противовес этому часто ставится скорость написания кода, которая, например, у интерпретируемых языков на порядок выше. В этом есть доля истины — C #, Java и конечно же Python даже визуально занимают меньше места, с их помощью можно создавать сложные программы, затратив минимум времени. Однако подумайте, что лучше для конечного пользователя: время разработки приложения или его медленная работа? Ответ очевиден.

Он универсален

Компиляторы C++ есть на каждой операционной системе, большинство программ легко переносится с платформы на платформу, со средой разработки и библиотеками у вас точно не возникнет проблем. C++ — это демонстрация идеи классического программирования, когда 90% мыслей связано с кодом и лишь 10% с используемой периферией.

Достаточно просто вспомнить, где он используется: микроконтроллеры, IoT, роботы, десктопные и мобильные приложения, веб, игры, системы моделирования, прогнозирования, обработки статистики и в нейронных сетях. Везде. Просто не существует такой области программирования, где C++ был бы бесполезен.

Да, сегодня сложно найти приложение, которое бы «от» и «до» было бы создано на C++. Но частично его использует почти любой крупный проект, поэтому его знание всегда будет являться плюсом в резюме программиста.

Он полезен в качестве фундамента для обучения

Java, JavaScript, C #, как и огромное количество других популярных языков программирования, содержит в основе принципы C++. Именно поэтому учебные программы многих вузов содержат курс «плюсплюс», который идёт сразу за получением основ на C.

К примеру, принцип работы Java, одного из мощнейших языков современности, достаточно сложно понять, если не начать обучение с основ, которые впервые появились именно в C++.

Кроме того, популярно мнение, что если вы сможете изучить C++, то любой другой язык не вызовет у вас никаких затруднений. Это что-то вроде того, как легко пытаться пересесть с механической коробки передач на автоматическую и как сложно проделать путь в обратном направлении.

Почти все популярные языки программирования, что были придуманы позднее, имеют упрощенные структуру и механизмы, а процесс изучения сводится к освоению синтаксиса и ПО. Это создаёт целую армию программистов, которые просто не понимают, что создают в половине кода.

Codeblocks – это еще одна свободная и открытая среда IDE для C и C++, написанная с использованием GNU C++. Главный плюс – кроссплатформенность программы. CodeBlocks также можно использовать для языков c и Fortran.

Некоторые из функций CodeBlocks:

  • простая и быстрая установка;
  • наличие портативной версии;
  • удобный конструктор GUI-форм;
  • встроенная возможность создания блок-схем.
Visual Studio – это среда разработки от Microsoft. Visual Studio в основном известна для написания приложений, включающих в себя .NET. Это полный набор инструментов, позволяющий произвести точную отладку и настройку приложения. Есть как Community-версия, так и PRO.

Visual Studio предназначена не только для разработчиков на C++, но также поддерживает многие другие популярные языки, такие как C#, Visual Basic и F#.

Visual Studio предлагает множество функций, некоторые из которых:

  • интеллектуальное автодополнение кода;
  • дизайнер графических форм (GUI);
  • простая в использовании навигационная система.
Вы можете использовать IDE для разработки компьютерных программ для Microsoft Windows, а также веб-сайтов, веб-приложений и веб-сервисов.

Текстовые редакторы Sublime Text, Atom
По мнению многих, Sublime Text — это лучший из лучших, самый быстрый редактор кода.

Преимущества Sublime Text

У Sublime Text очень приятная полоса прокрутки с превью кода, и, конечно же, возможность редактировать текст при помощи нескольких курсоров. Еще из фишек есть подсветка и автокомплит практически чего угодно, неплохой поиск по проекту, что позволяет найти нужную строку или файл всего по нескольким буквам, автоматический перенос слов по заданной ширине строки, проверка грамматики, поддержка разных кодировок и переносов строк, настраиваемая ширина отступов — в общем-то, все, чтобы вам было комфортно и удобно работать. Еще к плюсам можно отнести гибкую настройку шрифтов и цветовых схем.

Atom – это бесплатный текстовый редактор с открытым исходным кодом и поддержкой плагинов, написанных на Node.js, и встраиваемых под управлением Git Control. Его создателями являются программисты веб-сервиса Github, которые решили помочь своей целевой аудитории и создать нечто, что разработчики могут использовать каждый день.

Преимущества Atom

Главная особенность Atom — богатые возможности по настройке. Редактор можно настроить на свой вкус. Изначально в него встроены файл-менеджер, продвинутые функции поиска и замены, разнообразные курсоры, опции сворачивания кода, ясный интерфейс, возможность импорта правил и тем из TextMate.

Десктопное приложение Atom имеет полный доступ к файловой системе, естественные для операционной системы меню и панель команд. При этом оно идеально приспособлено для веб-программирования: можно добавлять собственные функции для редактирования CSS, HTML и JavaScript. Нужно отметить также интеграцию с Node.js, включая запуск веб-сервера прямо из редактора. Архитектура программы проста и понятна каждому: можно заменить любой пакет своим собственным и закачать его в центральный репозиторий, чтобы им воспользовался любой желающий.

Такой поистине прекрасный редактор все же более тяжеловесен, нежели Sublime Text. Но можно сказать точно, что Atom — достойный редактор для удобной работы программиста с множеством приятных дополнений.

Онлайн компилятор Repl.it
Сегодня, на мой взгляд, онлайн среды программирования становятся все более популярными инструментами при обучении школьников программированию. Это и не удивительно:

  • не надо ничего устанавливать на компьютеры, переживать, если нужная среда не установлена в нужном кабинете или если есть какая-то нестыковка по версиям ПО;

  • нет необходимости требовать установить среду дома для выполнения домашней работы (как показывает практика, для многих это может стать отличным объяснением несделанной домашней работы на много недель);

  • не нужно бегать с флешкой или помнить о том, чтобы сохранить файл с проектом где-то в облаке;

  • кроме того, современные онлайн-среды программирования предлагают огромные возможности для совместной работы, для того, чтобы делиться программами и взаимодействовать как в ролях "ученик - ученик" так и в ролях "ученик - учитель"

Repl.it — облачная среда разработки, работающая в веб-браузере и исполняющая код на сервере, позволяющая писать и выполнять исходный код на большинстве популярных языков программирования. Проэкты в этой среде называются «реплами», их можно назвать, для того чтобы дать ссылку. Множество «реплов» могут взаимодейвствовать друг с другом. А также, в «реплах» можно хранить множество файлов и каталогов. Помимо интерфейса командной строки, выполняемым программам также доступен доступ к HTTP и файловой системе.


интересная опция - это удивительно простое создание собственных курсов с заданиями с автоматической проверкой кода.

Инструмент Repl.it Classroom позволяет создавать курсы с заданиями и проектами. Вы можете задать тесты для заданий для автоматической проверки кода, указывать сроки выполнения и смотреть прогресс по каждому ученику. Эти курсы могут использовать для обучения все желающие: как отдельные "самоучки" так и ученики в классе.

Кроме того, учитель может приглашать соведущих на курс, чтобы наполнять его материалом в команде.

К тому же, можно не только создавать курс с нуля, но и клонировать уже существующие курсы, чтобы затем изменить и дополнить их.

This site was made on Tilda — a website builder that helps to create a website without any code
Create a website