Программирование (Весна 2023)

План-проспект лекций:

Выборочный обзор libc

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

Подробное рассмотрение assert, errno, signal, stddef, stdlib, time, wchar с приближенными к реальности примерами

Поверхностное рассмотрение остальных библиотек

Повторение пройденного материала, вопросы по задачам 1 семестра. Анализ нескольких работ 1 семестра, основная задача -- “отучить студентов” изобретать велосипед без необходимости, побудить активно изучать инструментарий с которым они работают.

[АРХИВ] Программирование (Весна)

Список тем лекций

Лекция 1 (07.02.22)

Лекция 2 (14.02.22)

Лекция 3 (21.02.22)

Лекция 4 (28.02.22)

Лекция 5 (05.03.22)

Лекция 6 (14.03.22)

Лекция 7 (28.03.22)

Лекция 8 (04.04.22)

Лекция 9 (11.04.22)

Лекция 10 (25.04.22)

Лекция 11 (16.05.22)

Лекция 12 (23.05.22)

----

Обзор стандартной библиотеки Си. Различие базового синтаксиса Си и Си++

Повторение пройденного материала. Представление готовых решений для большого количества типовых задач с которыми ученики столкнулись в реальности в течение первого семестра. Основная задача -- “отучить студентов” изобретать велосипед без необходимости, побудить активно изучать инструментарий с которым они работают.

Структуры. Объединения. Списки. Динамическая и статическая реализация

Повторение. Обзор основных структур данных: односвязные/двусвязные списки, однонаправленные/двунаправленные, циклические; деревья, графы, стек, очередь. На примере различных реализаций обратить внимание на то, что динамические структуры данных могут использоваться как контейнеры для данных и как контейнеры для мета-информации (например, индексы). Использование указателей на функции внутри структур, идея хранения данных вместе с функциями по их обработке. Указатель на функцию

Практики проектирования, разработки, отладки, сопровождения. Стили кодирования

Основные приемы “инжиниринга” программного обеспечения. Описание и объяснение смысла проектирования (данные, функции, интерфейсы,...) Подходы к тестированию. Проверка инвариантов, пост- пред- условий. Логгирование. Точки отладки. Комментарии и документирование. Тесты. Соглашения об именовании, стили кодирования. Примеры и объяснения.

Работа со строками. Алгоритмы на строках. Обработка текстов

Обзор алгоритмов на строках. Применение (Интернет. Биоинформатика) Алгоритмы поиска подстроки. Вычисление расстояний. Замена. Потоковая обработка строк.

Регулярные выражения

Применение. Из чего может состоять регулярное выражение, метасимволы. Find, grep демо. regex.h демо

Рекурсия и циклы

Эффективная замена рекурсии на цикл. Обзор примеров, когда предпочтительнее использовать рекурсию или циклы. Контроль стека, оценка глубины рекурсии и размера стека.

Ввод вывод. Файлы

Рекурсивный обход дерева файловой системы. Поиск файлов по атрибутам. Пример.

Разработка Command Line Interface (CLI)

Что такое и зачем. Длинные/короткие флаги. Доступ к аргументам командной строки в программе на языке С (argc, argv). getopt(), getopt_long() демо.

Хэширование и хэш-таблицы

Хэш-функция, её св-ва, идеальная хэш-ф-я, коллизии, парадокс дней рождений. Ассоциативный массив. Хэш-таблицы, с цепочками/открытой адресацией. Перехэширование.

Алгоритмы обхода, концепция итератора. Использование текстовых форматов

Пример программы осуществляющей перебор атрибутов <location> в xml.

Дополнительное задание по уроку

Введение в синтаксис С++

Наследование

Полиморфизм

Инкапсуляция. Чтение заголовка bmp

Отладка. Обработка исключительных ситуаций и ошибок

GDB, backtrace, поиск ошибки. Способы сообщения об исключительных ситуациях: возвращаемое значение, аргумент, errno, exception. Иерархия исключений.