• A
  • A
  • A
  • АБB
  • АБB
  • АБB
  • А
  • А
  • А
  • А
  • А
Обычная версия сайта
Бакалавриат 2026/2027

Алгоритмизация и программирование (углубленный курс)

Язык: русский
Кредиты: 8
Контактные часы: 190

Программа дисциплины

Аннотация

Дисциплина входит в Базовый профессиональный модуль (Major баз.) и осваивается на 1 курсе в модулях 1–4, являясь опорной профильной дисциплиной программы уровня ТОП ИТ «ПРО». Её цель — формирование и развитие компетенций ППК-Р1 «Способен разрабатывать и отлаживать программный код» и ППК-Р3 «Способен выполнять интеграцию программных модулей и компонентов и проверять работоспособность выпусков программного продукта», а также ОПК-1, ОПК-2. Содержание охватывает базовые алгоритмические конструкции языков C и C++, структуры данных, анализ вычислительной сложности, методы декомпозиции, отладку, тестирование и работу с системами контроля версий. Отличительной чертой уровня «ПРО» является объём практической подготовки: более половины аудиторной нагрузки приходится на семинары и практические занятия, то есть на непосредственную работу с кодом, с обязательным код-ревью и ведением репозитория. Планируемые результаты обучения заданы Компетентностно-ролевой моделью ОП ИВТ и включают знание принципов разработки и отладки кода, умение писать и отлаживать программные модули, владение средствами отладки и Git. Индустриальные партнёры предоставляют банк индустриальных кейсов, ТЗ на курсовой проект и наставников, что соответствует требованию уровня «ПРО» о работе студентов с реальными задачами индустрии с первого курса. Профессиональным результатом освоения является работоспособный программный продукт (модуль, сервис или приложение). Постреквизитами дисциплины выступают «Объектно-ориентированное программирование», «Базы данных» и «Компьютерная графика», что формирует сквозную линию инженерной подготовки разработчика.
Цель освоения дисциплины

Цель освоения дисциплины

  • Сформировать систематизированные знания и практические навыки разработки алгоритмов и программ на C/C++ для решения инженерных и прикладных задач
  • Освоить способы формализации задач и записи алгоритмов
  • Изучить алгоритмические конструкции и методы обработки массивов, матриц и строк
  • Сформировать навыки разработки программ на C и C++ без объектно-ориентированного проектирования
  • Освоить указатели, функции и динамическое распределение памяти
  • Получить навыки применения структур данных и базовых алгоритмов
  • Освоить отладку, Git, CMake и Doxygen
  • Изучить оценку временной и пространственной сложности
  • Отработать сортировки и поиск в прикладных задачах
  • Освоить модульную декомпозицию, обработку ошибок и тестирование
  • Сформировать практику работы с файлами и структурами записей
  • Освоить основы применения ИИ-инструментов для генерации и верификации кода
  • Сформировать навыки участия в конкурсном отборе и выполнения индустриальных кейсов, предоставляемых партнtрами, включая анализ ТЗ, подготовку заявки/портфолио, презентацию решения, командную разработку, код-ревью и защиту результата. Для студентов, не отобранных на кейс, – сформировать те же навыки через выполнение учебного проекта по тематике дисциплины.
Планируемые результаты обучения

Планируемые результаты обучения

  • Формулировать свойства алгоритма, базовые конструкции и способы записи
  • Составлять постановку задачи, псевдокод и блок-схему
  • Составлять нормальные, граничные и ошибочные тесты
  • Реализовывать цикл постановки, кодирования и испытаний на учебной задаче
  • Объяснять назначение IDE, компилятора, отладчика, CMake и Git.
  • Отлаживать программу в GDB и вести учебный репозиторий.
  • Описывать сборку в CMake и писать модульные тесты.
  • Использовать Git, CMake и тесты при сдаче работ.
  • Описывать хранение массивов и матриц и формулу построчного размещения
  • Объяснять представление C-строки и назначение функций <string.h>
  • Реализовывать поиск, преобразования массивов и операции над матрицами
  • Использовать библиотеку проверяемого ввода и функции обработки массивов, матриц и строк
  • Перечислять этапы трансляции, типы, операторы выбора и циклы языка C
  • Использовать форматный ввод-вывод и проверять результат чтения
  • Реализовывать программы на C с ветвлением и циклом
  • Формулировать правила объявления функций, рекурсии, указателей, стека и кучи
  • Передавать данные через параметры и указатели
  • Выделять и освобождать память и выявлять типовые ошибки владения
  • Реализовывать модульную программу с функциями, указателями и динамическими массивами
  • Сравнивать простые и эффективные сортировки по устойчивости и требованиям к памяти
  • Объяснять линейный и бинарный поиск и нотации сложности
  • Реализовывать сортировку и поиск отдельными функциями и рассчитывать число операций
  • Использовать собственные сортировки и поиск в лабораторной и контрольной работах
  • Объяснять потоки, ссылки, пространства имен, перегрузку функций и параметры по умолчанию
  • Использовать std::vector и std::string в процедурной программе
  • Реализовывать процедурную декомпозицию средствами C++ без классов
  • Описывать работу с текстовыми и бинарными файлами и модульную сборку
  • Читать записи из файла, выявлять повреждённые строки и формировать отчет
  • Разрабатывать README, описание программы, методику испытаний и комментарии к модулям с использованием систем автодокументирования
  • Различать списки, стек, очередь, BST, кучу и хэш-таблицы
  • Сравнивать представления графов и основные графовые алгоритмы
  • Реализовывать операции списка, дерева, таблицы и обход графа
  • Использовать эти структуры на несвязных и вырожденных данных
  • Формулировать ограничения ИИ-ассистентов и связанные риски
  • Составлять запрос к ИИ-ассистенту и проверять полученный код
  • Использовать ИИ только как вспомогательное средство с обязательной верификацией
  • Формулировать состав технического задания и критерии защиты проекта
  • Проектировать декомпозицию проекта, проводить review и готовить демонстрацию
  • Разрабатывать CLI-проект с процедурной архитектурой, Git, CMake, тестами и документацией
  • Участвовать в конкурсном отборе на индустриальный кейс: анализировать описание кейса, готовить мотивационную заявку/портфолио, проходить собеседование/питч, обосновывать выбор инструментов C/C++, Git, CMake, отладки и тестирования
  • Выполнять индустриальный кейс или учебный проект в команде: декомпозировать задачу, распределять роли, вести репозиторий, проходить код-ревью, готовить тесты, документацию и демонстрацию по требованиям партнера (для кейса) либо по требованиям преподавателя (для проекта)
  • Оценивать результат кейса или проекта по критериям работоспособности, качества кода, тестов, документации и соответствия техническому заданию
Содержание учебной дисциплины

Содержание учебной дисциплины

  • Введение в алгоритмизацию и формализацию задач
  • Инструменты разработки, тестирования и Git
  • Алгоритмы обработки массивов, матриц и строк
  • Базовые конструкции языка C
  • Функции, указатели и управление памятью в C
  • Алгоритмы сортировки, поиска и оценка сложности
  • Основы программирования на C++
  • Файловый ввод/вывод, модульная декомпозиция и документирование кода
  • Структуры данных: списки, деревья, графы, связанные структуры
  • Применение ИИ-инструментов в программировании
  • Реализация проекта
Элементы контроля

Элементы контроля

  • неблокирующий Активность на лекциях 1
  • неблокирующий Активность на семинарах 1
  • неблокирующий Лабораторные работы 1
  • неблокирующий Контрольная работа 1
  • неблокирующий Экзамен 1
  • неблокирующий Активность на лекциях 2
  • неблокирующий Активность на семинарах 2
  • неблокирующий Лабораторные работы 2
    Выполнение практических работ на основе методических указаний. Оценка выполнения индустриального кейса или учебного проекта учитывается в рамках лабораторных работ/проекта: прохождение конкурсного отбора (для траектории «Индустриальный кейс») либо утверждение темы проекта (для траектории «Учебный проект»); выполнение этапов; участие в код-ревью; наличие тестов; качество документации; промежуточная и итоговая демонстрация. Критерии оценивания едины для обеих траекторий; для траектории «Индустриальный кейс» дополнительно учитывается соответствие ТЗ партнёра и обратная связь наставника.
  • неблокирующий Контрольная работа 2
  • неблокирующий Экзамен 2
Промежуточная аттестация

Промежуточная аттестация

  • 2026/2027 2nd module
    0.35 * Лабораторные работы 1 + 0.2 * Контрольная работа 1 + 0.2 * Экзамен 1 + 0.15 * Активность на семинарах 1 + 0.1 * Активность на лекциях 1
  • 2026/2027 4th module
    0.2 * Контрольная работа 2 + 0.35 * Лабораторные работы 2 + 0.15 * Активность на семинарах 2 + 0.1 * Активность на лекциях 2 + 0.2 * Экзамен 2
Список литературы

Список литературы

Рекомендуемая основная литература

  • CMake для С++. Современный подход - Р.Свидзиньски - ДМК Пресс - 9785937003263 - 2025 - русский - https://hse.alpinadigital.ru/document/45316 - Alpina - 45316
  • Git для профессионального программиста - 978-5-496-01763-3 - Чакон С., Штрауб Б. - 2016 - Санкт-Петербург: Питер - https://ibooks.ru/products/350532 - 350532 - iBOOKS
  • Git для профессионального программиста, Чакон, С., 2016
  • Алгоритмический язык СИ. Примеры и задания. Часть 1 - Парасич И. В. - Издательство "Лань" - 978-5-507-50035-2 - 2024 - русский - https://e.lanbook.com/book/434090 - ЛАНЬ - 434090

Рекомендуемая дополнительная литература

  • Принципы юнит-тестирования - 978-5-4461-1683-6 - Владимир Хориков - 2021 - Санкт-Петербург: Питер - https://ibooks.ru/products/373514 - 373514 - iBOOKS
  • Принципы юнит-тестирования, Хориков, В., 2022

Авторы

  • Американов Александр Александрович
  • Зунин Владимир Викторович