在线等!求大虾们赐偶 角度相互计算的代码!!!
偶非计算机专业 毕业设计遇到问题!急呀!!
现在急须 角度 相互间 加 减 除 的代码!!
拜托哪位大虾给个先!!
急!!在线等!!
[解决办法]
#include <iostream>
using namespace std;
// an angle is limited to [0, 360)deg:[0,60)min:[0,60)s
void MakeValidAngleParams(int& degrees, int& minutes, int& seconds)
{
if ( seconds <0 ) seconds += 60;
if ( minutes <0 ) minutes += 60;
if ( degrees <0 ) degrees += 360;
int seconds_ = seconds % 60;
int minutes_ = seconds / 60;
minutes_ += minutes;
minutes_ %= 60;
int degrees_ = minutes / 60;
degrees_ += degrees;
degrees_ %= 360;
degrees = degrees_;
minutes = minutes_;
seconds = seconds_;
}
class Angle
{
public:
Angle()
:degrees_(0), minutes_(0), seconds_(0)
{}
Angle(int degrees, int minutes, int seconds);
Angle(Angle const& rhs);
Angle& operator=(Angle const& rhs);
Angle& operator+=(Angle const& rhs);
Angle& operator-=(Angle const& rhs);
int Degrees()
{ return degrees_;}
int Minutes()
{ return minutes_;}
int Seconds()
{ return seconds_;}
friend Angle operator+(Angle const& lhs, Angle const& rhs);
friend Angle operator-(Angle const& lhs, Angle const& rhs);
friend int operator/(Angle const& lhs, Angle const& rhs);
friend ostream& operator < <(ostream& out, const Angle& angle);
private:
int degrees_;
int minutes_;
int seconds_;
};
Angle::Angle(int degrees, int minutes, int seconds)
{
MakeValidAngleParams(degrees, minutes, seconds);
degrees_ = degrees;
minutes_ = minutes;
seconds_ = seconds;
}
Angle::Angle(const Angle &rhs)
{
degrees_ = rhs.degrees_;
minutes_ = rhs.minutes_;
seconds_ = rhs.seconds_;
}
Angle& Angle::operator =(const Angle &rhs)
{
if ( this != &rhs) {
degrees_ = rhs.degrees_;
minutes_ = rhs.minutes_;
seconds_ = rhs.seconds_;
}
return *this;
}
Angle& Angle::operator+=(Angle const& rhs)
{
seconds_ += rhs.seconds_;
minutes_ += rhs.minutes_;
degrees_ += rhs.degrees_;
MakeValidAngleParams(degrees_, minutes_, seconds_);
return *this;
}
Angle& Angle::operator-=(Angle const& rhs)
{
seconds_ -= rhs.seconds_;
minutes_ -= rhs.minutes_;
degrees_ -= rhs.degrees_;
MakeValidAngleParams(degrees_, minutes_, seconds_);
return *this;
}
Angle operator+(Angle const& lhs, Angle const& rhs)
{
Angle temp(lhs);
temp += rhs;
return temp;
}
Angle operator-(Angle const& lhs, Angle const& rhs)
{
Angle temp(lhs);
temp -= rhs;
return temp;
}
int operator/(Angle const& lhs, Angle const& rhs)
{
int divisor = rhs.degrees_ * 60 * 60 + rhs.minutes_ * 60 + rhs.seconds_;
int dividend = lhs.degrees_ * 60 * 60 + lhs.minutes_ * 60 + lhs.seconds_;
if (divisor==0) { //THIS SHOULD BE AN ERROR:(
divisor = 360 * 60 * 60;
}
return dividend / divisor;
}
ostream& operator < <(ostream& out, const Angle& angle)
{
out < < "( " < <angle.degrees_ < < ", " < <angle.minutes_ < < ", " < <angle.seconds_ < < ") ";
return out;
}
///////////////////////////////////////////////////////////////////////////////
int main()
{
using namespace std;
Angle angle1(3,22,30);
Angle angle2(0,20, 0);
Angle angle3(0,33,45);
Angle angle4(0, 3, 45);
cout < <angle1 < < "+ " < <angle2 < < "= " < <(angle1+angle2) < <endl;
cout < <angle3 < < "- " < <angle4 < < "= " < <(angle3-angle4) < <endl;
cout < <angle1 < < "/ " < <angle2 < < "= " < <(angle1/angle2) < <endl;
cout < <angle3 < < "/ " < <angle4 < < "= " < <(angle3/angle4) < <endl;
system( "pause ");
return 0;
}
[解决办法]
简单的写了一个+;
剩下的有空在补
struct corner
{
int d,f,m;
corner():d(0),f(0),m(0){}
corner(int x,int y,int z):d(x),f(y),m(z){}
corner& operator+(corner& src)
{
d += src.d;
f +=src.f;
m += src.m;
while(m> 60){//处理进位
m-=60;
f++;
}
while(f> 60){
f-=60;
d++;
}
return (*this);
}
private:
void updata()
{
}
};
ostream& operator < <(ostream& os,corner& cor)
{
os < <cor.d < < "度 " < <cor.f < < "分 " < <cor.m < < "秒 " < <endl;
return os;
}
int main(int argc, char* argv[])
{
corner a(1,2,3),b(30,5,59);
corner c= a+b;
cout < <c;
return 0;
}