View Full Version : C++
Ако има някой, който може да ми помогне за една програма за последния ми изпит в Неделя, ще съм му много благодарен.
Ето я и задачата, изискването е да се направи с Class ( дори и структура не дават ).
Да се реализира проект "Комплексно число", имащо две член-данни, цялата (real) и имагинерната (imaginary) част- цели числа.
Дефинирайте операции за обектите на този клас: отрицателна стойност,събиране,изваждан е,умножение и деление. Бинарните операции
да действат и с операнди-комплексно и цяло число. Да се напише член-функция за извеждане на комплексно число във вида: real +/-i imaginary
В главната функция на програмата да се илюстрират всичките дейности с комплексни числа
mlakniwe
06-27-2013, 15: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)
Утре или макс други ден ще е готова.
#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;
}
А, данните не са цели числа, тва не го бях видял, ма ми се струва тъпо. Но можеш лесно да го ограничиш. Малко сменяне на float с int, малко cast-вания до float и закръгляния и си читав.