1 курс, 1 семестр
Язык: русский

Описание

Данный курс посвящен:

  • Изучению языка программирования Си с углублением в темы, связанные с системным программированием (реализация программ, ABI, окружение исполнения)
  • Знакомству с культурой программирования: стили кодирования, статические и динамические анализаторы кода, автоматическое тестирование, ревью кода

Преподаватель

  • Соловьёв Владимир Валерьевич

Организация курса

Курс читается в течение одного учебного семестра (16 недель, 3 академических часа в неделю). В течение всего курса студенты решают практические задания, в середине курса проводится контрольная работа по теории, в конце курса - зачёт по теории.

Система оценки

Для оценки успеваемости используется балльно-рейтинговая система. За практические задания студенты получают от 1 до 6 баллов в зависимости от сложности задания (в сумме 70 баллов максимум). За контрольную работу студенты получают 5 баллов максимум.

Таким образом в течение семестра можно получить 75 баллов. Если студент получает 67 и более баллов, он получает оценку отлично автоматом. Если студент получает 50 и более баллов, он может при желании получить оценку удовлетворительно.

Студент, не получивший оценку автоматом, либо не согласный с ней, приглашается на зачёт по теории. В ходе него студент может получить 25 баллов максимум. Итоговая оценка определяется следующими границами:

  • 85 и более - отлично
  • 70 и более - хорошо
  • 50 и более - удовлетворительно

Если студент не может получить 50 баллов даже после зачёта по теории, количество дополнительных вопросов на зачёте увеличивается с целью достижения 50 баллов, но не более 54 возможных.

Практические задания

Все практические задания сдаются посредством системы GitHub Classroom. На каждое задание даётся фиксированное время выполнения (от 1 до 3 недель), за которое студент должен пройти все этапы, включающие:

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

Сложные задания также включают в себя этапы:

  • Прохождения ревью кода
  • Защиту решения на семинаре

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

Контрольная работа

Контрольная работа проходит в форме теста из 50 вопросов по 0.1 балла каждый, которые нужно решить в течение 45 минут. Темы вопросов включают весь теоретический материал первой половины курса. Результаты контрольной, помимо балла, также заносятся в ведомость контрольной недели.

Зачёт по теории

Зачёт по теории проводится на зачётной неделе в форме экзамена. Студент получает 3 случайных билета из списка, и подготавливает ответы на них с использованием любой литературы в течение часа. Затем студент получает 2 билета из того же списка по выбору преподавателя и отвечает на них без подготовки и без использования литературы. Каждый ответ оценивается на 5 баллов максимум.

Если студенту необходимо набрать больше 25 баллов на зачёте по теории для получения удовлетворительной оценки, количество билетов без подготовки увеличивается до необходимого.

Зачёт по теории можно пересдать дважды в течение экзаменационной сессии.

Презентации лекций

Все презентации лекций можно найти здесь (google slides)

# Лекция Описание Презентация
1 How This Course is Organized Содержимое курса, формат работы, условия оценки pdf, slides
2 History of the C Programming Language История языка программирования Си, цель создания, виды поведения программ pdf, slides
3 Hello, World! Программа “Hello, World!”, реализация языка программирования, IDE pdf, slides
4 How to Solve Homework Руководство по сдаче решений практических заданий pdf, slides
5 Data Storage Хранение данных, биты и байты, адресное пространство pdf, slides
6 Data Types and Encoding Типы данных, размеры типов, проблемы и способы кодировки данных pdf, slides
7 Integer Types Целые типы данных pdf, slides
8 Standard Screwdriver Set Базовый набор инструментов (функция main, глобальные переменные, ввод и вывод данных, операторы) pdf, slides
9 Functions Функции, локальные переменные, параметры, возвращаемые значения, детали реализации pdf, slides
10 Pointers Указатели, передача параметров по адресу, значения указателей pdf, slides
11 Arrays Одномерные массивы, практики работы с массивами, адресная арифметика, VLA pdf, slides
12 Dynamic Memory Динамическая память, эффективная реализация динамического массива pdf, slides
13 Multidimensional Arrays Плоские многомерные массивы, VM type, зубчатые многомерные массивы pdf, slides
14 Characters & Strings Символы и строки, стандартная библиотека работы со строками pdf, slides
15 Labels & Jumps Метки и переходы, оператор switch, способы реализации pdf, slides
16 Errors Handling Обработка ошибок, прерывание программы, коды ошибок, нелокальные переходы pdf, slides
17 Structures Композиция, структуры, выравнивание, сложные типы данных pdf, slides
18 Extended Screwdriver Set Расширенный набор инструментов (typedef, перечисления, объединения, вещественные числа, функции с переменным числом аргументов, битовые поля, указатели на функции, аргументы командной строки, файлы) pdf, slides
19 Preprocessor Препроцессор, макросы, условная компиляция, вставка файлов, генерация кода макросами pdf, slides
20 Practice Guideline (Task 25, Allocator) Практическое руководство по заданию “Аллокатор” pdf, slides
21 Practice Guideline (Task 28, Fork - Exec) Практическое руководство по заданию “Fork - Exec” pdf, slides
22 Practice Guideline (Task 29, Cooperative Multitasking) Практическое руководство по заданию “Кооперативная многозадачность” pdf, slides
23 Static Linking Статическая линковка pdf, slides

Практические задания

# Задание Баллы Срок выполнения (в неделях) Ссылка-приглашение
1 Hello, world! 1 1 Создать решение
2 Калькулятор 1 1 Создать решение
3 Калькулятор, защищённый от UB 1 1 Создать решение
4 FizzBuzz 1 1 Создать решение
5 Рисуем числами фигуры 1 1 Создать решение
6 Простые числа 1 1 Создать решение
7 Счастливые билеты 1 1 Создать решение
8 Общие делители 1 1 Создать решение
9 Простые множители 1 1 Создать решение
10 Pac-Man 1 1 Создать решение
11 Поиск элемента в массиве 1 1 Создать решение
12 Поиск подмассива в массиве 1 1 Создать решение
13 Сравнение массивов 1 1 Создать решение
14 Чтение массива неопределённой длины 1 1 Создать решение
15 Динамический массив 1 1 Создать решение
16 concat & cut 1 1 Создать решение
17 Умножение матриц 2 1 Создать решение
18 Треугольник Паскаля 2 1 Создать решение
19 Разбиение текста на слова 2 1 Создать решение
20 Преобразование строки в число 2 1 Создать решение
21 Частота встречаемости букв 3 2 Создать решение
22 Частотный словарь английского языка 3 2 Создать решение
23 Conway’s Game of Life 3 2 Создать решение
24 Динамический массив макросами 4 2 Создать решение
25 Аллокатор 5 3 Создать решение
26 Битовое множество 5 3 Создать решение
27 Длинная арифметика 5 3 Создать решение
28 Фибоначчи 6 3 Создать решение
29 Кооперативная многозадачность 6 3 Создать решение
30 C-REPL 6 3 Создать решение

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

Стандарты и спецификации

Академическая литература