Раздел 20 — Дифференцированный зачёт

Как устроен зачёт по курсу и как к нему подготовиться

Прогресс курса Раздел 20 из 20
2 академических часа: тест по всему курсу и практическая задача по билету. Тест и билеты — на портале; раздел открывает преподаватель.
01

Допуск и состав зачёта

ЧтоУсловие
Допусквсе 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, что у каждой практической работы.

02

Тест: что повторить

Вопросы — такие же, как в тестах разделов и блоков: «что выведет фрагмент», выбор верного утверждения, соответствие. Лучшая подготовка — пройти ещё раз тесты разделов 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
03

Практическая задача: 10 билетов

БилетНа материалеТема
1ПЗ №10удаление элементов массива на месте за один проход
2ПЗ №11суммы строк матрицы, обмен строк
3ПЗ №12сортировка столбцов матрицы по ключу
4ПЗ №13обработка массива указателями без индексов
5ПЗ №14строки char, свои строковые функции, аргументы командной строки
6ПЗ №15функциональные требования и порядок приёмки ТЗ
7ПЗ №16картинка в матрице CHAR_INFO, вывод блоком
8ПЗ №17деление вычисления между потоками
9ПЗ №18вывод дочернего процесса через анонимный канал
10ПЗ №19TCP-сервер с протоколом строк

Полные условия и критерии — на портале. Задача — одна программа, решаемая за 45 минут; разрешено пользоваться страницами курса и своими практическими работами. Поэтому главная подготовка — иметь под рукой свои работы в порядке и помнить, где что лежит: функцию readNumber, printError, шаблон потоков, readLine и sendAll.

Как распределить 45 минут. 5 минут — прочитать билет, выписать входные данные, результат и ограничения (раздел 1), составить 3–4 теста: пример из билета и граничные. 25 минут — написать программу из готовых функций своих работ. 10 минут — собрать без предупреждений и прогнать тесты. 5 минут — перечитать: границы циклов, проверки результатов, закрытые дескрипторы. Работающая простая программа лучше незаконченной «красивой».
04

Разбор билета 1

Билет: ввести n (1…100) и n целых −1000…1000 с проверкой; удалить на месте, за один проход, все элементы, равные наибольшему; вывести массив и новое n. Пример: 3 9 1 9 2 → 3 1 2, n = 3.

    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 23 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.

05

Итоговый проект — по желанию

Итоговый проект не входит в 153 часа курса и не влияет на зачёт; это продолжение для тех, кто хочет собрать изученное в одну программу. Техническое задание на него пишется по разделу 13.

ПроектЧто делаетИз каких работ
Консольный чатсервер на сокетах; приём сообщений в отдельном потоке; окно чата — второй буфер консолиПЗ №19, №17, №16
Конвейер обработкиродитель запускает дочерний процесс и передаёт ему данные по анонимному каналу; потомок считает в нескольких потоках, результат — в файлПЗ №18, №17, №14
«Жизнь» Конвеяполе — матрица; расчёт поколения делят потоки; отрисовка через WriteConsoleOutputA; сохранение поля в файлПЗ №16, №17, №11

Что вы умеете после курса

Итоги

  • Составлять модель задачи и техническое задание с проверяемыми требованиями
  • Писать на C++ программы из функций: массивы, указатели, строки, файлы, структуры и классы
  • Проверять ввод, не выходить за границы, собирать без предупреждений и тестировать граничные случаи
  • Работать с Windows API: процессы, консоль, потоки и синхронизация, каналы, память, DLL
  • Писать клиент и сервер на сокетах и обрабатывать данные из сети как чужой ввод
Зачётный тест и билеты — на учебном портале. Раздел открывает преподаватель после проверки допуска — в курсе на portal.nevabit.ru.
Раздел 19: Сеть и сокеты Программа курса