Бакалавриат
2026/2027





Алгоритмизация и программирование (углубленный курс)
Статус:
Курс обязательный (Информатика и вычислительная техника)
Кто читает:
Департамент компьютерной инженерии
Когда читается:
1-й курс, 1-4 модуль
Охват аудитории:
для своего кампуса
Язык:
русский
Кредиты:
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 module0.35 * Лабораторные работы 1 + 0.2 * Контрольная работа 1 + 0.2 * Экзамен 1 + 0.15 * Активность на семинарах 1 + 0.1 * Активность на лекциях 1
- 2026/2027 4th module0.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