С Новым годом! Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/18: Рейтинг темы: голосов - 18, средняя оценка - 5.00
9 / 9 / 3
Регистрация: 14.12.2010
Сообщений: 129

Сложение полинома

08.02.2016, 22:52. Показов 3261. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Помогите устранить ошибку в коде
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
#include <iostream>
#include <conio.h>
using namespace std;
 
class Polynom {
    unsigned int degree; //степень полинома
    int* koef; //указатель на массив коэффициентов полинома
               //koef[i] - коэффициент при i-й степени,
               //koef[0] - коэффициент при нулевой степени
public:
    Polynom(); //конструктор без параметров
    Polynom(unsigned int, int*); //конструктор с параметрами
    Polynom(const Polynom &); //копирующий контсруктор
    ~Polynom(); //деструктор
    friend Polynom operator +(const Polynom&, const Polynom&); //дружественная ф-ия перегрузки оператора сложения
    friend ostream& operator <<(ostream&, const Polynom&);
    void InputPolynom();
    //Polynom operator +=(const Polynom&); //ф-ия перегрузки оператора +=
};
Polynom::Polynom(){
    degree = 0;
    koef = new int[degree + 1];
    koef[0] = 0;
}
Polynom::Polynom(unsigned int _degree, int* _koef){
    degree = 0;
    for(int i = 0; i < _degree; i++) 
        if(_koef[i] != 0) degree = i;
    koef = new int[degree + 1]; //инициализация переменной степени
    for(int i = 0; i < degree; i++)
        koef[i] = _koef[i]; //инициализация массива коэффициентов
}
 
//копирующий конструктор
Polynom::Polynom(const Polynom &f){
    degree=f.degree;
    koef=new int[degree+1];
    for(int i=0;i<=degree;i++)
        koef[i]=f.koef[i];
}
 
Polynom operator +(const Polynom& p1, const Polynom& p2){
    int i = 0;
    Polynom temp;
    temp.degree = (p1.degree > p2.degree) ? p1.degree : p2.degree; //инициализация переменной степени 
    temp.koef = new int[temp.degree + 1];
 
    if(p1.degree > p2.degree) { //найдем большую степень
        for(i = p1.degree; i > p2.degree; i--){
            cout << p1.koef[i] << "\n";
            temp.koef[i] = p1.koef[i];
            cout << temp.koef[i] << "\n";}
        for(i = p2.degree; i >= 0; i--)
            temp.koef[i] = p1.koef[i] + p2.koef[i];
    }
 
    if(p1.degree < p2.degree) {
        for(i = p2.degree; i > p1.degree; i--)
            temp.koef[i] = p2.koef[i];
        for(i = p1.degree; i >= 0; i--)
            temp.koef[i] = p1.koef[i] + p2.koef[i];
    }
    if(p1.degree == p2.degree) 
        for(i = 0; i < p1.degree; i++)
            temp.koef[i] = p1.koef[i] + p2.koef[i];
 
    return temp;
}
ostream& operator <<(ostream& out, const Polynom& p){
 
    if(p.koef[p.degree]==1)
        out << "X^" << p.degree;
    else if(p.koef[p.degree]==-1)
        out << "-X^" << p.degree;
    else
        out << p.koef[p.degree] << "X^" << p.degree;
 
    for(int i = p.degree-1; i > 0; i--){
        if(p.koef[i]>0){
            if(p.koef[i]==1)
                out << " + " << "X^" << i;
            else
                out << " + " << p.koef[i] << "X^" << i;
        }else if(p.koef[i] < 0)
            if(p.koef[i] == -1)
                out << " - " << "X^" << i;
            else
                out << " - " << (-1) * p.koef[i] << "X^" << i;
    }
    if(p.koef[0] > 0)
        out << " + " << p.koef[0];
    else if(p.koef[0] < 0)
        out << " - " << (-1) * p.koef[0];
    return out;
}
 
//функция ввода полинома
void Polynom::InputPolynom(){
    cout << "Input degree: ";
    cin >> degree;
    delete[] koef;
    koef = new int[degree+1];
    for(int i=0; i<degree; i++){
        cout << "K" << i << " = ";
        cin >> koef[i];
    }
    do{
        cout << "K" << degree << " = ";
        cin >> koef[degree];
        if(koef[degree]==0)
            cout << "K" << degree << " must not be zero!!!\n";
    }while(!koef[degree]);
    for (int i = 0; i<=degree; i++) cout << koef[i] << " ";
}
 
Polynom::~Polynom(){
    delete[] koef;
}
 
int main(){
Polynom p1, p2, rez;
cout << rez;
p1.InputPolynom();
p2.InputPolynom();
rez = p1 + p2;
cout << rez;
getch();
return 0;
}
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
08.02.2016, 22:52
Ответы с готовыми решениями:

Коэффициенты полинома
подскажите пожалуйста, каким методом нужно считать коэффициенты? как составить программу для их вычисления?

Умножение полинома
Написал черновой #include &quot;stdafx.h&quot; #include &lt;iostream&gt; #include &lt;sstream&gt; #include &lt;string&gt; #include &lt;stdlib.h&gt; using namespace...

Список полинома
Класс полином и класс список для полинома. В списке в функции SortAdd перед return выдает ошибку. С чем может быть связано? Код: ...

5
Эксперт С++
4986 / 3093 / 456
Регистрация: 10.11.2010
Сообщений: 11,170
Записей в блоге: 10
08.02.2016, 23:38
Цитата Сообщение от v0l0d1ka Посмотреть сообщение
Помогите устранить ошибку в коде
Что за ошибка?
0
9 / 9 / 3
Регистрация: 14.12.2010
Сообщений: 129
09.02.2016, 00:25  [ТС]
Программа компилится но в итоговом результате вместо сложения соответсвующих степеней выводится мусор
0
1394 / 1023 / 325
Регистрация: 28.07.2012
Сообщений: 2,813
09.02.2016, 02:11
v0l0d1ka,
Цитата Сообщение от v0l0d1ka Посмотреть сообщение
rez = p1 + p2;
а оператор присваивания ты не написал...
0
9 / 9 / 3
Регистрация: 14.12.2010
Сообщений: 129
10.02.2016, 18:43  [ТС]
Зачем, если есть конструктор копирования
0
1394 / 1023 / 325
Регистрация: 28.07.2012
Сообщений: 2,813
10.02.2016, 20:26
v0l0d1ka, конструктор копирования нужен для конструирования объекта.
Когда у тебя выполняется строчка
Цитата Сообщение от v0l0d1ka Посмотреть сообщение
Polynom p1, p2, rez;
у объекта rez вызывается конструктор по-умолчанию.
И все, объект построен, конструкторы для него уже вызываться не будут.
И уже в строке
Цитата Сообщение от v0l0d1ka Посмотреть сообщение
rez = p1 + p2;
будет происходить присваивание в rez временного объекта (p1+p2).
Но вот незадача, у тебя оператора присваивание нет, так что вызовется оператор по умолчанию, который просто скопирует указатели. А затем для временного объекта (p1+p2) вызовется деструктор и в rez будет шлак.

Логично делать отдельно оператор присваивания, а в конструкторе копирования вызывать его.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
10.02.2016, 20:26
Помогаю со студенческими работами здесь

Декларация класса полинома
Как лучше задекларировать класс полинома n-ного порядка от m различных x с мультипликативными членами суммарной степени &lt;=n? Например,...

Графическое отображение полинома
Доброго времени суток форумчане. Сложилась проблема, встала задача которую я не могу воплотить в жизнь. Задача такова. Разработать...

Коэффициенты полинома Лагранжа
Здравствуйте. Есть программа, находящая значение полинома Лагранжа в заданной точке. Как можно вывести коэффициенты этого полинома?

Реализовать вывод полинома
void TMyMathematic::printSet()const { cout &lt;&lt; &quot;\nMy Primer: &quot; &lt;&lt; endl; for (int i = 0; i &lt; size ; i ++ ) { cout &lt;&lt; chislitel &lt;&lt; &quot;/&quot;...

структура,описание полинома
ПЛЗ, помогите , =-O:wall::help: надо написать на языке С Ввести структуру для описания понятия алгебраический полином. Составить и...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
Изучаю kubernetes
lagorue 13.01.2026
А пригодятся-ли мне знания kubernetes в России?
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru