z = (a+c) + (b+d)i
Числа a + bi и a-bi называются сопряженными. Их сумма равна действительному числу 2а,
(а+bi) + (а-bi) = 2а.
Числа а+bi и -a-bi называются противоположными. Их сумма равна нулю. Комплексные числа равны, если равны их действительные части и коэффициенты мнимых частей: а+bi = c+di, если a = c, b = d. Комплексное число равно нулю тогда, когда его действительная часть и коэффициент мнимой части равны нулю, т.е. z=a + bi = 0, если a=0, b=0.
Действительные числа являются частным случаем комплексных чисел. Если b=0, то a+bi=a - действительное число. Если а = 0,
, то a + bi = bi – чисто мнимое число. Для комплексных чисел справедливы переместительный и сочетательный законы сложения. Их справедливость следует из того, что сложение комплексных чисел по существу сводится к сложению действительных частей и коэффициентов мнимых частей, а они являются действительными числами, для которых справедливы указанные законы.2.2.2 Вычитание комплексных чисел
Вычитание комплексных чисел определяется как действие, обратное сложению: разностью двух комплексных чисел a + bi и с + di называется комплексное число х + уi, которое в сумме с вычитаемым дает уменьшаемое. Отсюда, исходя из определения сложения и равенства комплексных чисел получим два уравнения, из которых найдем, что х = а-с, у = b-d. Значит, (а+bi) - (c+di) = (a-c) + (b-d)i.
2.2.3 Произведение комплексных чисел
Произведение комплексных чисел z1=a+bi и z2=c+di называется комплексное число
z =(ac-bd) + (ad + bc)i, z1z2 = (a + bi)(c + di) = (ac - bd) + (ad + bc)i.
Легко проверить, что умножение комплексных чисел можно выполнять как умножение многочленов с заменой i2 на –1. Для умножения комплексных чисел также справедливы переместительный и сочетательный законы, а также распределительный закон умножения по отношению к сложению.
Из определения умножения получим, что произведение сопряженных комплексных чисел равно действительному числу: (a + bi)(a - bi) = a2 + b2
2.2.4 Деление комплексных чисел
Деление комплексных чисел, кроме деления на нуль, определяется как действие, обратное умножению. Конкретное правило деления получим, записав частное в виде дроби и умножив числитель и знаменатель этой дроби на число, сопряженное со знаменателем:
3. Программная реализация решения задачи
Файл UComplex.h
//---------------------------------------------------------------------------
#ifndefUComplexH
#defineUComplexH
//---------------------------------------------------------------------------
#include <Classes.hpp>
#include <Controls.hpp>
#include <StdCtrls.hpp>
#include <Forms.hpp>
#include "HandTuning.h"
#include <ExtCtrls.hpp>
#include <Menus.hpp>
//---------------------------------------------------------------------------
class TfrmComplex : public TForm
{
__published:// IDE-managed Components
TButton *btnCalc;
THandTuning *Real1;
THandTuning *Img1;
TLabel *Label1;
TLabel *Label2;
THandTuning *Real2;
THandTuning *Img2;
TLabel *Label3;
TRadioGroup *rgrOperation;
TLabel *Label4;
THandTuning *resReal;
THandTuning *resImg;
TLabel *Label5;
TLabel *Label6;
TLabel *Label7;
TButton *btnExit;
TButton *btnClear;
TLabel *Label8;
TLabel *Label9;
TMainMenu *MainMenu1;
TMenuItem *N1;
TMenuItem *N2;
TMenuItem *N3;
TMenuItem *N4;
TMenuItem *N5;
TMenuItem *N6;
TMenuItem *N7;
void __fastcall btnCalcClick(TObject *Sender);
void __fastcall btnExitClick(TObject *Sender);
void __fastcall btnClearClick(TObject *Sender);
void __fastcall NClick(TObject *Sender);
private:// User declarations
void __fastcall Sum(double r1, double img1, double r2, double img2, double &r, double &img);
void __fastcall Subtr(double r1, double img1, double r2, double img2, double &r, double &img);
void __fastcall Mult(double r1, double img1, double r2, double img2, double &r, double &img);
void __fastcall Div(double r1, double img1, double r2, double img2, double &r, double &img);
public:// User declarations
__fastcall TfrmComplex(TComponent* Owner);
};
//---------------------------------------------------------------------------
extern PACKAGE TfrmComplex *frmComplex;
//---------------------------------------------------------------------------
#endif
Файл UComplex.cpp
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "UComplex.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma link "HandTuning"
#pragma resource "*.dfm"
TfrmComplex *frmComplex;
//---------------------------------------------------------------------------
void __fastcall TfrmComplex::Sum(double r1, double img1, double r2, double img2, double &r, double &img)
{
r = r1 + r2;
img = img1 + img2;
}
//---------------------------------------------------------------------------
void __fastcall TfrmComplex::Subtr(double r1, double img1, double r2, double img2, double &r, double &img)
{
r = r1 - r2;
img = img1 - img2;
}
//---------------------------------------------------------------------------
void __fastcall TfrmComplex::Mult(double r1, double img1, double r2, double img2, double &r, double &img)
{
r = r1 * r2 - img1 * img2;
img = r1 * img2 + img1 * r2;
}
//---------------------------------------------------------------------------
void __fastcall TfrmComplex::Div(double r1, double img1, double r2, double img2, double &r, double &img)
{
if((r2 * r2 + img2 * img2) == 0)
{
Application->MessageBoxA(L"При выполнении операции деления \nвозникла ошибка: деление на ноль. \nПроверьте числа.",
L"Ошибка", MB_OK + MB_ICONERROR);
return;
}
r = (r1 * r2 + img1 * img2) / (r2 * r2 + img2 * img2);
img = (r2 * img1 - r1 * img2) / (r2 * r2 + img2 * img2);
}
//---------------------------------------------------------------------------
__fastcall TfrmComplex::TfrmComplex(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TfrmComplex::btnCalcClick(TObject *Sender)
{
double r1 = Real1->Value;
double img1 = Img1->Value;
double r2 = Real2->Value;
double img2 = Img2->Value;
double real = 0;
double img = 0;
switch(rgrOperation->ItemIndex)
{
case 0:
Sum(r1, img1, r2, img2, real, img);
break;
case 1:
Subtr(r1, img1, r2, img2, real, img);
break;
case 2:
Mult(r1, img1, r2, img2, real, img);
break;
case 3:
Div(r1, img1, r2, img2, real, img);
break;
}
resReal->Value = real;
resImg->Value = img;
}
//---------------------------------------------------------------------------
void __fastcall TfrmComplex::btnExitClick(TObject *Sender)
{
this->Close();
}
//---------------------------------------------------------------------------
void __fastcall TfrmComplex::btnClearClick(TObject *Sender)
{
Real1->Value = 0;
Img1->Value = 0;
Real2->Value = 0;
Img2->Value = 0;
resReal->Value = 0;
resImg->Value = 0;
}
//---------------------------------------------------------------------------
void __fastcall TfrmComplex::NClick(TObject *Sender)
{
rgrOperation->ItemIndex = ((TMenuItem*)Sender)->Tag;
btnCalc->Click();
}
//---------------------------------------------------------------------------
4. Пример выполнения программы
Пример 1
Рисунок 1 – Входные данные
Пример 2
Рисунок 2 – Выходные данные
Пример 3
Рисунок 3 – Входные данные
Пример 4
Рисунок 4 – Входные данные
Пример 5
Рисунок 5 – Входные данные
Пример 6
Рисунок 6 – Входные данные
Пример 7
Рисунок 7 – Входные данные
Пример 8
Рисунок 8 – Входные данные
ЗАКЛЮЧЕНИЕ
Применение комплексных чисел позволяет удобно и компактно сформулировать многие математические модели, применяемые в математической физике и в естественных науках - электротехнике, гидродинамике, картографии, квантовой механике, теории колебаний и многих других.
Итогом работы можно считать созданную программу для реализации арифметических операций над комплексными числами. Созданный алгоритм и его программная реализация могут служить органической частью решения более сложных задач.
СПИСОК ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ и литературы
1. Архангельский А.Я. Программирование в С++ Builder 6. [Текст] / А.Я.Архангельский. – М.: Бином, 2003. С. 1154.
2. Ахо А.. Построение и анализ вычислительных алгоритмов [Электронный ресурс] / А. Ахо, Дж. Хопкрофт, Дж. Ульман. – М.: Мир. 1999. С. 143.
3. Выгодский М.Я. Справочник по элементарной математике. [Текст] / М.Я. Выгодский – М.: АСТ: Астрель, 2006. С. 509.
4. Дадаян А.А. Алгебра и геометрия. [Текст] / А.А Дадаян, В.А. Дударенко. – М.: Минск, 1999. С. 342.
5. Камалян Р.З. Высшая математика. [Текст] / Р.З. Камалян. – М.: ИМСИТ, 2004. С.310.
6. Комплексное число [Электронный ресурс] – Режим доступа: http://ru.wikipedia.org/wiki/Комплексное_число.
7. Мейерс С. Наиболее эффективное использование С++. [Электронный ресурс] / С. Мейерс. – М.: ДМК Пресс, 2000. С. 304.
8. Эккель Б. Введение в стандартный С++. [Электронный ресурс] / Б. Эккель. – М.:Питер, 2004. С. 572.