有理数(分数)、三维向量的运算
#include <iostream>
using namespace std;
//有理数的加减乘除运算
class Rational
{
private:
int c1, c2;
public:
Rational(int, int);
Rational(const Rational& c);
void Add(const Rational c);
void Minus(const Rational c);
void Multiply(const Rational c);
void Divide(const Rational c);
void Input();
void Yuefen();
void Output();
int sum1=0, sum2=0, sum3=0, sum4=0;
};
Rational::Rational(int c11 = 0, int c22 = 0)
{
c1 = c11;
c2 = c22;
}
Rational::Rational(const Rational& c)
{
c1 = c.c1;
c2 = c.c2;
}
void Rational::Input()
{
cout << "请输入分母(不为0):";
cin >> c1;
if (c1 != 0)
{
cout << "请输入分子:";
cin >> c2;
}
else
{
cout << "输入有误!" << endl;
}
}
void Rational::Yuefen()
{
for (int i = sum4;i > 0;i--)
{
if (sum1 % i == 0 && sum4 % i == 0)
{
sum1 = sum1 / i;
sum4 = sum4 / i;
}
continue;
}
}
void Rational::Output()
{
if (sum1 == sum4)
{
cout << "1" << endl;
}
else if (sum4 == 0)
{
cout << "0" << endl;
}
else
{
cout << sum4 << "/" << sum1 << endl;
}
}
void Rational::Add(const Rational c)
{
sum1 = c1 * c.c1;
sum2 = c2 * c.c1;
sum3 = c.c2 * c1;
sum4 = sum2 + sum3;
Yuefen();
cout << "两分数相加结果是:" << endl;
Output();
}
void Rational::Minus(const Rational c)
{
if (c1 == c.c1 && c2 == c.c2)
{
cout << "两分数相减的结果是:0" << endl;
}
else
{
sum1 = c1 * c.c1;
sum2 = c2 * c.c1;
sum3 = c.c2 * c1;
sum4 = sum2 - sum3;
Yuefen();
cout << "两分数相减结果是:" << endl;
Output();
}
}
void Rational::Multiply(const Rational c)
{
sum1 = c1 * c.c1;
sum4 = c2 * c.c2;
Yuefen();
cout << "两分数相乘结果是:" << endl;
Output();
}
void Rational::Divide(const Rational c)
{
sum1 = c1 * c.c2;
sum4 = c2 * c.c1;
Yuefen();
cout << "两分数相除结果是:" << endl;
Output();
}
//向量类的加减、点乘、叉乘运算
class Vector
{
private:
double v1, v2, v3;
public:
Vector(double, double, double);
Vector(const Vector& v);
void operator +(const Vector v);
void operator -(const Vector v);
void operator *(const Vector v);
void operator ^(const Vector v);
void Input();
void Output();
double sum1=0, sum2=0, sum3=0;
};
Vector::Vector(double v1a = 0, double v2a = 0, double v3a = 0)
{
v1 = v1a;
v2 = v2a;
v3 = v3a;
}
Vector::Vector(const Vector& v)
{
v1 = v.v1;
v2 = v.v2;
v3 = v.v3;
}
void Vector::Input()
{
cout << "请输入一个三维向量" << endl << "横坐标为:";
cin >> v1;
cout << "纵坐标为:";
cin >> v2;
cout << "竖坐标为:";
cin >> v3;
}
void Vector::Output()
{
cout << "(" << sum1 << "," << sum2 << "," << sum3 << ")" << endl;
}
void Vector::operator+(const Vector v)
{
sum1 = v1 + v.v1;
sum2 = v2 + v.v2;
sum3 = v3 + v.v3;
cout << "两向量相加的结果是:";
Output();
}
void Vector::operator-(const Vector v)
{
sum1 = v1 - v.v1;
sum2 = v2 - v.v2;
sum3 = v3 - v.v3;
cout << "两向量相减的结果是:";
Output();
}
void Vector::operator *(const Vector v)
{
sum1 = v1 * v.v1 + v2 * v.v2 + v3 * v.v3;
cout << "两向量点乘的结果是:" << sum1 << endl;
}
void Vector::operator ^(const Vector v)
{
sum1 = v2 * v.v3 - v3 * v.v2;
sum2 = -(v1 * v.v3 - v3 * v.v1);
sum3 = v1 * v.v2 - v2 * v.v1;
cout << "两向量叉乘的结果是:";
Output();
}
int main()
{
//有理数运算
Rational r1, r2;
r1.Input();
r2.Input();
r1.Add(r2);
r1.Minus(r2);
r1.Multiply(r2);
r1.Divide(r2);
//向量运算
cout << "---------------------------" << endl;
Vector vec1, vec2;
vec1.Input();
vec2.Input();
vec1+vec2;
vec1-vec2;
vec1*vec2;
vec1^vec2;
return 0;
}