Найти - Пользователи
Полная версия: Реализовать в виде класса набор подпрограмм, для выполнения следующих операций над комплексными числами
Начало » Центр помощи » Реализовать в виде класса набор подпрограмм, для выполнения следующих операций над комплексными числами
1 2 3 4 5 6
Rodegast
> Так это обычная операция.

Вот. Об этом я тебе и говорил.

> Но вот для комплесного числа умножение на вектор - не обычная операция, а специфическая

Где ты тут увидел умножение на вектор?
для выполнения следующих операций над комплексными числами

Сложение
Вычитание
Умножение
Деление
Вычисление модуля комплексного числа
Возведение комплексного числа в степень n(n-натуральное).

> Он же сегодня говорит, что ему нужны стандартные операции над комплексными числами, а завтра ему препод скажет “давай ещё какие-нибудь” и придётся делать этот калькулятор всё равно.

Вот когда скажет, тогда и будет делать. А те операции которые ему задали по любому являются “обычными” т.е. должны вызываться операторами.

> Ты перманентно путаешь понятия класс и объект.

Я это тоже заметил.
py.user.next
FishHook
вынеси статический метод из класса не делая атрибут публичным

Ну вот было:
  
>>> class A:
...     @staticmethod
...     def m():
...         print('hello')
... 
>>> A().m()
hello
>>>

Вот стало:
  
>>> class A:
...     pass
... 
>>> def m():
...     print('hello')
... 
>>> m()
hello
>>>

Вынес, не делая атрибут публичным. :) Даже атрибут сэкономил ещё - просто и надёжно.

Rodegast
Где ты тут увидел умножение на вектор?
Я смотрю в будущее. Препод увидит, что он операции зашил в комплексное число, и даст ему задание такое, чтобы он начал зашивать его тоже в класс и оно всё поломало ему там. Я же встречал уже такие вещи. Подозрение вызывают операции возведения в степень.

Даже если мы берём питон, в него зашиты даже необычные операции
  
>>> (1+2j) ** (1+2j)
(-0.22251715680177267+0.10070913113607541j)
>>>
Так что питон - не показатель, экспериментов там много всяких. Поэтому мы берём шире и рассматриваем множество языков программирования и наличие средств в них. Берём Basic или JavaScript и думаем, как на нём сделать комплексные числа в полной мере, но чтобы не мешать всё подряд в одну кучу.

Rodegast
> Ты перманентно путаешь понятия класс и объект.
Я это тоже заметил.
Я ничего не путаю.
Rodegast
> Препод увидит, что он операции зашил в комплексное число, и даст ему задание такое, чтобы он начал зашивать его тоже в класс и оно всё поломало ему там.

Ну ты прямо Ванга. Ещё раз повторяю: когда это случится, тогда он и будет писать для этого функцию, “стандартные” операции в любом случае реализовываться через перегрузку операторов.

> Берём Basic или JavaScript и думаем, как на нём сделать комплексные числа в полной мере, но чтобы не мешать всё подряд в одну кучу.

Если ты хочешь выйти за рамки, то мы может взять Haskell. Как в нём операторы перегружаются я тебе уже показывал.

> Я ничего не путаю.

Тогда объясни нам чем класс отличается от экземпляра класса.
py.user.next
Rodegast
Ну ты прямо Ванга.
Я таких пацанов видел штук сто. Ему даёшь решение, а он на следующий день приходит и говорит, что препод додал ещё. Препод же видит, что он не сам делал. Так вот баб преподы жалеют, бабе можно какую-нибудь простую хрень дать, а этих дуплят по полной, пока не убедятся, что он им любое решение принесёт. И чтобы препод не подумал, что он родил этот класс еле-еле со встроенными методами, тут сразу делается разделение. Понимаешь, его преподу никто такой код не принесёт, потому что это знать надо - как правильно разделить и зачем. Препод посмотрит и подумает “что-то здесь не то, я их вроде так не учил, а он так делает” и не станет связываться.

Rodegast
Если ты хочешь выйти за рамки, то мы может взять Haskell.
Нет, я получаю унифицированное решение. Если в каком-то языке нет переопределения операций или даже просто методов, нужно такое решение, которое легко перевести на такой язык. В частности в C нет таких встроенных методов и вообще методов нет, но C часто используется в образовании, поэтому надо написать что-то пригодное и для C.

Rodegast
Тогда объясни нам чем класс отличается от экземпляра класса.
Класс может быть экземпляром класса. Так что это всё равно что спросить “чем класс отличается от себя самого?”.
Rodegast
> а этих дуплят по полной, пока не убедятся, что он им любое решение принесёт.

И правильно делают.

> Нет, я получаю унифицированное решение.

Ты получаешь говнокод.

> Класс может быть экземпляром класса.

Нет. Класс это экземпляр метакласса.
FishHook
Rodegast
Нет. Класс это экземпляр метакласса.
Ничего подобного. Метакласс - это фабрика классов, метаклассом может быть и функция(внезапно!!) и даже лямбда(!!!!).

FishHook
py.user.next
Класс может быть экземпляром класса.
И пример есть?
Rodegast
>> Класс это экземпляр метакласса.
> Ничего подобного. Метакласс - это фабрика классов, метаклассом может быть и функция(внезапно!!) и даже лямбда(!!!!).

 >>> class A(object):
...     pass
...
>>> type(A)
<type 'type'>
>>> class B(type):
...     pass
...
>>> class C(object):
...     __metaclass__ = B
...
>>> type(C)
<class '__console__.B'>
>>> isinstance(C, B)
True
>>> type(C) == B
True
P.S. Метакласс это type и его наследники. Конечно-же функция не может быть метаклассом. Просто значением атрибута __metaclass__ должен быть объект который при вызове вернёт класс. Будет этим объектом функция или непосредственно метакласс не суть важно.
AsphaltHero
 from math import cos, sin, sqrt, atan2
class Complex: #Класс комплексных чисел
    def __init__(self, real, imag):
        self.real = real
        self.imag = imag
    def __str__(self): # Строковое представление объекта числа
        sign = '+' if self.imag >= 0 else ''
        if self.imag == 0:
            return '{}'.format(self.real)
        else:
            return '{}{}{}i'.format(self.real, sign, self.imag)
    def __repr__(self): # Представление в сыром виде объекта числа
        sign = '+' if self.imag >= 0 else ''
        if self.imag == 0:
            return '{}'.format(self.real)
        return '{}{}{}i'.format(self.real, sign, self.imag)
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 truediv(self, c1, c2): # деление
        real = (c1.real * c2.real + c1.imag * c2.imag) / ((c2.real ** 2) + (c2.imag ** 2))
        imag = (c1.real * c2.real - c1.imag * c2.imag) / ((c2.real ** 2) + (c2.imag ** 2))
        return Complex(real, imag)
    def abs(self, c):
        return (c.real ** 2 + c.imag ** 2) ** 0.5
    def pow(self, c, n):  # степень 
        phi = atan2(c.imag, c.real)
        r = sqrt(c.real * c.real + c.imag * c.imag)
        R = r ** n
        Phi = n * phi
        real = R * cos(Phi)
        imag = R * sin(Phi)
        return Complex(real, imag)
A = []
C = []
calc = ComplexCalc()
for i in range(1, 10): # заполение массива
        num = Complex(i, i)
        A.append(num)
print('Массив А', A)
for i in range(len(A)): # вычисление массива С
        if i == 0:
            C.append(calc.abs(A[i + 1]))
        elif i == (len(A) - 1):
            C.append(calc.abs(A[i - 1]))
        else:
          C.append(calc.add(calc.abs(A[i - 1]), calc.abs(A[i + 1])))
print('Массив C:', C)

Доведите до ума пожалуйста функцию pow? Результат не очень выдает.

В принципе все готово. Подправить возведение в степень и еще одно задание. Вот я вообще не пойму его смысла. Как это сделать , если у нас всего одна строка? Ну и суть задания вообще не понятна.

"Дан массив(ну я все сделал списком, так что далее вместо массив будет список) комплексных чисел А. Получить массив , каждая строка которого получается возведением в степень, равную номеру этой строки в массиве A.

AsphaltHero
Rodegast
FishHook
py.user.next
Подскажете?


This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB