Почему комплексные числа напечатаны здесь неправильно? - PullRequest
0 голосов
/ 07 июля 2019

Я пытаюсь завершить код назначения c ++ для работы с комплексными числами.Логика, которую я использовал в операциях, в значительной степени в порядке, но я не могу получить вывод, как я хочу.Это должно быть логической ошибкой, но я просто не получаю ее.

Я пробовал конструкторы, параметризованные и многое другое, но я просто не получаю это.

#include<iostream>
using namespace std;
class complex
{
     int r, i;
public:
    int Read()
    {
        cout << "Enter Real part" << endl;
        cin >> r;
        cout << "Enter Imaginary part" << endl;
        cin >> i;
        return 0;
    }

    complex Add(complex A, complex B)
    {
        complex sum;
        sum.r = A.r + B.r;
        sum.i = A.i + B.i;
        return sum;
    }
    complex Subtract(complex A, complex B)
    {
        complex diff;
        diff.r = A.r - B.r;
        diff.i = A.i - B.i;
        return diff;
    }
    complex Multiply(complex A, complex B)
    {
        complex prod;
        prod.r = A.r*B.r + A.i*B.i*(-1);
        prod.i = A.r*B.i + B.r*A.i;
        return prod;
    }
    complex Divide(complex A, complex B)
    {
        complex c_B; //conjugate of complex number B
        c_B.r = B.r;
        c_B.i = -B.i;
        complex quotient;
        complex numerator;
        complex denominator;
        numerator.Multiply(A, c_B);
        denominator.Multiply(B, c_B);
        int commonDenom = denominator.r + denominator.i;
        quotient.r = numerator.r / commonDenom;
        quotient.i = numerator.i / commonDenom;
        return quotient;
    }

    int Display()
    {
        cout << r << "+" << i << "i" << endl;
        return 0;
    }

};

int main()
{
    complex a, b, c;
    cout << "Enter first complex number" << endl;
    a.Read();
    cout << "Enter second complex number" << endl;
    b.Read();
    c.Add(a, b);
    c.Display();
    c.Multiply(a, b);
    c.Display();



    system("pause");
    return 0;
}





the expected output on input of 1+2i and 2+3i should be
3+5i
8+i

but output is
-858993460+-858993460i
-858993460+-858993460i

1 Ответ

1 голос
/ 07 июля 2019

Посмотрите на этот код:

c.Add(a, b);
c.Display(); // <- Here

Вот о чем подумать: какое комплексное число вы здесь показываете?

Взгляните на свою Add функцию. Обратите внимание, что вызов c.Add(a, b) на самом деле не устанавливает c равным сумме a и b. Вместо этого он по существу игнорирует c (просмотрите код - обратите внимание, что вы никогда не читаете и не пишете какие-либо поля объекта-получателя), а затем генерирует новое комплексное число, равное a + b. В результате, когда вы звоните c.Display(), вы не печатаете сумму. Вместо этого вы берете c, для которого никогда не инициализировались элементы данных, и распечатываете его значение.

Есть несколько различных стратегий, которые вы можете использовать, чтобы исправить это. По сути, я бы оглянулся назад на то, как вы определили Add и другие функции-члены, которые вычисляют на комплексных числах. Если эти функции-члены не используют объект-получатель, рассмотрите либо

  1. Создание их static или свободных функций, чтобы они просто оперировали двумя аргументами, а не двумя аргументами плюс неявный аргумент this, или

  2. Сделайте так, чтобы они принимали ровно один параметр, при этом два комплексных числа используются как объект-получатель и параметр. Затем у вас есть выбор: заставить эти функции изменять получатель или возвращать новые значения.

Как только вы определились, как вы хотите решить эту проблему, вернитесь назад и посмотрите на код, который вы написали, чтобы добавить и напечатать значения. Вам может потребоваться ввести больше переменных, чтобы явно фиксировать суммы, различия и т. Д. Выполненных вами операций.

Надеюсь, это поможет!

...