AsphaltHero
Июнь 4, 2017 18:37:30
Реализовать в виде класса набор подпрограмм, для выполнения следующих операций над комплексными числами
Сложение
Вычитание
Умножение
Деление
Вычисление модуля комплексного числа
Возведение комплексного числа в степень n(n-натуральное).
Библиотеки по заданию нужно использовать свои.
Прошу, кого не затруднит, можете пояснить задание? Я в питоне до классов еще не дошел, но литературу то я почитаю.
Мне немного не понятно само задание. То есть я сам должен написать модули для вышеперечисленных операций и с помощью них уже и выполнять действия над числами? Если да, то как самому написать эти библиотеки, можно пример?
Сказали писать или на C++, но если можешь на чем-то другом, то пожалуйста. С c++ пока плохо знаком. Чуть больше с питоном.
Так же сказали не использовать полиморфизм и наследование. Только инкапсуляция.
AsphaltHero
Июнь 4, 2017 19:16:50
Shaman
Перегрузка операторов.
Спасибо. Натолкнуло на правильные мысли)
Если кто-нибудь еще что-то подскажет буду очень благодарен
AsphaltHero
Июнь 4, 2017 22:57:23
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)
Я думаю, что это задание сделал. Дальше надо: Дан массив комплексных чисел А. Получить массив С, элементами которого являются модули сумм рядом стоящих комплексных чисел. Можете подсказать, как быть дальше? Может быть вместо массива использовать список? И как мне его заполнить комплексными числами используя мой класс?
Rodegast
Июнь 5, 2017 10:56:47
Нифига ты его не сделал. У тебя должно быть что то вроде:
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)
Короче читай
https://pythonworld.ru/osnovy/peregruzka-operatorov.html
py.user.next
Июнь 6, 2017 02:09:15
AsphaltHero
Реализовать в виде класса набор подпрограмм, для выполнения следующих операций над комплексными числами
Сложение
Вычитание
Умножение
Деление
Вычисление модуля комплексного числа
Возведение комплексного числа в степень n(n-натуральное).
Библиотеки по заданию нужно использовать свои.
Прошу, кого не затруднит, можете пояснить задание?
Надо написать коплексное число. Потом надо написать вычислитель с операциями над комплексными числами этого типа. Это всё без всяких перегрузок надо сделать, просто методы.
AsphaltHero
Я думаю, что это задание сделал.
Ты использовал встроенные комплексные числа, а надо написать своё. Комплексное число - это просто пара вещественных чисел.
Один класс должен представлять комплексное число. Второй класс должен в методах принимать объекты первого класса и возвращать значения в виде таких же объектов (а в некоторых методах просто действительные числа).
AsphaltHero
Сказали писать или на C++, но если можешь на чем-то другом, то пожалуйста. С c++ пока плохо знаком.
Да, где-то может не быть комплексных чисел встроенных, но это не значит, что их нельзя там создать. Поэтому несмотря на наличие встроенных комплексных чисел в питоне, надо именно задание выполнить, реализовав их по-своему.
AsphaltHero
Июнь 9, 2017 15:10:20
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)
Если все ок, прошу вас так же пояснить насчёт задания 2. Тут что-то вообще ничего не понятно. У меня же одна строка) Как быть-то?
JOHN_16
Июнь 9, 2017 15:13:48
AsphaltHero
код нужно оформлять в специальных тегах code - вы же видите при постинге форматрование теряется
AsphaltHero
Июнь 9, 2017 15:17:43
Тяжело, когда тупой. Спасибо)
JOHN_16
AsphaltHeroкод нужно оформлять в специальных тегах code - вы же видите при постинге форматрование теряется
py.user.next
Июнь 9, 2017 17:11:33
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
>>>
Операции можешь напрямую взять здесь
wiki. complex number