7 / 7 / 6
Регистрация: 06.03.2015
Сообщений: 139

Перегрузить операции сложения, вычитания, деления и умножения комплексных чисел

12.03.2015, 12:15. Показов 7636. Ответов 12
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго времени суток.
Помогите разобраться с перегрузкой метода. Суть в том, что необходимо перегрузить операции сложения, вычитания, деления и умножения комплексных чисел. Как складывать,..., умножать комплексные числа знаю. Код для этого есть.
(выложил только сложение)
C#
1
2
3
4
5
6
7
a1 = Convert.ToDouble(textBox3.Text);
b1 = Convert.ToDouble(textBox4.Text);
a2 = Convert.ToDouble(textBox5.Text);
b2 = Convert.ToDouble(textBox6.Text);
a3 = a1 + a2;
b3 = b1 + b2;
// вывод результата
Порыл на эту тему в интернете и вот что у меня получилось:
C#
1
2
3
4
5
6
7
public static complex_number operator +(complex_number w, complex_number e)
       {
           complex_number tlb = new complex_number();
           tlb.a3 = w.a1 + w.a2;
           tlb.b3 = e.b1 + e.b2;
           return tlb;
        }
Сомневаюсь что это верно. Как исправить?
Глупый вопрос, наверно, но как мне потом это применить?
Ранее с перегрузками не работал, так что сильно не ругайтесь, пожалуйста.
Заранее спасибо.
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
12.03.2015, 12:15
Ответы с готовыми решениями:

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

Реализовать класс MyArray, который бы поддерживал индексные операции, операции сложения, вычитания, умножения, деления
Необходимо реализовать класс MyArray, который бы поддерживал индексные операции, операции сложения, вычитания, умножения, деления. А также...

Используя только операции сложения и вычитания, найти частное от деления целых чисел
Даны целые положительные числа N и K. Используя только операции сложения и вычитания, найти частное от деления.

12
310 / 318 / 119
Регистрация: 29.10.2011
Сообщений: 1,006
12.03.2015, 14:14
скорее так:
C#
1
2
3
4
5
6
7
public static complex_number operator +(complex_number w, complex_number e)
       {
           complex_number tlb = new complex_number();
           tlb.целая= w.целая + e.целая; // "целая" и "мнимая" заменить на соответствующие свойства или поля в классе
           tlb.мнимая = w.мнимая + e.мнимая;
           return tlb;
        }
здесь есть пример класса комплексных чисел с перегрузкой операторов:
Класс "Комплексное число"
1
7 / 7 / 6
Регистрация: 06.03.2015
Сообщений: 139
12.03.2015, 14:37  [ТС]
Цитата Сообщение от sldp Посмотреть сообщение
C#
1
2
tlb.целая= w.целая + e.целая; // "целая" и "мнимая" заменить на соответствующие свойства или поля в классе
tlb.мнимая = w.мнимая + e.мнимая;
сейчас у меня так и написано
0
Эксперт .NETАвтор FAQ
 Аватар для Storm23
10421 / 5151 / 1825
Регистрация: 11.01.2015
Сообщений: 6,226
Записей в блоге: 34
12.03.2015, 14:53
Цитата Сообщение от M_L Посмотреть сообщение
a1 = Convert.ToDouble(textBox3.Text);
b1 = Convert.ToDouble(textBox4.Text);
a2 = Convert.ToDouble(textBox5.Text);
b2 = Convert.ToDouble(textBox6.Text);
a3 = a1 + a2;
В вашем коде нет создания комплексных чисел, у вас создаются обычные double, которые вы затем складываете.
А нужно создать два комплексных числа и сложить их:
C#
1
2
3
var c1 = new complex_number(a1, b1);
var c2 = new complex_number(a2, b2);
var c3 = c1 + c2;
1
310 / 318 / 119
Регистрация: 29.10.2011
Сообщений: 1,006
12.03.2015, 14:54
Цитата Сообщение от M_L Посмотреть сообщение
сейчас у меня так и написано
не согласен. хотя может не до конца понял логику вашего класса.

Цитата Сообщение от M_L Посмотреть сообщение
tlb.a3 = w.a1 + w.a2;
tlb.b3 = e.b1 + e.b2;
Покажите Ваш класс. не понятно, что там делают 6 полей (a1,a2,a3,b1,b2,b3)
Должно быть 2 поля - целая часть и мнимая, и когда вы складываете два экземпляра класса, то на выходе должен получиться 3й экземпляр , в котором целая часть будет суммой целых частей двух суммирующихся классов
1
7 / 7 / 6
Регистрация: 06.03.2015
Сообщений: 139
12.03.2015, 15:03  [ТС]
Цитата Сообщение от sldp Посмотреть сообщение
Покажите Ваш класс. не понятно, что там делают 6 полей (a1,a2,a3,b1,b2,b3)
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
class complex_number
    {
        public double t, x, y, a1, a2, a3 = 0, b1, b2, b3 = 0;
        string q;
        public double X
        {
            get { return x; }
            set { x = value; }
        }
        public double Y
        {
            get { return y; }
            set { y = value; }
        }
        public double A1
        {
            get { return a1; }
            set { a1 = value; }
        }
        public double A2
        {
            get { return a2; }
            set { a2 = value; }
        }
        public double A3
        {
            get { return a3; }
            set { a3 = value; }
        }
        public double B1
        {
            get { return b1; }
            set { b1 = value; }
        }
        public double B2
        {
            get { return b2; }
            set { b2 = value; }
        }
        public double B3
        {
            get { return b3; }
            set { b3 = value; }
        }
        public string Q
        {
            get { return q; }
            set { q = value; }
        }
        public complex_number(double x, double y)
        {
            X = x;
            Y = y;
            A1 = a1;
            A2 = a2;
            A3 = a3;
            B1 = b1;
            B2 = b2;
            B3 = b3;     
            arifTogrig_and_pok();     
        }
 
        public void arifTogrig_and_pok()
        {
            double r, phi = 0;
            string str = "", q1 = "", q2 = "";
            r = Math.Sqrt(Math.Pow(x, 2) + Math.Pow(y, 2));
            if (x > 0)
            {
                t = y / x;
                phi = Math.Atan(y / x) * 180 / Math.PI;
                str = "arctg (" + t.ToString();
            }
            else
                if (x < 0 && y >= 0)
                {
                    t = y / x;
                    phi = Math.PI + Math.Atan(y / x) * 180 / Math.PI;
                    str = "π + arctg (" + t.ToString();
 
                }
                else
                    if (x < 0 && y < 0)
                    {
                        t = y / x;
                        phi = -Math.PI + Math.Atan(y / x) * 180 / Math.PI;
                        str = "-π + arctg (" + t.ToString();
                    }
                    else
                        if (x == 0 && y > 0)
                        {
                            t = y / x;
                            phi = Math.PI / 2;
                            str = "π/2";
                        }
                        else
                            if (x == 0 && y < 0)
                            {
                                t = y / x;
                                phi = -Math.PI / 2;
                                str = "-π/2";
                            }
            q = "Геометрическая форма: \nz=" + Math.Round(r, 2).ToString() + "(cos(" + str + "))+i " + "sin(" + str + "))\n"+
            "Тригонометрическая форма: \nz=e^(i " + str + "))";
            Q = q;
        }
        public string res()
        {
            arifTogrig_and_pok();
            return Q;
        }
 
        public complex_number ()
        {
            A1 = a1;
            A2 = a2;
            A3 = a3;
            B1 = b1;
            B2 = b2;
            B3 = b3;
            
        }
    }
0
484 / 439 / 123
Регистрация: 05.01.2010
Сообщений: 1,848
12.03.2015, 15:07
первая мысль - "жееесть"
1
7 / 7 / 6
Регистрация: 06.03.2015
Сообщений: 139
12.03.2015, 15:09  [ТС]
Цитата Сообщение от valera_21 Посмотреть сообщение
первая мысль - "жееесть"
Это-то понятно. Здесь реализуется перевод комплексного числа из алгебраической формы в геометрическую и показательную. Это я сделал без особого напряга, а вот перегрузка...
0
484 / 439 / 123
Регистрация: 05.01.2010
Сообщений: 1,848
12.03.2015, 15:45
для начала, так ли нужны все эти свойства, что каждый из низ значит(без объяснения по крайней мере я вряд ли чего интересного скажу по поводу перегрузки)? тем более что конструктор принимает лишь 2 параметра типа double - я так понимаю, они есть реальная и мнимая части комплексного числа?

вместо
C#
1
2
3
4
5
public double Y
        {
            get { return y; }
            set { y = value; }
        }
лучше писать просто
C#
1
public double Y { get; set; } // либо private set; если возможность менять его значение должно быть только внутри класса
1
310 / 318 / 119
Регистрация: 29.10.2011
Сообщений: 1,006
12.03.2015, 15:56
Лучший ответ Сообщение было отмечено M_L как решение

Решение

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
    class complex_number
    {
        double x, y;
 
        public double X { get { return x; } }
        public double Y { get { return y; } }
 
        public complex_number(double x=0, double y=0)
        {
            this.x = x;
            this.y = y;
        }
 
        public string ArifToGrigAndPok()
        {
            double r, t, phi = 0;
            string str = string.Empty;
            r = Math.Sqrt(Math.Pow(x, 2) + Math.Pow(y, 2));
            if (x > 0)
            {
                t = y / x;
                phi = Math.Atan(y / x) * 180 / Math.PI;
                str = "arctg (" + t.ToString();
            }
            else
                if (x < 0 && y >= 0)
                {
                    t = y / x;
                    phi = Math.PI + Math.Atan(y / x) * 180 / Math.PI;
                    str = "ПЂ + arctg (" + t.ToString();
 
                }
                else
                    if (x < 0 && y < 0)
                    {
                        t = y / x;
                        phi = -Math.PI + Math.Atan(y / x) * 180 / Math.PI;
                        str = "-ПЂ + arctg (" + t.ToString();
                    }
                    else
                        if (x == 0 && y > 0)
                        {
                            t = y / x;
                            phi = Math.PI / 2;
                            str = "ПЂ/2";
                        }
                        else
                            if (x == 0 && y < 0)
                            {
                                t = y / x;
                                phi = -Math.PI / 2;
                                str = "-ПЂ/2";
                            }
            return "Геометрическая форма: \nz=" + Math.Round(r, 2).ToString() + "(cos(" + str + "))+i " + "sin(" + str + "))\n" +
            "Тригонометрическая форма: \nz=e^(i " + str + "))";            
        }
 
        public static complex_number operator +(complex_number n1, complex_number n2)
        {           
            return new complex_number(n1.X + n2.X, n1.Y+n2.Y);;
        }
    }
пользоваться:
C#
1
2
3
4
5
6
7
8
9
var c1 = new complex_number(1, 2);
var c2 = new complex_number(2, 3);
var c3 = c1 + c2;
 
Console.WriteLine("с3.Х = {0}; c3.Y = {1}", c3.X, c3.Y); // c3.X=3; c3.Y=5
 
Console.WriteLine(new string('-',20));
 
Console.WriteLine(c3.ArifToGrigAndPok());
1
7 / 7 / 6
Регистрация: 06.03.2015
Сообщений: 139
12.03.2015, 16:17  [ТС]
Цитата Сообщение от valera_21 Посмотреть сообщение
C#
1
2
3
4
5
public double Y
{
    get { return y; }
    set { y = value; }
}
эти свойства нужны для перевода числа в другую форму, и эта часть кода работает

Добавлено через 7 минут
x,y - это целая и мнимая части комплексного числа, которое нужно представить в других формах
операции сложения,..., умножения проводятся над 2-мя другими комплексными числами
a1 - целая часть 1-го числа
a2 - целая часть 2-го числа
b1 - мнимая часть 1-го числа
b2 - мнимая часть 2-го числа
a3 - сумма целых частей
b3 - сумма мнимых частей
0
310 / 318 / 119
Регистрация: 29.10.2011
Сообщений: 1,006
12.03.2015, 16:31
Цитата Сообщение от M_L Посмотреть сообщение
x,y - это целая и мнимая части комплексного числа, которое нужно представить в других формах
операции сложения,..., умножения проводятся над 2-мя другими комплексными числами
a1 - целая часть 1-го числа
a2 - целая часть 2-го числа
b1 - мнимая часть 1-го числа
b2 - мнимая часть 2-го числа
a3 - сумма целых частей
b3 - сумма мнимых частей
Вы создаете класс, который хранит два числа?
Начните с азов ООП, иначе дальше будет сложнее.

Для каждого числа нужно создавать свой экземпляр класса, а потом уже эти экземпляры можно складывать, умножать и т.д.. В примере выше это показано.
Также происходит и с базовыми типами с Шарпе. Стринг это тоже класс.


Либо создать класс контейнер, как, например, List. И в нем уже хранить вещественные числа, но вариант выше более уместен.
1
7 / 7 / 6
Регистрация: 06.03.2015
Сообщений: 139
12.03.2015, 18:13  [ТС]
Задача решена. Тема закрыта.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
12.03.2015, 18:13
Помогаю со студенческими работами здесь

Разработать класс "Матрица" (перегрузить операции сложения, умножения, умножения на число)
Разработать класс матрица. Определить в нем конструктор перегрузить арифметические операции сложения умножения и умножения на число.

Реализовать класс векторов, переопределив операции сложения, вычитания, умножения
Реализовать класс векторов, переопределив операции сложения, вычитания, умножения векторов и операторы равенства/неравенства. Учесть...

Используя только операции сложения и вычитания, найти частное от деления нацело N на K
Даны целые положительные числа N и K. Используя только операции сложения и вычитания, найти частное от деления нацело N на K

Используя только операции сложения и вычитания, найти частное от деления нацело N на K
Даны целые положительные числа N и K. Используя только операции сложения и вычитания, найти частное от деления нацело N на K, а также...

Обеспечить операцию выполнения сложения, вычитания, умножения через классы
Нужно написать программу. Обеспечить операцию выполнения сложения, вычитания, умножения через классы. Написать программу, демонстрирующую...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Опции темы

Новые блоги и статьи
Непрерывная интеграция для пакета Python
Mr. Docker 22.06.2025
Было 4 часа утра пятницы, когда я выпустил новую версию нашей внутренней библиотеки для обработки данных. Релиз 0. 5. 2 содержал небольшой фикс для обработки дат в ISO формате, что может пойти не так?. . .
Продвинутый ETL на C# из OLTP БД в хранилище
stackOverflow 22.06.2025
Работая в сфере корпоративной аналитики, я постоянно сталкиваюсь с одним и тем же - нужны чистые, структурированные и, главное, свежие данные. Без них современные аналитические системы, машинное. . .
Мастер-класс по микросервисам на Node.js
Reangularity 21.06.2025
Node. js стал одной из самых популярных платформ для микросервисной архитектуры не случайно. Его неблокирующая однопоточная модель и событийно-ориентированный подход делают его идеальным для. . .
Управление Arduino из WPF приложения
Wired 21.06.2025
Зачем вообще связывать Arduino с WPF-приложением? Казалось бы, у Arduino есть собственная среда разработки, своя экосистема, свои способы управления. Однако при создании серьезных проектов. . .
Звёздная пыль
kumehtar 20.06.2025
Я просто это себе представляю: как создавался этот мир. Как энергия слипалась в маленькие частички. Как они собирались в первые звёзды, как во вселенной впервые появился Свет. Как эти звёзды. . .
Создание нейросети с PyTorch
AI_Generated 19.06.2025
Ключевое преимущество PyTorch — его питоновская натура. В отличие от TensorFlow, который изначально был построен как статический вычислительный граф, PyTorch предлагает динамический подход. Это. . .
JWT аутентификация в ASP.NET Core
UnmanagedCoder 18.06.2025
Разрабатывая веб-приложения, я постоянно сталкиваюсь с дилеммой: как обеспечить надежную аутентификацию пользователей без ущерба для производительности и масштабируемости? Классические подходы на. . .
Краткий курс по С#
aaLeXAA 18.06.2025
Здесь вы найдете все необходимые функции чтоб написать програму на C# Задание 1: КЛАСС FORM 1 public partial class Form1 : Form { Spisok listin = new Spisok(); . . .
50 самых полезных примеров кода Python для частых задач
py-thonny 17.06.2025
Эффективность работы разработчика часто измеряется не количеством написаных строк, а скоростью решения задач. Готовые сниппеты значительно ускоряют разработку, помогают избежать типичных ошибок и. . .
C# и продвинутые приемы работы с БД
stackOverflow 17.06.2025
Каждый . NET разработчик рано или поздно сталкивается с ситуацией, когда привычные методы работы с базами данных превращаются в источник бессонных ночей. Я сам неоднократно попадал в такие ситуации,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru