Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.89/18: Рейтинг темы: голосов - 18, средняя оценка - 4.89
 Аватар для Lynatik001
48 / 40 / 15
Регистрация: 28.09.2012
Сообщений: 818

Описать класс "Многочлен" и перегрузку операций для этого класса — сложения, умножения, вычитания

06.04.2014, 18:49. Показов 3617. Ответов 10
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго времени суток))
Как можно описать класс "Многочлен" ну и перегрузку операций для этого класса - сложения, умножения, вычитания.
интересует ибо в математике плохо шарю, вот и представления нету что да как делать.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
06.04.2014, 18:49
Ответы с готовыми решениями:

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

Класс для выполнения операций сложения, вычитания и умножения комплексных чисел
Условие: Составить описание класса для представления комплексных чисел. Обеспечить выполнение операций сложения, вычитания и умножения...

Перегрузка операторов сложения, вычитания и умножения для объектов класса
Есть класс тестовых вопросов. Объявляются 3 объекта этого класса. В 1 объект записывается первый блок вопросов значения записываются в 1...

10
162 / 154 / 73
Регистрация: 03.03.2014
Сообщений: 368
06.04.2014, 19:17
Lynatik001, Сначала определитесь что должен делать этот класс. И какой порядок многочлена максимальный.
0
 Аватар для Lynatik001
48 / 40 / 15
Регистрация: 28.09.2012
Сообщений: 818
06.04.2014, 19:24  [ТС]
Цитата Сообщение от Lynatik001 Посмотреть сообщение
и перегрузку операций для этого класса - сложения, умножения, вычитания.
сложения, умножения, вычитания многочленов*

Цитата Сообщение от Not_Jon_Skeet Посмотреть сообщение
И какой порядок многочлена максимальный.
произвольной степени
0
162 / 154 / 73
Регистрация: 03.03.2014
Сообщений: 368
06.04.2014, 20:13
Лучший ответ Сообщение было отмечено Lynatik001 как решение

Решение

Кликните здесь для просмотра всего текста
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
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
 
namespace ArbitraryPolynom
{
    public class Poly
    {
        public double[] Coeff { get; set; }
 
        public Poly(double[] coeff)
        {
            Coeff = coeff;
        }
 
        public Poly(Poly p1)
        {
            Coeff = new double[p1.Coeff.Length];
            for (int i = 0; i < Coeff.Length; i++)
                Coeff[i] = p1.Coeff[i];
        }
 
        public override string ToString()
        {
            string ans = "y = ";
            for (int i = Coeff.Length-1; i > 0; i--)
            {
                ans += String.Format("{0} (x{1})^{1} + ", Coeff[i], i);
            }
            ans += String.Format("{0};", Coeff[0]);
            return ans;
        }
 
        public static Poly operator +(Poly p1, Poly p2)
        {
            bool condition = p1.Coeff.Length <= p2.Coeff.Length;
            int loopCount = condition? p1.Coeff.Length : p2.Coeff.Length;
            Poly ans = new Poly(condition ? p2 : p1);
            if (condition)
            {
                for (int i = 0; i < loopCount; i++)
                    ans.Coeff[i] += p1.Coeff[i];
            }
            else
            {
                for (int i = 0; i < loopCount; i++)
                    ans.Coeff[i] += p2.Coeff[i];
            }
            return ans;
        }
 
        public static Poly operator -(Poly p1, Poly p2)
        {
            bool condition = p1.Coeff.Length <= p2.Coeff.Length;
            int loopCount = condition ? p1.Coeff.Length : p2.Coeff.Length;
            Poly ans = new Poly(condition ? p2 : p1);
            if (condition)
            {
                for (int i = 0; i < loopCount; i++)
                    ans.Coeff[i] -= p1.Coeff[i];
            }
            else
            {
                for (int i = 0; i < loopCount; i++)
                    ans.Coeff[i] -= p2.Coeff[i];
            }
            return ans;
        }
    }
 
    public class Program
    {
        static void Main(string[] args)
        {
            Random rand = new Random();
            double [] k = new double[5];
            double[] k1 = new double[4];
            for (int i = 0; i < k.Length; i++)
                k[i] = rand.Next(20);
            for (int i = 0; i < k1.Length; i++)
                k1[i] = rand.Next(20);
 
            Poly p1 = new Poly(k);
            Console.WriteLine(p1.ToString());
            Poly p2 = new Poly(k1);
            Console.WriteLine(p2.ToString());
 
            Poly p3 = p2 + p1;
            Console.WriteLine(p3.ToString());
                
            
            Console.ReadLine();
        }
    }
}

С сложение и вычитанием относительно легко, а вот с умножением 2х многочленов надо повозиться. Если кто напишет для произвольной степени многочлена - будет интересно взглянуть.
1
 Аватар для Lynatik001
48 / 40 / 15
Регистрация: 28.09.2012
Сообщений: 818
08.04.2014, 00:22  [ТС]
и как умножение сделать 2ух многочленов для произвольной степени, некто не подскажет?
0
1057 / 864 / 195
Регистрация: 31.03.2010
Сообщений: 2,521
08.04.2014, 16:06
Лучший ответ Сообщение было отмечено Lynatik001 как решение

Решение

1) максимальная степень многочлена определяется суммой максимальных степеней множителей
2) инициализируем нулями многочлен необходимой степени
3) внешний цикл - по членам первого множителя
3.1) внутренний цикл по членам второго множителя
3.1.1) получаем значение степени суммой степеней текущих членов
3.1.2) получаем промежуточное значение члена произведением значений текущих членов
3.1.3) в результат для члена полученной степени (из 3.1.1) прибавляем промежуточное значение( из 3.1.2)
1
162 / 154 / 73
Регистрация: 03.03.2014
Сообщений: 368
09.04.2014, 11:21
Цитата Сообщение от Lynatik001 Посмотреть сообщение
и как умножение сделать 2ух многочленов для произвольной степени, некто не подскажет?
Кликните здесь для просмотра всего текста
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
124
125
126
127
128
129
130
131
132
133
134
135
136
137
using System;
using System.Collections.Generic;
using System.Linq;
 
namespace ArbitraryPolynom
{
    public struct Component
    {
        public double Val { get; set; }
        public int Power { get; set; }
    }
 
    public class Poly
    {
        private List<Component> coeff;
       
        public Poly()
        {
            coeff = new List<Component>();
        }
 
        public Poly(double[] _coeff)
        {
            coeff = new List<Component>();
            for (int i = 0; i < _coeff.Length; i++)
            {
                coeff.Add(new Component(){Val = _coeff[i], Power = i});
            }
        }
 
        public Poly(Poly p1)
        {
            coeff = new List<Component>();
            foreach (var comp in coeff)
            {
                coeff.Add(comp);
            }
        }
 
        public override string ToString()
        {
            coeff.OrderBy(x => x.Power);
            string ans = "y = ";
            for (int i = coeff.Count - 1; i > 0; i--)
            {
                ans += String.Format("{0} x^{1}", coeff[i].Val, coeff[i].Power);
                if (coeff[i - 1].Val >= 0) ans += " + ";
            }
            ans += String.Format("{0};", coeff[0].Val);
            return ans;
        }
        
        public static Poly operator +(Poly p1, Poly p2)
        {
            Poly ans = new Poly();
            int maxP1 = p1.coeff.Max(x => x.Power);
            int maxP2 = p2.coeff.Max(x => x.Power);
            int count = maxP1 <= maxP2 ? maxP2 : maxP1;
            for (int i = 0; i < count+1; i++)
            {
                double c1 = p1.coeff.Where(x => x.Power == i).Sum(x => x.Val);
                double c2 = p2.coeff.Where(x => x.Power == i).Sum(x => x.Val);
                ans.coeff.Add(new Component() {Power = i, Val = c1 + c2});
            }
            ans.coeff.OrderBy(x => x.Power);
            return ans;
        }
 
        public static Poly operator -(Poly p1, Poly p2)
        {
            Poly ans = new Poly();
            int maxP1 = p1.coeff.Max(x => x.Power);
            int maxP2 = p2.coeff.Max(x => x.Power);
            int count = maxP1 <= maxP2 ? maxP2 : maxP1;
            for (int i = 0; i < count + 1; i++)
            {
                double c1 = p1.coeff.Where(x => x.Power == i).Sum(x => x.Val);
                double c2 = p2.coeff.Where(x => x.Power == i).Sum(x => x.Val);
                ans.coeff.Add(new Component() { Power = i, Val = c1 - c2 });
            }
            ans.coeff.OrderBy(x => x.Power);
            return ans;
        }
 
        public static Poly operator *(Poly p1, Poly p2)
        {
            Poly temp = new Poly();
            foreach (Component c1 in p1.coeff)
            {
                foreach (Component c2 in p2.coeff)
                {
                    temp.coeff.Add(new Component(){Val = c1.Val*c2.Val, 
                                                  Power = c1.Power+c2.Power});
                }
            }
            Poly ans = new Poly();
            int count = temp.coeff.Max(x => x.Power);
            for (int i = 0; i < count+1; i++)
            {
                double c3 = temp.coeff.Where(x => x.Power == i).Sum(x => x.Val);
                ans.coeff.Add(new Component(){Val = c3,Power = i});
            }
            ans.coeff.OrderBy(x => x.Power);
            return ans;
        }
    }
 
 
 
    public class Program
    {
        static void Main(string[] args)
        {
            Random rand = new Random();
            double [] k = new double[5];
            double[] k1 = new double[4];
            for (int i = 0; i < k.Length; i++)
                k[i] = rand.Next(-10,10);
            for (int i = 0; i < k1.Length; i++)
                k1[i] = rand.Next(-10, 10);
 
            Poly p1 = new Poly(k);
            Console.WriteLine(p1.ToString());
            Poly p2 = new Poly(k1);
            Console.WriteLine(p2.ToString());
 
            Poly p3 = p2 - p1;
            Console.WriteLine(p3.ToString());
 
            p3 = p2 * p1;
            Console.WriteLine(p3.ToString());
                
            
            Console.ReadLine();
        }
    }
}
1
1057 / 864 / 195
Регистрация: 31.03.2010
Сообщений: 2,521
09.04.2014, 20:22
....

Добавлено через 2 минуты
Not_Jon_Skeet, ИМХО лучше сразу в цикле записывать верные значения, чем создавать временный список и потом из него получать результат

Добавлено через 1 минуту
C#
1
ans.coeff.OrderBy(x => x.Power);
не изменит порядок элементов во входящем списке
0
162 / 154 / 73
Регистрация: 03.03.2014
Сообщений: 368
09.04.2014, 23:52
Цитата Сообщение от Learx Посмотреть сообщение
не изменит порядок элементов во входящем списке
Да, действительно. Надо присвоить чему-то IEnumerable'ному. А почему так происходит? Я думал, LINQ работает как своего рода статические методы или функции в Яваскрипте.
0
1057 / 864 / 195
Регистрация: 31.03.2010
Сообщений: 2,521
10.04.2014, 12:25
Not_Jon_Skeet, нет, LINQ работает как обработчик: на входе данные - на выходе результат. сами данные не изменяет.
если уже работать с промежуточным контейнером, то тогда так:
C#
1
2
3
4
5
6
//создаем запрос LINQ который группирует одинаковые и сортирует их
var res = temp.coeff.GroupBy(x => x.Power).Select(s=> new {Pow=s.Key, Val=s.Sum()) .OrderBy(o=>o.Pow);
foreach(var r in res)
{
    ans.coeff.Add(new Component(){Val = r.Val, Power = r.Pow});
}
но как я уже говорил лучше все-таки не использовать промежуточный
1
Master of Orion
Эксперт .NET
 Аватар для Psilon
6101 / 4957 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
10.04.2014, 12:44
У меня был класс многочлена с реализованной арифметикой, позже скину
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
10.04.2014, 12:44
Помогаю со студенческими работами здесь

Определите для класса Rational операторы сложения, вычитания, умножения и деления
Определите для класса Rational операторы сложения, вычитания, умножения и деления, так чтобы объекты типа Rational можно было складывать...

Выполнение операций сложения, вычитания и умножения матриц
Нужно создать программу для экзамена! Задание: Напишите программу, выполняющую операции сложения, вычитания и умножения матриц 3х3....

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

Перегрузка операций сложения/умножения вычитания 16-ричных чисел
Выполнить перезагрузку перечисленных операций, закрепив за ними соответствующий функциональный смысл! дано шестнадцатиричное число....

Посчитать приближенно количество операций умножения, деления, сложения и вычитания
1.Написать программу для решения СЛАУ методами Крамера и Гаусса. 2.Посчитать приближенно количество операций умножения,деление, сложение...


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
Фото: Daniel Greenwood
kumehtar 13.11.2025
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru