PDA

View Full Version : C++



Sexpert
06-27-2013, 15:45
Ако има някой, който може да ми помогне за една програма за последния ми изпит в Неделя, ще съм му много благодарен.
Ето я и задачата, изискването е да се направи с Class ( дори и структура не дават ).




Да се реализира проект "Комплексно число", имащо две член-данни, цялата (real) и имагинерната (imaginary) част- цели числа.
Дефинирайте операции за обектите на този клас: отрицателна стойност,събиране,изваждан е,умножение и деление. Бинарните операции
да действат и с операнди-комплексно и цяло число. Да се напише член-функция за извеждане на комплексно число във вида: real +/-i imaginary
В главната функция на програмата да се илюстрират всичките дейности с комплексни числа

mlakniwe
06-27-2013, 16:20
http://www.teenproblem.net/forum/showthread.php/540111-%D0%98%D0%BD%D1%84%D0%BE%D1%80%D0%BC%D0%B0%D1%82%D 0%B8%D0%BA%D0%B0-%D0%9F%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%B8%D 1%80%D0%B0%D0%BD%D0%B5-(%D0%BF%D0%B8%D1%88%D0%B5%D1%82%D0%B5-%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BD%D 0%B8%D1%8F-%D0%B5%D0%B7%D0%B8%D0%BA)

Chacho
06-27-2013, 17:04
Утре или макс други ден ще е готова.

Chacho
06-28-2013, 09:46
#include <iostream>
using namespace std;

class ComplexNum
{
public:

/*****Constructors*****/
ComplexNum();
ComplexNum(float);
ComplexNum(float, float);
ComplexNum(const ComplexNum&);

/*****Unary operators*****/
ComplexNum& operator=(const ComplexNum&);
ComplexNum operator-();

/*****Binary operators with complex number as rhs*****/
ComplexNum operator+(const ComplexNum&);
ComplexNum operator-(const ComplexNum&);
ComplexNum operator*(const ComplexNum&);
ComplexNum operator/(const ComplexNum&);

/*****Binary operators with float as rhs*****/
ComplexNum operator+(const float);
ComplexNum operator-(const float);
ComplexNum operator*(const float);
ComplexNum operator/(const float);

/*****Other Methods*****/
void Print();


/*****Members*****/
private:
float m_rVal, m_iVal;
};

//CONSTRUCTORS
ComplexNum::ComplexNum()
{
m_rVal = 0;
m_iVal = 0;
}

ComplexNum::ComplexNum(float realNum)
{
m_rVal = realNum;
m_iVal = 0;
}

ComplexNum::ComplexNum(float realNum, float imagNum)
{
m_rVal = realNum;
m_iVal = imagNum;
}

ComplexNum::ComplexNum(const ComplexNum& rhs)
{
m_rVal = rhs.m_rVal;
m_iVal = rhs.m_iVal;
}


ComplexNum& ComplexNum::operator=(const ComplexNum& rhs)
{
if(this!=&rhs)
{
m_rVal = rhs.m_rVal;
m_iVal = rhs.m_iVal;
}
return *this;
}

ComplexNum ComplexNum::operator-()
{
ComplexNum result(-(*this).m_rVal, -(*this).m_iVal);
return result;
}


//UNARY OPERATORS
ComplexNum ComplexNum::operator+(const ComplexNum& rhs)
{
ComplexNum result((*this).m_rVal+rhs.m_rVal, (*this).m_iVal+rhs.m_iVal);
return result;
}

ComplexNum ComplexNum::operator-(const ComplexNum& rhs)
{
ComplexNum result((*this).m_rVal-rhs.m_rVal, (*this).m_iVal-rhs.m_iVal);
return result;
}

ComplexNum ComplexNum::operator*(const ComplexNum& rhs)
{
ComplexNum result((*this).m_rVal*rhs.m_rVal - (*this).m_iVal*rhs.m_iVal, (*this).m_rVal*rhs.m_iVal + (*this).m_iVal*rhs.m_rVal);
return result;
}

ComplexNum ComplexNum::operator/(const ComplexNum& rhs)
{
float denom = rhs.m_rVal*rhs.m_rVal + rhs.m_iVal*rhs.m_iVal;
if(denom!=0)
{
ComplexNum result(((*this).m_rVal*rhs.m_rVal + (*this).m_iVal*rhs.m_iVal)/denom, ((*this).m_iVal*rhs.m_rVal - (*this).m_rVal*rhs.m_iVal)/denom);
return result;
}
else
{
cout<<"Error, cannot divide by 0";
ComplexNum result(0, 0);
return result;
}
}


//BINARY OPERATORS
ComplexNum ComplexNum::operator+(const float rhs)
{
ComplexNum tmpVal(rhs, 0);
return *this+tmpVal;
}

ComplexNum ComplexNum::operator-(const float rhs)
{
ComplexNum tmpVal(rhs, 0);
return *this-tmpVal;
}

ComplexNum ComplexNum::operator*(const float rhs)
{
ComplexNum tmpVal(rhs, 0);
return *this*tmpVal;
}

ComplexNum ComplexNum::operator/(const float rhs)
{
ComplexNum tmpVal(rhs, 0);
return *this/tmpVal;
}


//OTHER METHODS
void ComplexNum::Print()
{
cout<<m_rVal<<" + i("<<m_iVal<<")";
}


//TEST PROGRAM
int main()
{
int k=13;

ComplexNum tmp(2, 3);
ComplexNum tmp2(k, 7);

tmp.Print(); //Print
cout<<"\n";
tmp2.Print(); //Print

cout<<"\n";
(tmp+tmp2).Print(); //Addition
cout<<"\n";
(tmp-tmp2).Print(); //Subtraction
cout<<"\n";
(tmp*tmp2).Print(); //Multiplication
cout<<"\n";
(tmp/tmp2).Print(); //Division

cout<<"\n";
(tmp+3).Print(); //Addition with int
cout<<"\n";
(tmp-4).Print(); //Subtraction with int
cout<<"\n";
(tmp*5).Print(); //Multiplication with int
cout<<"\n";
(tmp/6).Print(); //Division with int

cout<<"\n";
(-tmp).Print(); //Unary minus
cout<<"\n";
tmp=tmp2; //Assignment
tmp.Print();

int pause;
cin>>pause;
return 0;
}

Chacho
06-28-2013, 13:52
А, данните не са цели числа, тва не го бях видял, ма ми се струва тъпо. Но можеш лесно да го ограничиш. Малко сменяне на float с int, малко cast-вания до float и закръгляния и си читав.