User Tools

Site Tools


start:prog2:lectures

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
start:prog2:lectures [2022/12/10 09:08]
127.0.0.1 external edit
start:prog2:lectures [2023/06/01 10:36]
yaroslav.gosudarkin
Line 1: Line 1:
-=== Программирование (Весна) ===+=== Программирование (Весна 2023) === 
 + 
 +План-проспект лекций:​ 
 + 
 +== Выборочный обзор libc (09.02) == 
 + 
 +  - Вспоминаем организационные моменты (лабораторные,​ курсы, рейтинговая система,​ экзамен) 
 +  - Подробное рассмотрение assert, errno, signal, stddef, stdlib, time, wchar с приближенными к реальности примерами 
 +  - Поверхностное рассмотрение остальных библиотек 
 +  - Повторение пройденного материала,​ вопросы по задачам 1 семестра.  
 + 
 +== Структуры данных + остаточный обзор libc (02.03) == 
 + 
 +  - Рассмотрение оставшихся после string.h библиотек 
 +  - Введение в структуры данных -- массивы,​ списки,​ деревья,​ графы, примеры работы со списком 
 + 
 +== Списки (09.03) == 
 + 
 +  - Разбор списков -- написать вместе со студентами за лекцию готовый код линейного списка (insert, remove, find, create, printList).  
 + 
 +== Разбор стека и очереди (16.03) == 
 + 
 +  - Разбор реализации стека и очереди на списке и на массиве,​ сравнение реализаций 
 + 
 +== Введение в С++ (23.03) == 
 + 
 +  - Что такое язык С++, его назначение 
 +  - Пространства имен, подключение библиотек 
 +  - Инкапсуляция на примере структур данных из прошлых занятий (список,​ стек) 
 +  - Классы,​ методы (конструктор,​ деструктор),​ спецификаторы доступа 
 + 
 +== Рекурсия,​ работа с файлами,​ обход файлового дерева (30.03) == 
 + 
 +  - Рекурсия,​ глубина рекурсии 
 +  - Файловый дескриптор -- что это такое, и зачем нужно. Сценарии:​ tail и ls -l /​proc/​.....;​ lsof и несколько tail-ов; fprintf и IO потоки; ​  
 +  - Базовые функции работы с файлами fopen, fclose, fread, fwrite, fseek, ftell и тп. Дескриптор в директории 
 +  - Рекурсивный обход файловой системы 
 +  - (optional) Getopt и аргументы командной строки 
 + 
 +== Getopt, отладка в виртуальных машинах,​ С++ (06.04) == 
 + 
 +  - Пара слов по контрольной -- какие задачи,​ какое выбрать время 
 +  - Разработка программ -- почему важно запускать и тестировать свои программы в виртуальных машинах 
 +  - С++ -- исключения,​ new/​delete 
 +  - Getopt и аргументы командной строки 
 +  - Отладка программ в виртуальных машинах через IDE 
 +  - (optional) Системы сборки -- Makefile (вспомнить),​ Autotools 
 + 
 + 
 +== Autotools, словари,​ инкапсуляция (как сломать,​ сделать в Си) (13.04) == 
 + 
 +  - Системы сборки -- Makefile (вспомнить),​ Autotools 
 +  - Темы для контрольной + словари (от простой реализации до хэш-таблиц) 
 +  - Как сломать инкапсуляцию в С++ 
 +  - Как сделать инкапсуляцию в Си 
 + 
 + 
 +== Разбор контрольной (20.04) == 
 + 
 +  - Примеры работ 
 +  - Разбор сложных задач 
 + 
 +== Курсовая,​ BMP (27.04) == 
 + 
 +  - Базовая задача курсовой -- как может выглядеть решение 
 +  - Поверхностный разбор структуры BMP (особое внимание на сложные поля, таблицу цветов) 
 +  - Sizeof struct, директива pragma 
 +  - Как создать BMP с нуля 
 +  - Пример,​ как считать,​ изменить и сохранить BMP файл. Как учесть все версии заголовков. 
 + 
 +== Курсовая,​ libpng (03.05) == 
 + 
 +  - Структура формата PNG -- сигнатура и чанки (критические/​необязательные/​пользовательские) 
 +  - Разбора примера READ/WRITE, как обработать пиксельные данные 
 + 
 +== Курсовая,​ libpng (18.05) == 
 + 
 +  - Shared-библиотеки -- как создать,​ как использовать 
 +  - Системы сборки -- Autotools, CMake 
 +  - C++ ссылки (объявления,​ копии, присваивание) 
 + 
 + 
 +== Регулярные выражения (25.05) == 
 + 
 +  - Как работать с libc и другими .so библиотеками в Python 
 +  - Doxygen, пример на стеке 
 +  - Регулярные выражения -- как использовать,​ примеры 
 + 
 +== Регулярные выражения (01.06) == 
 + 
 +  - Регулярные выражения -- Libc 
 +  - Полезные утилиты,​ которые стоит помнить:​ find, grep, ssh, gpg 
 +  - История терминала (history) -- как увеличить хранилище,​ где посмотреть (разные пользователи),​ reverse-search 
 +  - Valgrind (+ callgrind) -- анализ программы 
 +  - Программные каналы -- mkfifo 
 + 
 +=== [АРХИВ] ​Программирование (Весна) ===
 <​note>​[[https://​docs.google.com/​document/​d/​e/​2PACX-1vREUCMXjSkfCWTX92KUpUsrcjpnuiEifOgge-vGberr3OOVYM8EduVJWnRDEkzkzzEDL9R8nJoFqziU/​pub|Список тем лекций]]</​note>​ <​note>​[[https://​docs.google.com/​document/​d/​e/​2PACX-1vREUCMXjSkfCWTX92KUpUsrcjpnuiEifOgge-vGberr3OOVYM8EduVJWnRDEkzkzzEDL9R8nJoFqziU/​pub|Список тем лекций]]</​note>​
  
Line 19: Line 115:
  
 == Обзор стандартной библиотеки Си. Различие базового синтаксиса Си и Си++ == == Обзор стандартной библиотеки Си. Различие базового синтаксиса Си и Си++ ==
- 
-Повторение пройденного материала. Представление готовых решений для большого количества типовых задач с которыми ученики столкнулись в реальности в течение первого семестра. Основная задача -- "​отучить студентов"​ изобретать велосипед без необходимости,​ побудить активно изучать инструментарий с которым они работают. 
  
 == Структуры. Объединения. Списки. Динамическая и статическая реализация ==  == Структуры. Объединения. Списки. Динамическая и статическая реализация == 
  
-Повторение. Обзор основных структур данных:​ односвязные/​двусвязные списки,​ однонаправленные/​двунаправленные,​ циклические;​ деревья,​ графы, стек, очередь. На примере различных реализаций обратить внимание на то, что динамические структуры данных могут использоваться как контейнеры для данных и как контейнеры для мета-информации (например,​ индексы). Использование указателей на функции внутри структур,​ идея хранения данных вместе с функциями по их обработке. 
 [[.:​lectures:​code2]] [[.:​lectures:​code2]]
  
 == Практики проектирования,​ разработки,​ отладки,​ сопровождения. Стили кодирования ==  == Практики проектирования,​ разработки,​ отладки,​ сопровождения. Стили кодирования == 
- 
-Основные приемы "​инжиниринга"​ программного обеспечения. Описание и объяснение смысла проектирования (данные,​ функции,​ интерфейсы,​...) Подходы к тестированию. Проверка инвариантов,​ пост- пред- условий. Логгирование. Точки отладки. Комментарии и документирование. Тесты. Соглашения об именовании,​ стили кодирования. Примеры и объяснения. 
  
 == Работа со строками. Алгоритмы на строках. Обработка текстов ==  == Работа со строками. Алгоритмы на строках. Обработка текстов == 
- 
-Обзор алгоритмов на строках. Применение (Интернет. Биоинформатика) Алгоритмы поиска подстроки. Вычисление расстояний. Замена. Потоковая обработка строк. 
  
 == Регулярные выражения ==  == Регулярные выражения == 
-Применение. Из чего может состоять регулярное выражение,​ метасимволы. Find, grep демо. regex.h демо 
  
 == Рекурсия и циклы ==  == Рекурсия и циклы == 
- 
-Эффективная замена рекурсии на цикл. Обзор примеров,​ когда предпочтительнее использовать рекурсию или циклы. Контроль стека, оценка глубины рекурсии и размера стека. ​ 
  
 == Ввод вывод. Файлы ==  == Ввод вывод. Файлы == 
  
-Рекурсивный обход дерева файловой системы. Поиск файлов по атрибутам. ​[[.:​lectures:​code3| Пример.]]+[[.:​lectures:​code3| Пример.]]
  
 == Разработка Command Line Interface (CLI) ==  == Разработка Command Line Interface (CLI) == 
- 
-Что такое и зачем. Длинные/​короткие флаги. Доступ к аргументам командной строки в программе на языке С (argc, argv). getopt(), getopt_long() демо. ​ 
  
 == Хэширование и хэш-таблицы ==  == Хэширование и хэш-таблицы == 
- 
-Хэш-функция,​ её св-ва, идеальная хэш-ф-я,​ коллизии,​ парадокс дней рождений. Ассоциативный массив. Хэш-таблицы,​ с цепочками/​открытой адресацией. Перехэширование. ​ 
  
 == Алгоритмы обхода,​ концепция итератора. ​ Использование текстовых форматов ==  == Алгоритмы обхода,​ концепция итератора. ​ Использование текстовых форматов == 
Line 68: Line 150:
 == Отладка. Обработка исключительных ситуаций и ошибок ==  == Отладка. Обработка исключительных ситуаций и ошибок == 
  
-GDB, backtrace, поиск ошибки. Способы сообщения об исключительных ситуациях:​ возвращаемое значение,​ аргумент,​ errno, exception. Иерархия исключений. 
- 
-=== Дополнительные материалы и темы === 
- 
- 
-== Форматы файлов. Использование текстовых форматов ==  
- 
-TBD 
- 
- 
-== Динамические библиотеки. Использование сторонних библиотек ==  
- 
-TBD 
- 
-== Безопасное программирование ==  
- 
-TBD 
- 
-== Программные интерфейсы. Взаимодействие языков программирования. Соглашения о вызовах. ABI ==  
- 
-TBD 
-  
start/prog2/lectures.txt · Last modified: 2023/06/01 10:36 by yaroslav.gosudarkin