Требования к лабораторной работе 1¶
К лабораторной работе 1 · Общие правила курса
Что требуется в работе¶
- Правильно оформить каждый исходный файл.
- Записать формулу, обозначения и единицы величин.
- Ввести исходные данные, проверить их, выполнить расчёт и вывести результат.
- До запуска составить ожидаемые результаты тестов по классам эквивалентности.
- Во втором задании исследовать влияние типа данных на результат.
Два задания — два исходных файла¶
Имена файлов: lab01_vNN_task1.cpp и lab01_vNN_task2.cpp, где NN — номер варианта.
Например: lab01_v07_task1.cpp и lab01_v07_task2.cpp.
Оформите каждый файл по общим правилам и шаблонам комментариев.
В каждом задании используется свой main. Собирайте файлы отдельно: например,
создайте по проекту на задание. Два файла с main нельзя одновременно включать
в сборку одной программы.
Требования к программе¶
- Язык C++; весь исполняемый код пишется в
main. Собственные функции не нужны. - Для ввода используйте
scanf_s, для вывода —printf, подключите<stdio.h>. - Предложите пользователю ввести данные: укажите величины, единицы и порядок.
- Проверяйте результат чтения до использования переменных в расчёте.
- Проверяйте все ограничения из варианта до деления и остальных вычислений.
- При ошибке чтения выводите
Input error, при недопустимых значениях —Data error. После сообщения завершайте программу черезreturn 1;, без численного результата. - При корректном вводе выполните расчёт и выведите подписанный результат с единицами.
В конце —
return 0;. - Не подменяйте ввод числами, записанными в исходном коде.
Формат данных и область проверки¶
Используйте десятичную точку: 2.5. Отдельные числа разделяйте пробелами или переводами строк.
В задании 1 допускаются целые и дробные значения. В задании 2 исходные числа целые,
чтобы все три расчёта начинались с одних и тех же значений.
В этой работе проверяем успешность числового чтения и ограничения задачи.
Полная проверка строки, включая лишние символы после последнего числа, не требуется.
Например, успешное чтение числового префикса ещё не доказывает, что вся строка корректна.
Для теста ошибки чтения используйте abc вместо нужного числа, а не 12abc.
Проверка недостающих чисел требует завершения потока ввода: обычный Enter сам по себе
не означает конец ввода, программа может продолжать ждать.
Тесты с числами за пределами представимого диапазона типа сюда не входят.
Проверку ограничений проводите на представимых значениях: например, при верхней
границе 1000 используйте 1001. scanf_s не заменяет полный разбор произвольного текста.
Числовые пределы в вариантах заданы для учебного эксперимента. Они не являются паспортными характеристиками реального оборудования.
Форматы вывода и допуски¶
В задании 1 для вывода используйте %.10lf. При проверке допустимо отличие численного
ответа от математического эталона не более 1e-9 * max(1, |эталон|); здесь max
означает большее из двух чисел, а вертикальные черты — модуль. Вычислять этот допуск
в программе не требуется. В задании 2 используйте форматы и правила из
памятки о точности: различия типов там являются предметом исследования.
Перед защитой¶
Проверьте, что оба файла собираются отдельно; шапки и тесты заполнены; нормальные и ошибочные данные проверены; формула в шапке соответствует коду. Для задания 2 добавьте после программы комментарий с наблюдениями о точности.
Сравнение типов в задании 2¶
Исходные целые значения точно представимы в используемых типах. Ограничения
вариантов подобраны так, чтобы расчёты в 32-битном int не переполнялись.
Для коротких выражений этой лабораторной допустимое отличие от математического эталона составляет:
float:2e-6 * max(1, |эталон|);double:2e-14 * max(1, |эталон|).
Здесь max означает большее из двух чисел, вертикальные черты — модуль.
Вычислять допуск в самой программе не требуется. Выводите float через %.9f,
а double через %.17lf: девять и семнадцать знаков после точки соответственно.
Дополните блок тестов в файле задания 2 следующими записями для наборов А, Б и собственного набора:
/*
Сравнение точности. Набор <А, Б или собственный>.
Ввод: <значения>.
Математический результат: <точная дробь или точное число>.
Ожидается int: <число>.
Ожидается float: <приближение с допуском>.
Ожидается double: <приближение с допуском>.
Фактический вывод: <три результата после запуска>.
*/
Эти записи должны входить во второй многострочный комментарий после шапки. После программы добавьте отдельный комментарий с выводами о точности.