/
lyapdy
/
Object_oriented_programming_cpp_318
Обзор
Документация
Войти
/
lyapdy
/
Object_oriented_programming_cpp_318
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
Аналитика
Безопасность
master
lab6/task_4.cpp
106 строк
4 KB
danillyapunov
lab6commit
10 янв 2026, 15:23
10 янв 2026, 15:23
b29f1a0
Код
Авторство
О чём код?
#include <iostream> #include <string> #include <cmath> #include "task_4.h" ComplexNumber::ComplexNumber(double re, double im) : real(re), imag(im) {} double ComplexNumber::getReal() const { return real; } double ComplexNumber::getImag() const { return imag; } double ComplexNumber::modulus() const { return hypot(real, imag); } double ComplexNumber::argument() const { return atan2(imag, real); } std::string ComplexNumber::trigonometricForm() const { char buffer[100]; snprintf(buffer, sizeof(buffer), "%.2lf*(cos(%.2lf)+isin(%.2lf))", modulus(), argument(), argument()); return buffer; } std::string ComplexNumber::exponentialForm() const { char buffer[100]; snprintf(buffer, sizeof(buffer), "%.2lf*e^(%.2lf*i)", modulus(), argument()); return buffer; } ComplexNumber ComplexNumber::operator+(const ComplexNumber& other) const { return ComplexNumber(real + other.getReal(), imag + other.getImag()); } ComplexNumber ComplexNumber::operator-(const ComplexNumber& other) const { return ComplexNumber(real - other.getReal(), imag - other.getImag()); } ComplexNumber ComplexNumber::operator*(const ComplexNumber& other) const { double new_real = real * other.getReal() - imag * other.getImag(); double new_imag = real * other.getImag() + imag * other.getReal(); return ComplexNumber(new_real, new_imag); } ComplexNumber ComplexNumber::operator/(const ComplexNumber& other) const { double denom = pow(other.getReal(), 2) + pow(other.getImag(), 2); double new_real = (real * other.getReal() + imag * other.getImag()) / denom; double new_imag = (imag * other.getReal() - real * other.getImag()) / denom; return ComplexNumber(new_real, new_imag); } ComplexNumber ComplexNumber::conjugate() const { return ComplexNumber(real, -imag); } ComplexNumber ComplexNumber::power(int exponent) const { double mod_pow = pow(modulus(), exponent); double arg_mult = argument() * exponent; return ComplexNumber(mod_pow * cos(arg_mult), mod_pow * sin(arg_mult)); } ComplexNumber ComplexNumber::squareRoot() const { double root_mod = sqrt(modulus()); double half_arg = argument() / 2; return ComplexNumber(root_mod * cos(half_arg), root_mod * sin(half_arg)); } std::ostream &operator<<(std::ostream &out, const ComplexNumber &num) { out << num.getReal() << '+' << num.getImag() << 'i'; return out; } void ComplexCalculator::run() { ComplexNumber z1(3, 4); ComplexNumber z2(-1, 2); std::cout << "Комплексные числа:\n"; std::cout << "Z1 = " << z1 << '\n'; std::cout << "Z2 = " << z2 << '\n'; ComplexNumber sum = z1 + z2; ComplexNumber diff = z1 - z2; ComplexNumber product = z1 * z2; ComplexNumber quotient = z1 / z2; std::cout << "\nОперации:\n"; std::cout << "Сумма Z1 + Z2 = " << sum << '\n'; std::cout << "Разность Z1 - Z2 = " << diff << '\n'; std::cout << "Произведение Z1 * Z2 = " << product << '\n'; std::cout << "Частное Z1 / Z2 = " << quotient << '\n'; std::cout << "\nДругие преобразования:\n"; std::cout << "Модуль Z1 = " << z1.modulus() << '\n'; std::cout << "Аргумент Z1 = " << z1.argument() << '\n'; std::cout << "Тригонометрическая форма Z1 = " << z1.trigonometricForm() << '\n'; std::cout << "Экспоненциальная форма Z1 = " << z1.exponentialForm() << '\n'; ComplexNumber cubed = z1.power(3); ComplexNumber sqrt_z1 = z1.squareRoot(); std::cout << "\nДополнительные операции:\n"; std::cout << "Куб Z1 = " << cubed << '\n'; std::cout << "Квадратный корень Z1 = " << sqrt_z1 << '\n'; }