Форум сайта python.su
0
Реализовать в виде класса набор подпрограмм, для выполнения следующих операций над комплексными числами
Сложение
Вычитание
Умножение
Деление
Вычисление модуля комплексного числа
Возведение комплексного числа в степень n(n-натуральное).
Библиотеки по заданию нужно использовать свои.
Прошу, кого не затруднит, можете пояснить задание? Я в питоне до классов еще не дошел, но литературу то я почитаю.
Мне немного не понятно само задание. То есть я сам должен написать модули для вышеперечисленных операций и с помощью них уже и выполнять действия над числами? Если да, то как самому написать эти библиотеки, можно пример?
Сказали писать или на C++, но если можешь на чем-то другом, то пожалуйста. С c++ пока плохо знаком. Чуть больше с питоном.
Так же сказали не использовать полиморфизм и наследование. Только инкапсуляция.
Отредактировано AsphaltHero (Июнь 4, 2017 19:23:17)
Офлайн
88
Офлайн
0
ShamanСпасибо. Натолкнуло на правильные мысли)
Перегрузка операторов.
Офлайн
0
class Operation:
def plus(self, x, y):
print ( x + y)
def minus(self, x, y):
print( x - y)
def umnoj(self, x, y):
print (x * y)
def delenie(self, x, y):
print (x / y)
def modul(self, x, y):
print (abs(7 + 8j))
def stepen(self, x, y):
print (pow(x + y, 2))
obj1 = Operation()
x = complex(5, 6)
y = complex(7, 8)
obj1.plus(x, y)
obj1.minus(x, y)
obj1.umnoj(x, y)
obj1.modul(x, y)
obj1.delenie(x, y)
obj1.stepen(x, y)
Я думаю, что это задание сделал. Дальше надо: Дан массив комплексных чисел А. Получить массив С, элементами которого являются модули сумм рядом стоящих комплексных чисел. Можете подсказать, как быть дальше? Может быть вместо массива использовать список? И как мне его заполнить комплексными числами используя мой класс?
Отредактировано AsphaltHero (Июнь 4, 2017 22:58:21)
Офлайн
186
Нифига ты его не сделал. У тебя должно быть что то вроде:
class KompleksInt(object): def __init__(self, d, m): self._i = m # Мнимая часть self._n = d # Вещественная часть def __add__(self, kInt): return KompleksInt(kInt._n +self._n, kInt._i + self._i)
Офлайн
857
AsphaltHero
Реализовать в виде класса набор подпрограмм, для выполнения следующих операций над комплексными числами
Сложение
Вычитание
Умножение
Деление
Вычисление модуля комплексного числа
Возведение комплексного числа в степень n(n-натуральное).
Библиотеки по заданию нужно использовать свои.
Прошу, кого не затруднит, можете пояснить задание?
AsphaltHeroТы использовал встроенные комплексные числа, а надо написать своё. Комплексное число - это просто пара вещественных чисел.
Я думаю, что это задание сделал.
AsphaltHeroДа, где-то может не быть комплексных чисел встроенных, но это не значит, что их нельзя там создать. Поэтому несмотря на наличие встроенных комплексных чисел в питоне, надо именно задание выполнить, реализовав их по-своему.
Сказали писать или на C++, но если можешь на чем-то другом, то пожалуйста. С c++ пока плохо знаком.
Отредактировано py.user.next (Июнь 6, 2017 02:11:45)
Офлайн
0
Rodegast
py.user.nextВот что вышло в итоге. Есть ли замечания? Я вас правильно понял?
class ComplexInt(): def __init__(self, n): self.n = n def __add__(self, cInt): return ComplexInt(self.n + cInt.n) def __sub__(self, cInt): return ComplexInt(self.n - cInt.n) def __mul__(self, cInt): return ComplexInt(self.n * cInt.n) def __truediv__(self, cInt): return ComplexInt(self.n / cInt.n) def __abs__(self): return ComplexInt(abs(self.n)) def __pow__(self, y): return ComplexInt(self.n ** y) def __str__(self): return str(self.n) A = [] C = [] for i in range(1, 10): obj = ComplexInt(i+i*1j) new_element = obj.n A.append(new_element) print(A) for i in range(len(A)): if i == 0: C.append(abs(A[i+1])) elif i == (len(A)-1): C.append(abs(A[i-1])) else: C.append(abs(A[i-1]+A[i+1])) print(C)
Отредактировано AsphaltHero (Июнь 9, 2017 15:19:35)
Прикреплённый файлы:
IMG_0108.PNG (202,0 KБ)
Офлайн
221
AsphaltHero
код нужно оформлять в специальных тегах code - вы же видите при постинге форматрование теряется
Офлайн
0
Тяжело, когда тупой. Спасибо)
JOHN_16
AsphaltHeroкод нужно оформлять в специальных тегах code - вы же видите при постинге форматрование теряется
Офлайн
857
AsphaltHeroНадо два класса написать: один - само число, другой - калькулятор над такими числами. Ты написал мешанину из магических методов. Эти методы являются синтаксическим сахаром, не более. Калькулятор может выполнять больше всяких операций, среди них может и не быть стандартных. В других языках (C++ и не только) нет таких встроенных методов и надо всё писать однообразно.
Я вас правильно понял?
>>> class Complex: ... def __init__(self, real, imag): ... self.real = real ... self.imag = imag ... def __str__(self): ... sign = '+' if self.imag >= 0 else '' ... return '{}{}{}i'.format(self.real, sign, self.imag) ... __repr__ = __str__ ... >>> class ComplexCalc: ... def add(self, c1, c2): ... real = c1.real + c2.real ... imag = c1.imag + c2.imag ... return Complex(real, imag) ... def sub(self, c1, c2): ... real = c1.real - c2.real ... imag = c1.imag - c2.imag ... return Complex(real, imag) ... def mul(self, c1, c2): ... real = c1.real * c2.real - c1.imag * c2.imag ... imag = c1.imag * c2.real + c1.real * c2.imag ... return Complex(real, imag) ... def abs(self, c): ... return (c.real ** 2 + c.imag ** 2) ** 0.5 ... >>> calc = ComplexCalc() >>> calc.add(Complex(1, 2), Complex(3, 4)) 4+6i >>> calc.sub(Complex(1, 2), Complex(3, 4)) -2-2i >>> calc.mul(Complex(1, 2), Complex(3, 4)) -5+10i >>> calc.abs(Complex(3, 4)) 5.0 >>>
Отредактировано py.user.next (Июнь 9, 2017 17:12:06)
Офлайн