Технический форум
Вернуться   Технический форум > Программирование > Форум программистов > C/C++/С#


Ответ
 
Опции темы Опции просмотра
Старый 02.07.2010, 22:10   #1 (permalink)
Airwind
Новичок
 
Регистрация: 02.07.2010
Сообщений: 1
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию Перегрузка операторов комплексных чисел в С++

Помогите, пожалуйста, решить задачу по С++:
Для класса "комплексное число" с данными double Re; double Im; выполнить перегрузку операций ввода, вывода, сложения (+ и +=), сложения с действительными числами и сравнения.
Airwind вне форума   Ответить с цитированием

Старый 02.07.2010, 22:10
Helpmaster
Member
 
Аватар для Helpmaster
 
Регистрация: 08.03.2016
Сообщений: 0

Вот список аналогичных топиков

Помогите с программой на C++ при помощи операторов while, do while, for
Cоздать файл целых чисел
Программа перемножения длинных чисел на С++

Старый 26.07.2010, 17:26   #2 (permalink)
artes33
Member
 
Регистрация: 26.07.2010
Сообщений: 22
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 60
По умолчанию

Если не ошибаюсь, то в C++ уже есть библиотека для работы с комплексными:

Header: <complex>

Namespace: std

Правда, там нет перегрузки I/O. Но она есть вот здесь:

_http://dmtsoft.ru/bn/370/as/oneaticleshablon/
artes33 вне форума   Ответить с цитированием
Старый 26.07.2010, 17:41   #3 (permalink)
Long Cat
Banned
 
Регистрация: 01.09.2009
Сообщений: 4,396
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 2544
По умолчанию

Я жду великое математическое открытие - сравнение двух комплексных чисел!
Или речь идет о проверке на равенство?

Последний раз редактировалось Long Cat; 26.07.2010 в 17:47
Long Cat вне форума   Ответить с цитированием
Старый 26.07.2010, 18:33   #4 (permalink)
artes33
Member
 
Регистрация: 26.07.2010
Сообщений: 22
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 60
По умолчанию

С перегруженными == и !=:

Код:
/* Использованы материалы с 
_http://dmtsoft.ru/bn/370/as/oneaticleshablon/ */

#include <iostream>
#include <cmath>
 
using namespace std;

class Complex
{
  private:
    double real;	// Действительная часть
		double image;	// Мнимая часть
	public:
		Complex() {};	// Конструктор по умолчанию
		Complex(double r) { real = r; image = 0; } // Конструктор
		Complex(double r, double i) { real = r, image = i; }	// Конструктор
		~Complex() {}	// Деструктор
		double abs()   // Модуль комплексного числа
		{
			return sqrt(pow(real, 2.0) - pow(image, 2.0));
		}
 
		Complex operator+(Complex &);	// Перегрузка оператора сложения
		Complex operator-(Complex &);	// Перегрузка оператора вычитания
		Complex operator*(Complex &);	// Перегрузка оператора умножения
		Complex operator/(Complex &);	// Перегрузка оператора деления
    bool operator == (Complex & val)
    {
      if ((this->real == val.real) && (this->image == val.image))
      {
        return true;
      }
      else
      {
        return false;
      }
    }
    bool operator != (Complex & val)
    {
      if ((this->real == val.real) && (this->image == val.image))
      {
        return false;
      }
      else
      {
        return true;
      }
    }

		// Перегрузка функции-оператора << для вывода класса Complex
		friend ostream &operator<<(ostream &, Complex &);
 
		// Перегрузка функции-оператора >> для ввода класса Complex
		friend istream &operator>>(istream &, Complex &);
	};
 
// Перегрузка +
Complex Complex::operator+(Complex &fp1)
	{
	fp1.real = real + fp1.real;
	fp1.image = image + fp1.image;
	return fp1;
	}
 
// Перегрузка -
Complex Complex::operator-(Complex &fp1)
	{
	fp1.real = real - fp1.real;
	fp1.image = image - fp1.image;
	return fp1;
	}
 
// Перегрузка *
Complex Complex::operator*(Complex &fp1)
	{
	double i, j;
	i = real * fp1.real - image * fp1.image;
	j = real * fp1.image + fp1.real * image;
	fp1.real = i;
	fp1.image = j;
	return fp1;
	}
 
// Перегрузка /
Complex Complex::operator/(Complex &fp1)
	{
	double k, i, j;
	k = fp1.real * fp1.real + fp1.image * fp1.image;
	i = (real * fp1.real + image * fp1.image) / k;
	j = (fp1.real * image - real * fp1.image) / k;
	fp1.real = i;
	fp1.image = j;
	return fp1;
	}
 
// Перегрузка оператора <<
ostream &operator<< (ostream &fo, Complex &fp)
	{
	if (fp.image < 0) fo << fp.real << "+i(" << fp.image << ")\n";
	else fo << fp.real << "+i" << fp.image << "\n";
 
	return fo;
	}
 
// Перегрузка оператора >>
istream &operator>>(istream &fi, Complex &fp)
	{
	cout << "Введите действительную часть: ";
	fi >> fp.real;
	cout << "Введите мнимую часть: ";
	fi >> fp.image;
	return fi;
	}
 
int main()
{
	// Комплексные числа
	Complex c1, c2;
 
	// Ввод комплексных чисел
	cin >> c1;
	cin >> c2;
 
	// Вывод комплексных чисел
	cout << "\nc1 = " << c1;
	cout << "c2 = " << c2;
    if (c1 == c2) 
    {
      cout << "c1 = c2\r\n";
    }
    if (c1 != c2)
    {
      cout << "c1 != c2\r\n";
    }
	cout << "Модуль c1: " << c1.abs() << "\n\n";
 
	// Вывод результатов операций
	cout << "c1 + c2 = " << (c1 + c2);
	cout << "c1 - c2 = " << (c1 - c2);
	cout << "c1 * c2 = " << (c1 * c2);
	cout << "c1 / c2 = " << (c1 / c2);
  return 0;
}
Long Cat, меня терзают смутные сомнения: а вы не бот часом? . Когда ни зайду, всегда Вы на форуме.
artes33 вне форума   Ответить с цитированием
Старый 26.07.2010, 18:34   #5 (permalink)
Long Cat
Banned
 
Регистрация: 01.09.2009
Сообщений: 4,396
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 2544
По умолчанию

Цитата:
Сообщение от artes33 Посмотреть сообщение
Long Cat, меня терзают смутные сомнения: а вы не бот часом? . Когда ни зайду, всегда Вы на форуме.
И да и нет :-)
Long Cat вне форума   Ответить с цитированием
Ads

Яндекс

Member
 
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
Старый 26.07.2010, 18:37   #6 (permalink)
Eli
TEHNARI.RU
 
Аватар для Eli
 
Регистрация: 31.03.2008
Адрес: Израиль
Сообщений: 18,407
Записей в дневнике: 7
Сказал(а) спасибо: 10
Поблагодарили 1 раз в 1 сообщении
Репутация: 14157
По умолчанию

ОФФ ТОП..
Long Cat -
Цитата:
И да и нет :-)
ты серьезно не ожидал.

artes33 - очень многие, постоянно или очень часто тут сидят
Eli вне форума   Ответить с цитированием
Старый 26.07.2010, 18:44   #7 (permalink)
Long Cat
Banned
 
Регистрация: 01.09.2009
Сообщений: 4,396
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 2544
По умолчанию

Из-за того, что на форуме отключена технология RSS, а e-mail с уведомлениями накрылся, приходится изобретать, чтобы быть в курсе событий.
Long Cat вне форума   Ответить с цитированием
Ads

Яндекс

Member
 
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
Ответ


Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Выкл.
HTML код Выкл.
Trackbacks are Вкл.
Pingbacks are Вкл.
Refbacks are Выкл.




Часовой пояс GMT +4, время: 09:26.

Powered by vBulletin® Version 6.2.5.
Copyright ©2000 - 2014, Jelsoft Enterprises Ltd.