Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

3 семестр / sr25

.cpp
Скачиваний:
0
Добавлен:
16.11.2025
Размер:
4.08 Кб
Скачать
#include <iostream>
#include <math.h>
#include <tgmath.h>
// возвести компл. число в натуральную степень,взять корень, найти все корни, возвести экспоненту в компл. степень
using namespace std;
class Complex {
  double Re, Im, Mod, Arg;
  public:
      Complex(double ReVal, double ImVal){ // конструктор для создания объектов
          Re=ReVal;
          Im=ImVal;
          Mod=sqrt(ReVal*ReVal+ImVal*ImVal);
          Arg=atan2(ImVal, ReVal);
      }
      Complex(){ // конструктор по умолчанию
          Re=0.0;
          Im=0.0;
          Mod=0.0;
          Arg=0.0;
      }
      double cRe() { return(Re); }
      double cIm() { return(Im); }
      double cMod() { return(Mod); }
      double cArg() { return(Arg); }
      Complex operator+(Complex c){ // сложение комплексных чисел
          Complex a(Re+c.cRe(), Im+c.cIm());
          return(a);
      }
      Complex operator-(Complex c){ // разность
          Complex a(Re-c.cRe(), Im-c.cIm());
          return(a);
      }
      Complex operator*(Complex c){ // произведение
          Complex a(Re*c.cRe()-Im*c.cIm(), Im*c.cRe() + Re*c.cIm());
          return(a);
      }
      Complex operator/(Complex c){ // деление
          if((c.cRe()==0)&&(c.cIm()==0)){ // проверка на деление на ноль
            cout << "\Error!\n";
            Complex a(0.0, 0.0);
            return a;
          }
          Complex a((Re*c.cRe() + Im*c.cIm())/(c.cMod()*c.cMod()), (Im*c.cRe() - c.cIm()*Re)/(c.cMod()*c.cMod()));
          return(a);
      }
      Complex Sopr(Complex c){ // сопряженное
          Complex a(c.cRe(), -c.cIm());
          return a;
      }
      Complex Obr(Complex c){ // обратить знаки
          Complex a(-c.cRe(), -c.cIm());
          return a;
      }
      Complex cPower(int n){ // возвести в целую степень
          double newArg=Arg*n;
          double newMod=pow(Mod, n);
          Complex a(newMod*cos(newArg), newMod*sin(newArg));
          return(a);
      }
      Complex cExp(){ // возвести экспоненту в компл. степень
          double newArg=Im;
          double newMod=pow(2.71828, Re);
          Complex a(newMod*cos(newArg), newMod*sin(newArg));
          return(a);
      }
      Complex cRoot(int n, Complex *p){ // взять корень от компл. числа
          if(n==0){
            cout << "\Error!\n";
            Complex a(0.0, 0.0);
            return a;
          }
          double newArg=Arg/n;
          double newMod=pow(Mod, 1/double(n));
          for(int i=0; i<n; i++){
            p[i]=Complex(newMod*cos(newArg+2*3.14159*i/n), newMod*sin(newArg+2*3.14159*i/n));
          }
      }
      void cOutput(){ // вывод
              cout << Re;
              if (Im<0) cout << Im << "i";
              else cout << "+" << Im << "i";
              cout << "\t Module = " << Mod << " Angle = " << Arg << "\n";
      }
      void cInput1(){ // ввод декартовый
              cout << "Input real part:\n";
              cin >> Re;
              cout << "Input imaginary part:\n";
              cin >> Im;
              Mod=sqrt(Re*Re+Im*Im);
              Arg=atan2(Im, Re);
      }
    void cInput2(){ // ввод полярный
              cout << "Input module:\n";
              cin >> Mod;
              cout << "Input angle:\n";
              cin >> Arg;
              Re = Mod*cos(Arg);
              Im = Mod*sin(Arg);
      }
};
int main() {
    Complex c(1.2, 1.5), d(25.3, -12.1);
    int N=0;
    cout.precision(3);
    c.cInput1();
    d.cInput1();
    c.cOutput();
    d.cOutput();
    cout << "c + d = ";
    (c+d).cOutput();
    cout << "c - d = ";
    (c-d).cOutput();
    cout << "c * d = ";
    (c*d).cOutput();
    cout << "c / d = ";
    (c/d).cOutput();
    cin >> N;
    Complex *roots=new Complex[N];
    cout << "c ^ n = ";
    c.cPower(N).cOutput();
    cout << "e ^ c = ";
    c.cExp().cOutput();
    c.cRoot(N, roots);
    cout << "Korni: \n";
    for(int i=0; i<N; i++){
        cout << "i-root(c) = ";
        roots[i].cOutput();
    }
}
Соседние файлы в папке 3 семестр