3 / 3 / 0
Регистрация: 28.10.2013
Сообщений: 58
1

Составить описание класса многочленов от одной переменной, задаваемых степенью многочлена и массивом коэффициентов

20.04.2014, 23:19. Показов 4882. Ответов 1
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
На дом была дана задача. Условие задачи: "Составить описание класса многочленов от одной переменной, задаваемых степенью многочлена и массивом коэффициентов. Предусмотреть методы для вычисления значения многочлена для заданного аргумента, операции сложения, вычитания и умножения многочленов с получением нового объекта-многочлена, вывод на экран описания многочлена. Предусмотреть меню, позволяющее проверить все методы класса."
Решить я её решил. Но вот может можно еще как-нибудь её упростить или что-то в ней некрасиво. Мне это интересно больше для себя, нежели для преподавателя.
Код:
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
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
 
namespace ConsoleApplication2
{
    class Polynomial
    {
        int max, min;
        int[] OneMassClass;//имя массива для коэффициентов 1-го многочлена
        int degreeClass;//указыкаваем максимальную степень
        int[] coefficientClass;//кол-во ячеек для каждого необходимые для каждого многочлен
        //конструктор для степени и кол-ва коэффициентов
        public Polynomial(int _degreeClass)
        {
 
            degreeClass = _degreeClass;
            //число коэффициентов(больше чем макс степень на 1, т.к. начинаются с 0)
            coefficientClass = OneMassClass = new int[degreeClass + 1];
        }
        //вводим коэффициенты
        public int[] ScanfPolynomial()
        {
            for (int i = 0; i <= degreeClass; i++)
            {
                Console.Write("Введите коэффициент {0}: ", i + 1);
                coefficientClass[i] = Convert.ToInt32(Console.ReadLine());
            }
            return coefficientClass;
        }
        //выводим первый многочлен, степень x - индекс массива
        public void PolynomialOne()
        {
            for (int i = 0; i < coefficientClass.Length; i++)
            {
                OneMassClass[i] = coefficientClass[i];
                //преобразуем в строку числовое значение. Для корректного отображения знаков
                Console.Write(OneMassClass[i].ToString("+#;-#;0") + "x^{0}", i);
            }
            Console.WriteLine();
        }
 
        //выводим второй многочлен используя за основу класс polynomaial, степерь х - индекс массива
        public void PolynomialTwo(Polynomial CopyClass)
        {
            for (int i = 0; i < coefficientClass.Length; i++)
            {
                CopyClass.OneMassClass[i] = coefficientClass[i];
                //для правильного отображения знаков на консоли преобразуем в строку. 
                Console.Write(CopyClass.OneMassClass[i].ToString("+#;-#;0") + "x^{0}", i);
            }
            Console.WriteLine();
        }
        //сумма многочленов
        public void SummPolynomial(Polynomial CopyClass)
        {
            //вычисляем макс и мин многолчен по кол-ву коэффициентов
            max = OneMassClass.Length >= CopyClass.OneMassClass.Length ? OneMassClass.Length : CopyClass.OneMassClass.Length;
            min = OneMassClass.Length <= CopyClass.OneMassClass.Length ? OneMassClass.Length : CopyClass.OneMassClass.Length;
            int[] summ = new int[max + min];
            //складываем коэфф. у которых есть переменнные с одинаковыми степенями
            for (int i = 0; i < min; i++)
            {
                summ[i] = OneMassClass[i] + CopyClass.OneMassClass[i];
                Console.Write(summ[i].ToString("+#;-#;0") + "x^" + i);
            }
            //дописываем те коэфф. и переменные, у кот. нет пары в противоположном многочлене
            if (min != max)
            {
                for (int i = min; i < max; i++)
                {
                    if (OneMassClass.Length == min)
                        summ[i] = CopyClass.OneMassClass[i];
                    else if (CopyClass.OneMassClass.Length == min)
                        summ[i] = OneMassClass[i];
                    Console.Write(summ[i].ToString("+#;-#;0") + "x^" + i);
                }
            }
 
        }
        //вычитание  многочленов и вывод
        public void SubtractionPolynomial(Polynomial CopyClass)
        {
            //max и min берем из метода SummPolynomial
            int[] subtract = new int[max + min];
            //складываем коэфф. у которых есть переменнные с одинаковыми степенями
            for (int i = 0; i < min; i++)
            {
                subtract[i] = OneMassClass[i] - CopyClass.OneMassClass[i];
                Console.Write(subtract[i].ToString("+#;-#;0") + "x^" + i);
            }
            //дописываем те коэфф. и переменные, у кот. нет пары в противоположном многочлене
 
            if (min != max)
            {
                for (int i = min; i < max; i++)
                {
                    if (OneMassClass.Length == min)
                        //если у второго многочлена нет пар, то перед каждым коэфф. добавляем -
                        subtract[i] = -CopyClass.OneMassClass[i];
                    else if (CopyClass.OneMassClass.Length == min)
                        subtract[i] = OneMassClass[i];
                    Console.Write(subtract[i].ToString("+#;-#;0") + "x^" + i);
                }
            }
        }
        //перемножение многочленов
        public void MultiplicationPolynomial(Polynomial CopyClass)
        {
            //массив для произведения
            int[] Multiplication = new int[OneMassClass.Length + CopyClass.OneMassClass.Length - 1];
            for (int i = 0; i < Multiplication.Length; i++)
            {
                for (int in1 = 0; in1 < OneMassClass.Length; in1++)
                {
                    for (int in2 = 0; in2 < CopyClass.OneMassClass.Length; in2++)
                    {   //если индексы многочленов дают в сумме дают индекс нового массива, то происходит
                        //перемножение, а затем сложение для упрощения многочлена
                        if (in1 + in2 == i)
                        {
                            Multiplication[i] += OneMassClass[in1] * CopyClass.OneMassClass[in2];
                        }
 
                    }
                }
                Console.Write(Multiplication[i].ToString("+#;-#;+0") + "x^" + i);
            }
        }
 
    }
 
 
    class Program
    {
        static void Main(string[] args)
        {
            Console.Write("Степень для 1-го многочлена: ");
            int degree1 = Convert.ToInt32(Console.ReadLine());
            Polynomial first = new Polynomial(degree1);
            first.ScanfPolynomial();
            Console.Write("Многочлен 1: "); first.PolynomialOne();
            Console.Write("Степень для 2-го многочлена: ");
            int degree2 = Convert.ToInt32(Console.ReadLine());
            Polynomial second = new Polynomial(degree2);
            Console.WriteLine("коэффициенты 2-го многочлена: ");
            second.ScanfPolynomial();
            Console.Write("Многочлен 2: "); second.PolynomialTwo(second);
            Console.WriteLine();
            Console.Write("Сумма: "); first.SummPolynomial(second);
            Console.WriteLine();
            Console.Write("Разность: "); first.SubtractionPolynomial(second);
            Console.WriteLine();
            Console.Write("Произведение:"); first.MultiplicationPolynomial(second);
            Console.ReadKey();
        }
    }
}
Если знаете, как сделать код проще или красивее - киньте просто подсказки: что стоит прочитать для того, чтобы я сам осознал)))
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
20.04.2014, 23:19
Ответы с готовыми решениями:

Составить описание класса многочленов от одной переменной, задаваемых степенью многочлена и массивом коэффициентов
Доброго времени суток. Нужна помощь в решении следующей задачи: &quot;Составить описание класса...

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

Класс Полином со степенью многочлена и массивом коэффициентов
1.Необходимо создать класс Полином (от одной переменной) в котором задается степень многочлена и...

Составить описание класса многочленов
очень-очень нужна Ваша помощь... С# 1.Составить описание класса многочленов вида ....

1
162 / 154 / 73
Регистрация: 03.03.2014
Сообщений: 368
21.04.2014, 02:11 2
Gadman, Я думаю, что когда говорилось о возможности вычитания, сложения и умножения, то имелась в виду перегрузка операций. Вот пример. Пару дней назад писал. Он ОЧЕНЬ неидеален, но посмотрите на перегрузку операций. И я не увидел у вас метода для вычисления значения многочлена при заданном х.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
21.04.2014, 02:11
Помогаю со студенческими работами здесь

Составить описание класса многочленов
Каждый разрабатываемый класс должен, как правило, содержать следующие элементы: скрытые поля,...

Составить описание класса для объектов-векторов,задаваемых координатами концов в трехмерном пространстве
Составить описание класса для объектов-векторов,задаваемых координатами концов в трехмерном...

Составить описание класса для объектов-векторов, задаваемых координатами концов в трехмерном пространстве.
Помогите пожалуйста с лабами из Павловской!!очень-очень прошу!! 3 лабораторная,вариант 6...

Составить описание класса для объектов-векторов,задаваемых координатами их концов в трехмерном пространстве
Составить описание класса для объектов-векторов,задаваемых координатами их концов в трехмерном...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru