Как устроен зачёт по курсу и как к нему подготовиться
| Что | Условие |
|---|---|
| Допуск | все 19 практических работ сданы не ниже «удовлетворительно» (50 баллов из 100) |
| Тест | 20 вопросов из банка по всем разделам курса, 30 минут, 40 % итога |
| Практическая задача | одна задача по билету на материале практических работ №10–19, 45 минут, 60 % итога; после сдачи — короткое устное объяснение |
| Итог | тест (0–100) · 0,4 + задача (0–100) · 0,6 |
| Итог | Оценка |
|---|---|
| 85–100 | «отлично» |
| 70–84 | «хорошо» |
| 50–69 | «удовлетворительно» |
| менее 50 | «неудовлетворительно» |
Та же шкала 85 / 70 / 50, что у каждой практической работы.
Вопросы — такие же, как в тестах разделов и блоков: «что выведет фрагмент», выбор верного утверждения, соответствие. Лучшая подготовка — пройти ещё раз тесты разделов 2, 3, 11, 12, 14, 18 и тесты блоков А, Б, В и разобрать свои ошибки.
| Разделы | Главное для теста |
|---|---|
| 1, 13 | модель задачи: входные данные, результат, ограничения; ТЗ — «что», а не «как», разделы ГОСТ 19.201-78, проверяемость |
| 2–6 | целое деление и остаток, char и коды, приоритет операций, if/switch и break, число повторений циклов, do while |
| 7–10 | значение и ссылка, перегрузка и параметры по умолчанию, массивы и границы, указатели и их разность, строки и '\0', sizeof массива и указателя |
| 11, 12 | файлы и eof, структуры и выравнивание, конструкторы и деструкторы, static, const, наследование, virtual |
| 14–16 | дескрипторы и CloseHandle, GetLastError, CreateProcessA и код завершения, атрибуты консоли, вывод блоком, потоки и их данные, гонка и синхронизация |
| 17–19 | анонимный и именованный канал, конец данных, режим сообщений; состояния страниц, кучи, new[]/delete[], DLL; сокеты: порядок вызовов, поток байтов TCP, recv = 0 |
| Билет | На материале | Тема |
|---|---|---|
| 1 | ПЗ №10 | удаление элементов массива на месте за один проход |
| 2 | ПЗ №11 | суммы строк матрицы, обмен строк |
| 3 | ПЗ №12 | сортировка столбцов матрицы по ключу |
| 4 | ПЗ №13 | обработка массива указателями без индексов |
| 5 | ПЗ №14 | строки char, свои строковые функции, аргументы командной строки |
| 6 | ПЗ №15 | функциональные требования и порядок приёмки ТЗ |
| 7 | ПЗ №16 | картинка в матрице CHAR_INFO, вывод блоком |
| 8 | ПЗ №17 | деление вычисления между потоками |
| 9 | ПЗ №18 | вывод дочернего процесса через анонимный канал |
| 10 | ПЗ №19 | TCP-сервер с протоколом строк |
Полные условия и критерии — на портале. Задача — одна программа, решаемая за 45 минут; разрешено пользоваться страницами курса и своими практическими работами. Поэтому главная подготовка — иметь под рукой свои работы в порядке и помнить, где что лежит: функцию readNumber, printError, шаблон потоков, readLine и sendAll.
Билет: ввести n (1…100) и n целых −1000…1000 с проверкой; удалить на месте, за один проход, все элементы, равные наибольшему; вывести массив и новое n. Пример: 3 9 1 9 2 → 3 1 2, n = 3.
readNumber (раздел 7), поиск максимума с начальным значением из массива (раздел 8, пункт 03), удаление двумя индексами за один проход (раздел 8, пункт 05). int max = a[0]; // максимум — начиная с элемента массива, не с 0
for (int i = 1; i < n; ++i) {
if (a[i] > max) {
max = a[i];
}
}
int kept = 0; // i читает, kept — место для оставляемого
for (int i = 0; i < n; ++i) {
if (a[i] != max) {
a[kept] = a[i];
++kept;
}
}
n = kept;
| Тест | Ожидается | Что проверяет |
|---|---|---|
| 5: 3 9 1 9 2 | 3 1 2, n = 3 | пример билета, несколько максимумов |
| 3: 4 4 4 | пусто, n = 0 | удалено всё |
| 3: −5 −2 −9 | −5 −9, n = 2 | отрицательные: максимум не 0 |
| n = 0, n = abc | повтор ввода | проверка ввода |
Устный вопрос преподавателя может быть таким: «Почему удаление по одному элементу со сдвигом хвоста ошибётся на массиве 9 9 1?» — ответ в разделе 8, пункт 05.
Итоговый проект не входит в 153 часа курса и не влияет на зачёт; это продолжение для тех, кто хочет собрать изученное в одну программу. Техническое задание на него пишется по разделу 13.
| Проект | Что делает | Из каких работ |
|---|---|---|
| Консольный чат | сервер на сокетах; приём сообщений в отдельном потоке; окно чата — второй буфер консоли | ПЗ №19, №17, №16 |
| Конвейер обработки | родитель запускает дочерний процесс и передаёт ему данные по анонимному каналу; потомок считает в нескольких потоках, результат — в файл | ПЗ №18, №17, №14 |
| «Жизнь» Конвея | поле — матрица; расчёт поколения делят потоки; отрисовка через WriteConsoleOutputA; сохранение поля в файл | ПЗ №16, №17, №11 |