С++ комплексные числа (деление)

Здравствуйте! Не могу понять как исправить, вот этот кусок в коде, именно по делению, потому что работает по моему не верно, или верно, в общем уже запутался.

Задание было по реализации действий над комплексными числами. Вот сам кусок кода:

    Complex Complex::operator *(const Complex &c){
    Complex t;
    t.comp.a=comp.a*c.comp.a-comp.b*c.comp.b;
    t.comp.b=comp.a*c.comp.b+comp.b*c.comp.a;
    return t;
}

А вот целая программа

# include <iostream>
# include <stdlib.h>
# include <conio.h>;
using namespace std;

struct complex{
    double a,b;
};
class Complex{
    complex comp;
public:
    Complex(double x=0,double y=0){
        comp.a=x;
        comp.b=y;
    }
    Complex operator +(const Complex &c);
    Complex operator *(const Complex &c);
    Complex operator -(const Complex &c);
    Complex operator /(const Complex &c);
    bool operator ==(const Complex &c);
    const Complex& operator =(const Complex &c){
        comp.a=c.comp.a;
        comp.b=c.comp.b;
        return *this;
    }
Complex Read();
    void Display();
};
Complex Complex::operator +(const Complex &c){
    Complex d;
    d.comp.a=comp.a+c.comp.a;
    d.comp.b=comp.b+c.comp.b;
    return d;
}
Complex Complex::operator *(const Complex &c){
    Complex t;
    t.comp.a=comp.a*c.comp.a-comp.b*c.comp.b;
    t.comp.b=comp.a*c.comp.b+comp.b*c.comp.a;
    return t;
}
Complex Complex::operator /(const Complex &c){
    Complex t;
    t.comp.a=(comp.a*c.comp.a+comp.b*c.comp.b)/(comp.a*comp.a+comp.b*comp.b);
    t.comp.b=(comp.b*c.comp.a-comp.a*c.comp.b)/(comp.a*comp.a+comp.b*comp.b);
    return t;
}
Complex Complex::operator -(const Complex &c){
    Complex y;
    y.comp.a=comp.a-c.comp.a;
    y.comp.b=comp.b-c.comp.b;
    return y;
}
bool Complex::operator ==(const Complex &c){
        if((comp.a==c.comp.a)&&(comp.b==c.comp.b))
            return true;
        return false;
    }
void Complex::Display(){
        if(comp.b>=0)
            cout<<comp.a<<"+"<<comp.b<<"i\n";
        else
            cout<<comp.a<<comp.b<<"i\n";
}
Complex Complex::Read(){
    double x,y;
    cout<<"Действительная часть: ";
    cin>>x;
    cout<<"Мнимая часть:        : ";
    cin>>y;
    Complex A=Complex(x,y);
    return A;
}
//-----------------------------------------------------------
void execute()
{   
    cout<<" Комплексные числа представляются парой действительных чисел (a, b), где\n";
    cout<<" a — действительная часть, b — мнимая часть. \n";
    cout<<" Реализация операций:\n";
    cout<<" - сложения\n";
    cout<<" - вычитания\n";
    cout<<" - умножения\n";
    cout<<" - деления\n";
}
int chois(){
    int chois_1;
    cout<<" Операции над комплексными числами\n";
    cout<<"1 - Сложение\n";
    cout<<"2 - Вычитание\n";
    cout<<"3 - Умножение\n";
    cout<<"4 - Деление\n";
    cout<<"5 - Сравнение\n";
    cout<<"\n Выберите действие : \n";
    cin>>chois_1;
    return chois_1;
}
void choise(){
    switch (chois()){
    case 1: {  
        Complex a,b;
        cout<<"Первое число:\n";
        a=a.Read();
        cout<<"Второе число:\n";
        b=b.Read();
        Complex c=a+b;
        c.Display();
        break;
            }
    case 2:{  
        Complex a,b;
        cout<<"Первое число:\n";
        a=a.Read();
        cout<<"Второе число:\n";
        b=b.Read();
        Complex c=a-b;
        c.Display();
        break;
        }
    case 3 :{  
        Complex a,b;
        cout<<"Первое число:\n";
        a=a.Read();
        cout<<"Второе число:\n";
        b=b.Read();
        Complex c=a*b;
        c.Display();
        break;
            }
    case 4:{
        Complex a,b;
        cout<<"Первое число:\n";
        a=a.Read();
        cout<<"Второе число:\n";
        b=b.Read();
        Complex c=a/b;
        c.Display();
        break;
           }
    case 5:{
        Complex a,b;
        cout<<"Первое число:\n";
        a=a.Read();
        cout<<"Второе число:\n";
        b=b.Read();
        if(a==b)
            cout<<"Комплексные числа равны\n";
        else cout<<"Комплексные числа не равны\n";
        break;
           }
default :exit(0);
    }
    system("pause");
    system("cls");
    choise();

}
int main (){
    setlocale(LC_ALL, "Russian" );
    execute();
    cout<<"\nДемонстрация метода сложения\n";
    cout<<"(2+4j)+(2-7j)= ";
    Complex A,B,C;
    A=Complex(2,4);
    B=Complex(2,-7);
    C=A+B;
    C.Display();
    cout<<"\nДемонстрация метода вычитания\n";
    cout<<"(2+4j)-(2-7j)= ";
    C=A-B;
    C.Display();
    cout<<"\nДемонстрация метода умножения\n";
    cout<<"(2+4j)*(2-7j)= ";
    C=A*B;
    C.Display();
    Complex R,T,Y;
    R=Complex(-2,3);
    T=Complex(7,1);
    cout<<"\nДемонстрация метода деления\n";
    cout<<"(-2+3j)/(7+1j)= ";
    Y=R/T;
    Y.Display();
cout<<"\nДемонстрация метода сравнения\n";
    cout<<"(-2+3j)==(7+1j)= ";
    if(R==T) 
        cout<<"Комплексные числа равны\n";
    else cout<<"Комплексные числа не равны\n";
    system("pause");
    system("cls");
    cout<<"\n   -------------------------------------------------------\n";
    choise();
}

извините кусок в начале тот вставил, вот по делению

Complex Complex::operator /(const Complex &c){
Complex t;
t.comp.a=(comp.a*c.comp.a+comp.b*c.comp.b)/(comp.a*comp.a+comp.b*comp.b);
t.comp.b=(comp.b*c.comp.a-comp.a*c.comp.b)/(comp.a*comp.a+comp.b*comp.b);
return t;

}

Внимание! Это довольно старый топик, посты в него не попадут в новые, и их никто не увидит. Пишите пост, если хотите просто дополнить топик, а чтобы задать новый вопрос — начните новый.

Ответить

Вы можете использовать разметку markdown для оформления комментариев и постов. Используйте функцию предпросмотра для проверки корректности разметки.

Пожалуйста, оформляйте исходный код в соответствии с правилами разметки. Для того, чтобы вставить код в комментарий, скопируйте его в текстовое поле ниже, после чего выделите то, что скопировали и нажмите кнопку «код» в панели инструментов. Иначе ваш код может принять нечитаемый вид.

Либо производите оформление кода вручную, следующим образом:

``` #include <iostream> using namespace std; int main() { // ... } ```

Предпросмотр сообщения

Ваше сообщение пусто.