Хобрук: Ваш путь к мастерству в программировании

Сложение и вычитание комплексных чисел с использованием класса в C ++

У меня есть код, который должен запросить у пользователя два набора действительных и мнимых чисел.

#include <iostream>

using namespace std;

class Complex {
    public:
        double r;
        double i;
    public:
        Complex();
        void add(Complex, Complex);
        void subtract(Complex, Complex);
        void print();
};



Complex::Complex() {
    r = i = 0;
}

void Complex::add (Complex op1, Complex op2) {
    r = op1.r+op2.r;
    i = op1.i+op2.i;
}

void Complex::subtract (Complex op1, Complex op2) {
     r = op1.r-op2.r;
     i = op1.i-op2.i;
}

void Complex::print () {
    cout << r << i;
}

int main () {
    Complex operand1, operand2, result;
    cout << "Input real part for operand one: " << endl;
    cin >> operand1.r;
    cout << "Input imaginary part for operand one: " << endl;
    cin >> operand1.i;
    cout << "Input real part for operand two: " << endl;
    cin >> operand2.r;
    cout << "Input imaginary part for operand two: " << endl;
    cin >> operand2.i;
    result.add(operand1, operand2);
    cout << "The sum is " << result.add << endl;
    result.subtract(operand1, operand2);
    cout << "The difference is " << result.subtract << endl;
}

Однако, когда я скомпилировал программу, отображается множество ошибок (std :: basic_ostream), которых я даже не понимаю.

Еще одна проблема, с которой я столкнулся, связана с функцией void :: Complex print. Внутри самого cout должно быть условие. Нет, если-еще. Но понятия не имею, что мне делать.
Программа должна работать следующим образом:
Введите действительную часть для первого операнда: 5
Введите мнимую часть для первого операнда: 2 (i для мнимого не следует записывать)
Введите действительную часть для второго операнда: 8
Введите мнимую часть для второго операнда: 1 (опять же, i не следует вводить)
/ затем он напечатает введенные (ed) числа /
(5, 2i) // на этот раз с i
(8, 1i)
/ затем ответы /
Сумма равно 13 + 3i.
Разница составляет -3,1i. // или -3, i

Пожалуйста помогите! Я новичок в C ++ и здесь, в stackoverflow, и ваша помощь будет очень признательна. Большое тебе спасибо!

16.02.2012

  • Это твоя школьная домашняя работа? 16.02.2012
  • Прочтите еще о перегрузке операторов, и вы сможете правильно писать свои функции сложения и вычитания. 16.02.2012
  • Да, пенартур. Я думаю, что сделал все, что мог, но мне все еще не хватает знаний. Мне нужно руководство. 16.02.2012
  • Какой компилятор вы используете? g ++ может быть довольно загадочным. Может попробовать clang ++? Если нет, погуглите отдельные ошибки. Вложите в это немного духа: D 16.02.2012
  • Привет, вверх ногами! Я использую CodeBlocks. Спасибо! 16.02.2012
  • Зачем изобретать велосипед? stackoverflow.com/questions/ 42833241 / 17.03.2017

Ответы:


1

Линия

cout ‹---------------- «Сумма равна» ‹* result.add ‹< endl;

неверно, поскольку add является методом, поэтому result.add будет указателем на этот метод, а cout не знает, как с ним обращаться, что заставляет компилятор выплевывать его.

Измените строку на

cout << "The sum is ";
result.print();
cout << endl;

То же самое нужно проделать и с линией

cout << "The difference is " << result.subtract << endl;

Что касается стиля кодирования, эти два метода заменяют существующее комплексное число. Возможно, было бы лучше иметь такую ​​функцию

Complex &Complex::add (const Complex &op) { 
    r += op.r; 
    i += op.i;
    return *this;
}

Это позволит вам объединить в цепочку добавления, а также просто добавить комплексное число к существующему комплексному числу.

Кроме того, вы можете сделать переменные класса r и i закрытыми. Для этого потребуется альтернативный конструктор:

Complex:Complex(double real, double imaginary) : r(real), i(imaginary) {};

Наконец, вы можете подумать о перегрузке операторов - я уверен, что вы можете погуглить, чтобы найти разумное руководство.

16.02.2012

2

В основном, после вызова result.add вы помещаете ту же функцию в поток cout, если он ничего не возвращает. Я думаю, вы хотели написать cout ‹< "сумма равна" ‹* result.print ();

16.02.2012

3

Повторите попытку с небольшими исправлениями

    #include <iostream.h>
    class Complex {
        public:
        double r; //real part
        double i; //imaginary part
        public:
        void add(Complex, Complex);
        void subtract(Complex, Complex);
        void print();
    };

    void Complex::add (Complex op1, Complex op2) {
        r = op1.r + op2.r;
        i = op1.i + op2.i;
    }

    void Complex::subtract (Complex op1, Complex op2) {
         r = op1.r - op2.r;
         i = op1.i - op2.i;
    }

    void Complex::print () {
        cout << "("<<r<<", " << i <<")";
    }

    void main () {
        Complex operand1, operand2, result;
        cout << "\nInput real part for operand one: " << endl;
        cin >> operand1.r;
        cout << "Input imaginary part for operand one: " << endl;
        cin >> operand1.i;
        cout << "Input real part for operand two: " << endl;
        cin >> operand2.r;
        cout << "Input imaginary part for operand two: " << endl;
        cin >> operand2.i;
        cout << "\nThe sum is ";
        result.add(operand1, operand2);
        result.print();
        cout << "\nThe difference is ";
        result.subtract(operand1, operand2);
        result.print();
    }
01.07.2013

4

Вы уже используете пространство имен std ::. Просто используйте в нем библиотеку комплексных чисел, как предлагает этот ответ: Добавление сложных числа с использованием классов

17.03.2017
Новые материалы

стройный-i18следующий
Представляем стройную оболочку для i18next. Эта библиотека, основанная на i18next, заключает экземпляр i18next в хранилище svelte и отслеживает события i18next, такие как languageChanged,..

Обзор 20 основных и современных методов работы с массивами в JavaScript
Вы знаете их всех? В этом коротком посте я покажу сводку методов, доступных в JavaScript для работы с массивами. Я надеюсь, что вы найдете это полезным! В конце поста вы найдете ссылку на..

Да, но я чувствую необходимость указать, что это или не единственные два.
Да, но я чувствую необходимость указать, что это или не единственные два. Обучение с подкреплением (в качестве примера) также является важным.

Получение стоковых обновлений с помощью Python
Для начинающего финансового аналитика Введение Описание: Этот проект Python создает скрипт для получения текущих обновлений акций с финансового веб-сайта Yahoo. Для этого проекта мы..

Это все, что вам нужно знать о Kotlin в 2022 году
Добро пожаловать! Kotlin — это язык программирования, популярность которого, кажется, растет, его действительно можно использовать для создания чего угодно, и если вы хотите узнать о Kotlin,..

Текстовый графический интерфейс с Lanterna на Java
Мой опыт работы с компьютерами (и текстовыми графическими пользовательскими интерфейсами) начался еще в восьмидесятых, когда я был ребенком, на дне рождения друга. Это был «новенький» Amstrad..

Перезарядите свой мозг: умопомрачительный потенциал мозговых компьютерных интерфейсов
Способность читать свои мысли и управлять объектами разумом долгое время были предметом человеческого любопытства, ограниченного областью научной фантастики… то есть до сих пор? С технологией,..


© 2024 hobruk.ru, Хобрук: Ваш путь к мастерству в программировании