📄 cmpxpoly.cpp
字号:
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
//
// File = cmpxpoly.cpp
//
// class that implements a polynomial with
// complex-valued coefficients
//
#include <math.h>
#include "cmpxpoly.h"
//======================================================
// default constructor
CmplxPolynomial::CmplxPolynomial( )
{
Degree = 0;
Coefficient = (double_complex*) new double[2];
Coefficient[0] = double_complex( 0.0, 0.0);
return;
};
//===================================================================
// copy constructor
CmplxPolynomial::CmplxPolynomial( const CmplxPolynomial& original )
{
Degree = original.Degree;
Coefficient = (double_complex*) new double[2*(Degree+1)];
for( int i=0; i<=Degree; i++)
{
Coefficient[i] = original.Coefficient[i];
}
return;
};
//===================================================================
// constructor for initializing a binomial
CmplxPolynomial::CmplxPolynomial( const double_complex coeff_1,
const double_complex coeff_0 )
{
Degree = 1;
Coefficient = (double_complex*) new double[4];
Coefficient[0] = coeff_0;
Coefficient[1] = coeff_1;
return;
}
//=================================================================
// assignment operator
CmplxPolynomial& CmplxPolynomial::operator= (const CmplxPolynomial& right)
{
if (Coefficient != right.Coefficient)
{
//-------------------------------------------------------------
// Get rid of old coefficient array to make way for a new one
// of the correct length for the new polynomial being assigned
delete [] Coefficient;
Degree = right.Degree;
Coefficient = (double_complex*) new double[2*(Degree+1)];
for( int i=0; i<=Degree; i++)
{
Coefficient[i] = right.Coefficient[i];
}
}
return *this;
}
//===================================================================
// multiply assign operator
CmplxPolynomial& CmplxPolynomial::operator*= (const CmplxPolynomial &right)
{
//-----------------------------------------------------
// save pointer to original coefficient array so that
// this array can be deleted once no longer needed
double_complex *orig_coeff = Coefficient;
int orig_degree = Degree;
//-------------------------------------------------------
// create new longer array to hold the new coefficients
Degree += right.Degree;
Coefficient = (double_complex*) new double[2*(Degree+1)];
for( int i=0; i<=Degree; i++)
Coefficient[i] = double_complex(0.0, 0.0);
//---------------------------------
// perform multiplication
for( int rgt_indx=0; rgt_indx<= right.Degree; rgt_indx++)
{
for( int orig_indx=0; orig_indx <= orig_degree; orig_indx++)
{
Coefficient[orig_indx+rgt_indx] +=
(orig_coeff[orig_indx] * right.Coefficient[rgt_indx]);
}
}
return *this;
}
//=========================================================
// dump polynomial to an output stream
void CmplxPolynomial::DumpToStream( ofstream* output_stream)
{
(*output_stream) << "Degree = " << Degree << endl;
for(int i=Degree; i>=0; i--)
{
(*output_stream) << "Coeff[" << i << "] = "
<< Coefficient[i] << endl;
}
return;
}
//====================================================
//
int CmplxPolynomial::GetDegree(void)
{
return(Degree);
}
//==================================================
//
double_complex CmplxPolynomial::GetCoefficient(int k)
{
return Coefficient[k];
}
//$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -