Complex number class

Complex number class

本文关键字:class number Complex      更新时间:2023-10-16

我有一个任务到期了,但我很难理解任务真正要求我做什么,或者如何去做。我知道复数是什么,但我不明白C++和Python版本的以下操作应该做什么:

op: Complex × Complex → Complex 
op: Complex × double → Complex 
op: double × Complex → Complex 

双人间?我不明白替身是从哪里来的。此外,python版本应该将复杂内容转换为字符串,我也不明白它在问什么。它是说从字面上将复数(整数?)转换为字符串数据类型吗?如果你能帮我理解任务的要求,请告诉我,这样我就可以尝试编程了。

复数类

用C++、Java和Python设计一个表示复杂的类数字并支持重要操作,例如加法,减法、乘法和除法。对于C++和Python每个版本都需要实现以下功能操作:

op: Complex × Complex → Complex
op: Complex × double → Complex  op:
double × Complex → Complex

其中,op是+、-、*或/中的一个。在里面此外,您将需要重载流插入运算符<lt;以打印此类型的对象。构造函数也必须定义作为重载赋值运算符以允许隐式从双打到复杂的转换。您认为的任何其他方法适当的也应包括在内。你的课越完整较好的

Java版本将没有那么多方法,因为Java没有允许运算符重载或友元函数。同样更好地完成Java类。重写toString()方法。

Python版本还应该包括用于转换的函数从复数到字符串。

此项目所需的文件是:一个复杂的.h文件包含复杂类的声明,复杂.cc文件包含中声明的方法和函数的实现complex类,一个实例化复数和测试的main.cc所有方法和函数,一个Complex.java文件,它是java实现,以及一个实例化和测试所有Complex类的方法。所需的python文件是complex.py文件。

他向我们提供了以下代码:

/*
*
*  Java version
*
*/
/* Main.java */
public class Main {
public static void main(String[] args) {
Rational a = new Rational(1, 2);
Rational b = new Rational(2, 3);
int i = 5;
System.out.println(a + " + " + b + " = " + a.add(b));
System.out.println(a + " - " + b + " = " + a.sub(b));
System.out.println(a + " * " + b + " = " + a.mul(b));
System.out.println(a + " / " + b + " = " + a.div(b));
System.out.println(a + " + " + i + " = " + a.add(i));
System.out.println(a + " - " + i + " = " + a.sub(i));
System.out.println(a + " * " + i + " = " + a.mul(i));
System.out.println(a + " / " + i + " = " + a.div(i));
}
}
/* Rational.java */
public class Rational {
public Rational() {
this(0);
}
public Rational(int num) {
this(num, 1);
}
public Rational(int num, int den) {
this.num = num;
this.den = den;
}
public Rational add(Rational o) {
return new Rational(num * o.den + o.num * den, den * o.den);
}
public Rational add(int n) {
return new Rational(num + n * den, den);
}
public Rational div(Rational o) {
return new Rational(num * o.den, den * o.num);
}
public Rational div(int n) {
return new Rational(num, den * n);
}
public Rational mul(Rational o) {
return new Rational(num * o.num, den * o.den);
}
public Rational mul(int n) {
return new Rational(num * n, den);
}
public Rational sub(Rational o) {
return new Rational(num * o.den - o.num * den, den * o.den);
}
public Rational sub(int n) {
return new Rational(num - n * den, den);
}
public String toString() {
return "(" + num + " / " + den + ")";
}
private int den;
private int num;
}
/*
*
*  C++ version
*
*/
/* rational.h */
#ifndef RATIONAL_H
#define RATIONAL_H
#include <iostream>
using std::ostream;
struct rational {
rational(int = 0, int = 1);
rational operator+(const rational &) const;
rational operator-(const rational &) const;
rational operator*(const rational &) const;
rational operator/(const rational &) const;
rational operator+(int) const;
rational operator-(int) const;
rational operator*(int) const;
rational operator/(int) const;
friend rational operator+(int, const rational &);
friend rational operator-(int, const rational &);
friend rational operator*(int, const rational &);
friend rational operator/(int, const rational &);
friend ostream &operator<<(ostream &, const rational &);
private:
int den;
int num;
};
#endif /* RATIONAL_H */
/* rational.cc */
#include <iostream>
#include "rational.h"
rational::rational(int num, int den) : num(num), den(den) {}
rational rational::operator+(const rational &o) const {
return rational(num * o.den + o.num * den, den * o.den);
}
rational rational::operator+(int n) const {
return rational(num + n * den, den);
}
rational rational::operator-(const rational &o) const {
return rational(num * o.den - o.num * den, den * o.den);
}
rational rational::operator-(int n) const {
return rational(num - n * den, den);
}
rational rational::operator*(const rational &o) const {
return rational(num * o.num, den * o.den);
}
rational rational::operator*(int n) const {
return rational(num * n, den);
}
rational rational::operator/(const rational &o) const {
return rational(num * o.den, den * o.num);
}
rational rational::operator/(int n) const {
return rational(num, den * n);
}
rational operator+(int n, const rational &o) {
return o + n;
}
rational operator-(int n, const rational &o) {
return rational(n) - o;
}
rational operator*(int n, const rational &o) {
return o * n;
}
rational operator/(int n, const rational &o) {
return rational(n) / o;
}
ostream &operator<<(ostream &out, const rational &o) {
out << '(' << o.num << " / " << o.den << ')';
return out;
}
/* main.cc */
#include <iostream>
#include "rational.h"
using std::cout;
using std::endl;
int main(void) {
rational a(1, 2);
rational b(2, 3);
int i = 5;
cout << a << " + " << b << " = " << a + b << endl;
cout << a << " - " << b << " = " << a - b << endl;
cout << a << " * " << b << " = " << a * b << endl;
cout << a << " / " << b << " = " << a / b << endl;
cout << a << " + " << i << " = " << a + i << endl;
cout << a << " - " << i << " = " << a - i << endl;
cout << a << " * " << i << " = " << a * i << endl;
cout << a << " / " << i << " = " << a / i << endl;
cout << i << " + " << a << " = " << i + a << endl;
cout << i << " - " << a << " = " << i - a << endl;
cout << i << " * " << a << " = " << i * a << endl;
cout << i << " / " << a << " = " << i / a << endl;
return 0;
}
#
#
# Python version
#
#
class rational:
def __init__(self, num=0, den=1):
self.num = num
self.den = den
def __add__(self, other):
if isinstance(other, int):
return rational(self.num + other * self.den, self.den)
elif isinstance(other, rational):
return rational(self.num * other.den + other.num * self.den, self.den * other.den)
else:
raise TypeError
def __truediv__(self, other):
if isinstance(other, int):
return rational(self.num, self.den * other)
elif isinstance(other, rational):
return rational(self.num * other.den, self.den * other.num)
else:
raise TypeError
def __float__(self):
return float(self.num) / self.den
def __int__(self):
return self.num / self.den
def __mul__(self, other):
if isinstance(other, int):
return rational(self.num * other, self.den)
elif isinstance(other, rational):
return rational(self.num * other.num, self.den * other.den)
else:
raise TypeError
def __radd__(self, other):
return self + other
def __rtruediv__(self, other):
return rational(other) / self
def __rmul__(self, other):
return self * other
def __rsub__(self, other):
return rational(other) - self
def __str__(self):
return '(' + str(self.num) + ' / ' + str(self.den) + ')'
def __sub__(self, other):
if isinstance(other, int):
return rational(self.num - other * self.den, self.den)
elif isinstance(other, rational):
return rational(self.num * other.den - other.num * self.den, self.den * other.den)
else:
raise TypeError
if __name__ == '__main__':
a = rational(1, 2)
b = rational(2, 3)
i = 5
print('%s + %s = %s' % (a, b, a + b))
print('%s - %s = %s' % (a, b, a - b))
print('%s * %s = %s' % (a, b, a * b))
print('%s / %s = %s' % (a, b, a / b))
print('%s + %i = %s' % (a, i, a + i))
print('%s - %i = %s' % (a, i, a - i))
print('%s * %i = %s' % (a, i, a * i))
print('%s / %i = %s' % (a, i, a / i))
print('%i + %s = %s' % (i, a, i + a))
print('%i - %s = %s' % (i, a, i - a))
print('%i * %s = %s' % (i, a, i * a))
print('%i / %s = %s' % (i, a, i / a))

我不明白double在哪里。

我假设它是一个普通的double浮点值,而不是Complex值。

此外,python版本应该将复杂内容转换为字符串,我也不明白它在问什么。

我假设使用String而不是名为Complex的自定义类。

它是说从字面上将复数(整数?)转换为字符串数据类型吗?

除非你另有所知,否则我会这么认为。

一个复数包含一个实数部分和一个虚数部分,两者都存储为双精度。既然你说你已经知道这些了,我就不赘述了,但快速谷歌一下就会发现你几乎想要的复数类的许多Java实现。

http://introcs.cs.princeton.edu/java/97data/Complex.java.html

是我以前用过的一个例子,它符合你的要求:

public Complex times(Complex b)
public Complex times(double alpha)

这些方法将使用复数或alpha应用于实数和虚数部分,并返回复数。

至于python字符串部分,我想他希望你把真实和想象的部分,用一些人类可读的形式表达出来:字符串

希望我能帮上忙md_5

转换为字符串只是为了以人类可读的形式显示数字。这是在rational类中:return "(" + num + " / " + den + ")";打印例如(5 / 8)。您的复杂类可以使toString方法输出( 5 + 8i )

将一个复数乘以一个数字(双)是一个有效的运算,它会产生另一个复数。

复数与实数相乘:

(x + yi) u = xu + yu i.

使用他给出的代码,您可以为Rational数(定义为两个数字num和den)完成完全相同的任务。您需要将该代码调整为复数,复数也被定义为几个数字。

PS提示:http://www.clarku.edu/~djoyce/complete/mult.html

当任务显示时

op:复杂×复杂→复杂的op:复杂×双→复杂操作:双×复数→复杂的其中,op是+、-、*或/中的一个。

这意味着必须在复数对之间以及实数和复数的混合对之间实现所有二进制运算。例如

*:复杂×双→复杂

你应该写这样的东西:

Complex operator*(Complex z, double t) {
return Complex(t * z.Real(), t * z.Imag()); 
}