Задание 3
Дергачев А. А. «
Физический факультет МГУ, 2025 г.
Реализовать один из предложенных классов. Требуется предоставить заголовочный файл с определением
класса, файл с реализацией всех заявленных методов и дружественных функций, а также файл с исполь-
зованием. Пока класс не готов, в последнем файле рекомендуется оставить только необходимые директивы
include, using и функцию main, внутри которой объявлена переменная требуемого класса.
После создания такого файла с использованием следует подготовить заголовочный файл <имя-класса>.h.
Написанный заголовочный файл необходимо в обязательном порядке согласовать с препода-
вателем, поскольку у него почти наверное будут замечания и дополнения! После согласования
следует подготовить файл с реализацией <имя-класса>.cpp. После этого следует скомпилировать програм-
му и устранить возникающие ошибки (для этого и нужен фактически пустой файл с реализацией). Затем
необходимо протестировать написанные функции. Наконец, следует написать требуемую программу.
Класс должен включать необходимые данные (приватные), а также функции для работы с ними. Класс
в любом случае должен иметь конструктор без параметров и конструктор с параметрами. Если класс по
смыслу поддерживает арифметические операции (возможно, не все), соответствующие операторы (в том
числе составные операторы присваивания) должны быть перегружены. Если объекты класса можно срав-
нить, должны быть перегружены операторы сравнения (скорее всего, операторы ==, != требуют перегрузки в
любом случае). Также должны быть перегружены операторы >>, << для ввода и вывода объектов. Если для
вашего класса можно определить операции со встроенными типами (например, умножить на вещественное
число), то должна быть выполнена соответствующая перегрузка (достаточно перегрузки для типа double,
повторять перегрузку для float и прочих типов не требуется). Если для вашего класса есть возможность ра-
зумно воспользоваться оператором [], его также следует перегрузить. Если ваш класс требует специальных
дополнительных функций, их также следует предоставить в интерфейсе и реализации.
1. Класс «комплексное число».
Не рекомендуется использовать в качестве имени класса complex! Выберите, например,
MyComplex, Compl, DComplex или что-нибудь получше.
Напишите программу для решения уравнения 𝑓 (𝑧) = 0 методом Ньютона. Формулы для метода Нью-
тона для функций с комплексным аргументом ничем не отличаются от его версии для вещественных
чисел. Производную, необходимую для вычисления очередного приближенного корня, посчитайте с
помощью любой конечноразностной формулы. В качестве функции 𝑓 (𝑧) можете выбрать функцию
𝑧 𝑛 + 1. Сколько комплексных корней будет иметь решаемое уравнение? Что это за корни? Какой
корень будет найден вашим алгоритмом? От чего это зависит?
2. Класс «рациональное число» (он же «простая дробь»). Напишите программу, которая предлагает
пользователю выполнить арифметические действия с простыми дробями и проверяет результат. Но-
вые задания предлагаются, пока пользователю не надоест. Дроби и действия генерируются случай-
ным образом (числители и знаменатели должны быть разумными, то есть небольшими по модулю).
По возможности протестируйте программу на опытных образцах младшего школьного возраста.
Если образцов нет под рукой, сгодится и преподаватель.
2 1
Правильно ли программа перемножит дроби и ? Может ли существовать объект вашего класса
5 2
−1
со значением ?
−3
3. Класс «геометрический вектор». Напишите класс, реализующий работу с вектором в трехмерном
пространстве. Сколько операций умножения существует для векторов?1 Какие из них следует реа-
лизовать с помощью метода, а какие — с помощью функции (возможно, дружественной)?
Не рекомендуется использовать в качестве имени класса vector! Выберите, например, vec3d,
MyVector, Vector3D или что-нибудь получше.
Напишите программу, моделирующую случайное блуждание материальной точки. На каждом сле-
дующем шаге положение точки в пространстве отличается от предыдущего на вектор, компоненты
которого являются независимыми случайными величинами со стандартным нормальным распре-
делением. Как зависит расстояние до начального положения точки от номера шага в отдельной
реализации? Как зависит среднее расстояние до начального положения, полученное по результатам
усреднения 1000 реализаций?
1 Автору известно целых 7.
4. Класс «матрица 3 × 3». Реализуйте класс для работы с вещественными матрицами размера 3 × 3.
Помимо общих требований, должна быть реализована возможность находить определитель матри-
цы.
Напишите программу, находящую хотя бы один корень уравнения det (𝑀 − 𝜆𝐼) = 0, где 𝑀 — задан-
ная невырожденная матрица, 𝐼 — единичная матрица, 𝜆 — неизвестное вещественное число. Следует
использовать численные методы решения уравнений, например, метод Ньютона.