Пример оформления отчёта
заготовка.docx
Готовый шаблон для лабораторной работы. Скачайте файл и заполните его своими данными.
Скачать шаблон~/cpp/labs/
Пример оформления отчёта
Готовый шаблон для лабораторной работы. Скачайте файл и заполните его своими данными.
Скачать шаблонБлок-схема алгоритма
Редактор блок-схем в браузере. Нарисуйте алгоритм и экспортируйте схему для отчёта.
Перейти в draw.ioЗаполните титульный лист своими данными. Для каждого задания укажите условие и вариант, ход решения, блок-схему, исходный код, таблицу тестов и полученные результаты. В конце кратко опишите, что проверили и каких результатов добились.
Покажите начало и конец, ввод и вывод, вычисления и переходы между ними. Если в вашем решении есть условие, подпишите выходы «да» и «нет»; для цикла покажите проверку и возврат к ней. Схема должна соответствовать вашей программе.
Сохраните редактируемый файл .drawio, а в отчёт вставьте экспортированную схему в SVG или PNG. Блок-схему составляйте до программирования и уточняйте после изменений алгоритма.
Эти требования действуют для всех лабораторных. Оформление должно помогать читать и проверять решение: по именам должно быть понятно, какие данные хранятся в переменной и какую задачу выполняет функция.
Это правила оформления курса. Стиль имён и положение констант не являются требованиями языка C++. Перед первой работой разберите параметры и результат функции, именованные константы и проверку ввода, затем объясните каждую часть общей заготовки своими словами.
calculateRectangleArea, второе — countFullMeters. При необходимости выделяйте дополнительные вспомогательные функции. Не размещайте решения обоих заданий целиком в main.printLabInfo печатает номер лабораторной, вариант, ФИО и группу. Вызывайте её один раз в начале main, до ввода данных и результатов заданий.camelCase: elementCount, lengthCentimeters, calculateAverage. Избегайте aaa, tmp1, qwerty и транслита. Короткие i, j уместны для индексов; x, y — для аргументов формулы, если их смысл пояснён.const или constexpr и стиль UPPER_SNAKE_CASE: ARRAY_SIZE, LAB_NUMBER, CENTIMETERS_PER_METER. Размеры из условия, коэффициенты и настройки не должны повторяться по программе как необъяснённые числа. Объявляйте константы перед использованием, отдельно от вычислений.Демонстрационные задания: вычислить площадь прямоугольника и число полных метров в заданном количестве сантиметров. Замените задания, номер работы, вариант, ФИО и группу своими данными. Константы объявлены в глобальной области, сразу после подключений и до определений функций. Из main они передаются в функции параметрами.
#include <iostream>
#include <string>
constexpr int LAB_NUMBER = 1;
constexpr int VARIANT_NUMBER = 0; // учебный пример
constexpr int CENTIMETERS_PER_METER = 100;
const std::string STUDENT_NAME = "Фамилия Имя";
const std::string GROUP_NAME = "Группа";
void printLabInfo(int labNumber, int variantNumber,
std::string studentName, std::string groupName) {
std::cout << "Лабораторная работа №" << labNumber << '\n'
<< "Вариант: " << variantNumber << '\n'
<< "Студент: " << studentName << '\n'
<< "Группа: " << groupName << "\n\n";
}
// Задание 1: вычислить площадь прямоугольника.
double calculateRectangleArea(double width, double height) {
return width * height;
}
// Задание 2: найти число полных метров в длине, заданной в сантиметрах.
int countFullMeters(int lengthCentimeters, int centimetersPerMeter) {
return lengthCentimeters / centimetersPerMeter;
}
int main() {
printLabInfo(LAB_NUMBER, VARIANT_NUMBER, STUDENT_NAME, GROUP_NAME);
double width = 0.0;
double height = 0.0;
int lengthCentimeters = 0;
std::cout << "Введите ширину, высоту и длину в сантиметрах: ";
if (!(std::cin >> width >> height >> lengthCentimeters)) {
std::cerr << "Ошибка: требуются два числа и целое число.\n";
return 1;
}
if (width <= 0.0 || height <= 0.0 || lengthCentimeters < 0) {
std::cerr << "Ошибка: стороны должны быть положительными, длина — неотрицательной.\n";
return 1;
}
double rectangleArea = calculateRectangleArea(width, height);
int fullMeters = countFullMeters(lengthCentimeters, CENTIMETERS_PER_METER);
std::cout << "Задание 1. Площадь: " << rectangleArea << '\n';
std::cout << "Задание 2. Полных метров: " << fullMeters << '\n';
return 0;
}В примере constexpr задаёт целочисленные константы, известные при компиляции, а const запрещает менять строки с данными студента. Число 100 именовано один раз; функция второго задания получает его как параметр. Обе функции вычислений возвращают результат, а печать выполняет main.
Повторить: main · создание функций · области видимости · ввод и вывод.
Пример: для массива из трёх элементов программа допускает индекс 3. Сократите вход до трёх значений, запишите ожидаемый отказ и выдвиньте гипотезу о неверной границе. Найдите проверку index > size и замените её на index >= size до обращения к элементу. Повторите входы 0, 2, 3 и пустой массив; сохраните найденный случай в таблице тестов. Исправление проверяется повторным запуском.
Для составного условия различайте два вида покрытия. Покрытие решений проверяет истинный и ложный исход всего if. Покрытие условий дополнительно требует истинного и ложного значения каждой проверяемой части. Для a>0 && b!=0 возьмите (1,1), (0,1), (1,0); поясните короткое замыкание во втором случае. Одних обычных значений для такой проверки недостаточно.
Сначала запишите ожидаемый ответ, затем выполните программу и сравните результат. Корректный отказ на недопустимых данных — успешный тест. Падение, зависание или неверный ответ — неуспешный. Компиляция без ошибок сама по себе ещё не подтверждает правильность решения.
Ниже показаны типы данных и основные исходы проверки. Базовый пример: программа читает два вещественных числа a и b и вычисляет a / b. При b = 0, ошибке формата или отсутствии одного числа она должна вывести «Ошибка входных данных» и завершить вычисление. Последние строки отдельно показывают ошибки сборки, формат, ограничения ресурсов и незапущенный тест; лимиты проверяйте, если они установлены заданием.
| Ситуация | Вход | Ожидается | Фактически | Итог |
|---|---|---|---|---|
Обычные данные | 6 3 | Результат: 2 | Результат: 2 | Пройден |
Допустимая граница | 0 3 | Результат: 0 | Результат: 0 | Пройден |
Отрицательное значение | -6 3 | Результат: -2 | Результат: -2 | Пройден |
Запрещённое значение | 6 0 | Ошибка входных данных | Ошибка входных данных | Пройден |
Неверный формат | abc 3 | Ошибка входных данных | Ошибка входных данных | Пройден |
Данных не хватает | 6 и конец ввода | Ошибка входных данных | Ошибка входных данных | Пройден |
Ошибка вычислений | 6 3 | Результат: 2 | Результат: 3 | Не пройден |
Ошибочно отклонён верный ввод | 0 3 | Результат: 0 | Ошибка входных данных | Не пройден |
Ошибочно принят неверный ввод | 6 0 | Ошибка входных данных | inf или продолжение вычислений | Не пройден |
Аварийное завершение | 6 3 | Результат: 2 и завершение | Падение программы | Не пройден |
Зависание | 6 3 | Результат: 2 и завершение | Программа не заканчивает работу | Не пройден |
Неполный вывод | 6 3 | Результат: 2 | Нет ответа или нельзя понять, к какому заданию он относится | Не пройден |
Нарушен требуемый формат | 6 3 | Только число 2, если так требует условие | Ответ вычислен верно, но формат другой | Не пройден |
Ошибка компиляции | До запуска | Исполняемая программа | Пропущена точка с запятой; компилятор отклонил код | Тесты не выполнены |
Ошибка компоновки | До запуска | Исполняемая программа | Вызвана объявленная функция без определения | Тесты не выполнены |
Превышен лимит памяти | Большой допустимый набор | Результат в установленном лимите | Программа бесконтрольно выделяет память | Не пройден |
Тест не запускался | 6 3 | Результат: 2 | Фактический результат отсутствует | Не выполнен |
Для своей задачи составьте такую же таблицу. Проверьте обычный вход, минимальные и максимальные допустимые значения, неверный формат и нарушения ограничений. Для контейнеров добавьте пустой набор и один элемент; для условий — обе ветви; для циклов — ноль, один и несколько проходов, если они допустимы условием.
Вещественные результаты сравнивайте с обоснованным допуском. Например, для ответа 1 / 3 при абсолютном допуске 0.000001 значение 0.333333 подходит, а 0.33 — нет. Отдельно убедитесь, что программа соблюдает требуемый формат вывода.
Линейные алгоритмы, вычисление выражений, ввод исходных данных и вывод результатов.
Типы, деление и остаток · Вещественные вычисления
Условия, альтернативы, переключатели и структурное тестирование программы.
Типы, деление и остаток · Вещественные вычисления · Условия и логические операции
Три задания: while и do while, вычисления циклом for и таблица значений функции.
Типы, деление и остаток · Вещественные вычисления · Условия и логические операции · Цикл и накопление результата
Обработка символов, поиск, преобразование слов и проверка границ строки.
Условия и логические операции · Цикл и накопление результата · find, substr, erase, insert и getline
Одномерные и многомерные массивы, индексы, поиск и преобразование элементов.
Условия и логические операции · Цикл и накопление результата · Размер, индекс и обход vector · Экстремумы, индексы и матрицы
Пользовательские функции, передача массивов и отделение вычислений от ввода-вывода.
Условия и логические операции · Цикл и накопление результата · find, substr, erase, insert и getline · Экстремумы, индексы и матрицы · Передача диапазона и длины · Изменение через ссылку и выходные параметры
Обработка числового файла, текстовой матрицы и подсчёт строк и слов в тексте.
Условия и логические операции · Цикл и накопление результата · find, substr, erase, insert и getline · Открытие, последовательное чтение и ошибки файла
Два задания: генератор функций с замыканием и простая рекурсивная функция.
Условия и логические операции · Время жизни объекта · Лямбда и захват настроек по значению · База рекурсии, шаг и возврат результата