Уведомления

Группа в Telegram: @pythonsu
  • Начало
  • » Центр помощи
  • » Реализовать в виде класса набор подпрограмм, для выполнения следующих операций над комплексными числами [RSS Feed]

#1 Июнь 14, 2017 11:12:11

Rodegast
От: Пятигорск
Зарегистрирован: 2007-12-28
Сообщения: 2843
Репутация: +  186  -
Профиль   Отправить e-mail  

Реализовать в виде класса набор подпрограмм, для выполнения следующих операций над комплексными числами

> Так это обычная операция.

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

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

Где ты тут увидел умножение на вектор?

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

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

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

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

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

Я это тоже заметил.



С дураками и сектантами не спорю, истину не ищу.
Ели кому-то правда не нравится, то заранее извиняюсь.

Офлайн

#2 Июнь 15, 2017 00:37:42

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 10015
Репутация: +  857  -
Профиль   Отправить e-mail  

Реализовать в виде класса набор подпрограмм, для выполнения следующих операций над комплексными числами

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
> Ты перманентно путаешь понятия класс и объект.
Я это тоже заметил.
Я ничего не путаю.



Отредактировано py.user.next (Июнь 15, 2017 00:40:43)

Офлайн

#3 Июнь 15, 2017 10:54:40

Rodegast
От: Пятигорск
Зарегистрирован: 2007-12-28
Сообщения: 2843
Репутация: +  186  -
Профиль   Отправить e-mail  

Реализовать в виде класса набор подпрограмм, для выполнения следующих операций над комплексными числами

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

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

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

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

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

Тогда объясни нам чем класс отличается от экземпляра класса.



С дураками и сектантами не спорю, истину не ищу.
Ели кому-то правда не нравится, то заранее извиняюсь.

Офлайн

#4 Июнь 15, 2017 12:48:50

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 10015
Репутация: +  857  -
Профиль   Отправить e-mail  

Реализовать в виде класса набор подпрограмм, для выполнения следующих операций над комплексными числами

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

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

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



Офлайн

#5 Июнь 15, 2017 14:32:34

Rodegast
От: Пятигорск
Зарегистрирован: 2007-12-28
Сообщения: 2843
Репутация: +  186  -
Профиль   Отправить e-mail  

Реализовать в виде класса набор подпрограмм, для выполнения следующих операций над комплексными числами

> а этих дуплят по полной, пока не убедятся, что он им любое решение принесёт.

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

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

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

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

Нет. Класс это экземпляр метакласса.



С дураками и сектантами не спорю, истину не ищу.
Ели кому-то правда не нравится, то заранее извиняюсь.

Офлайн

#6 Июнь 15, 2017 17:15:13

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Реализовать в виде класса набор подпрограмм, для выполнения следующих операций над комплексными числами

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



Офлайн

#7 Июнь 15, 2017 17:16:00

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Реализовать в виде класса набор подпрограмм, для выполнения следующих операций над комплексными числами

py.user.next
Класс может быть экземпляром класса.
И пример есть?



Офлайн

#8 Июнь 15, 2017 17:50:42

Rodegast
От: Пятигорск
Зарегистрирован: 2007-12-28
Сообщения: 2843
Репутация: +  186  -
Профиль   Отправить e-mail  

Реализовать в виде класса набор подпрограмм, для выполнения следующих операций над комплексными числами

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

 >>> 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__ должен быть объект который при вызове вернёт класс. Будет этим объектом функция или непосредственно метакласс не суть важно.



С дураками и сектантами не спорю, истину не ищу.
Ели кому-то правда не нравится, то заранее извиняюсь.

Отредактировано Rodegast (Июнь 15, 2017 22:31:09)

Офлайн

#9 Июнь 15, 2017 20:34:50

AsphaltHero
Зарегистрирован: 2017-06-04
Сообщения: 9
Репутация: +  0  -
Профиль   Отправить e-mail  

Реализовать в виде класса набор подпрограмм, для выполнения следующих операций над комплексными числами

 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 (Июнь 15, 2017 20:35:22)

Офлайн

#10 Июнь 15, 2017 20:36:47

AsphaltHero
Зарегистрирован: 2017-06-04
Сообщения: 9
Репутация: +  0  -
Профиль   Отправить e-mail  

Реализовать в виде класса набор подпрограмм, для выполнения следующих операций над комплексными числами

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


Офлайн

  • Начало
  • » Центр помощи
  • » Реализовать в виде класса набор подпрограмм, для выполнения следующих операций над комплексными числами[RSS Feed]

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version