Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.64/11: Рейтинг темы: голосов - 11, средняя оценка - 4.64
0 / 0 / 0
Регистрация: 22.09.2012
Сообщений: 19
1

Библиотека полиномов

05.10.2012, 22:57. Показов 2078. Ответов 5
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Всем привет,я создал библиотеку для работы с полиномами(сложение,вычитание,дифф. итд)
но прога не работает,когда один из полиномов нулевой степени

мне кажется,что ошибка вот в этой процедуре

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
polinom *SummaPolinomov(polinom *a,polinom*b)
{
    polinom *c=new polinom;
    if(a->stepen_m>=b->stepen_m)
    {
        c->massiv_koef=new double[a->stepen_m+1];
        c->stepen_m=a->stepen_m;
        for (int i=0; i<b->stepen_m+1; i++)
        {   cout<<'1'<<endl;
            c->massiv_koef[i]=a->massiv_koef[i]+b->massiv_koef[i];
        }   cout<<'2';
        for(int i=b->stepen_m+1; i<a->stepen_m+1; i++)
        {
            c->massiv_koef[i]=a->massiv_koef[i];
        }
        if (c->massiv_koef[c->stepen_m]==0)
        {
            c->stepen_m=c->stepen_m-1;
        }
 
    }
 
    if (a->stepen_m<b->stepen_m)
    {   cout<<"1";
        c->massiv_koef=new double[b->stepen_m+1];
        c->stepen_m=b->stepen_m;
        for (int i=0; i<a->stepen_m+1; i++)
        {
            c->massiv_koef[i]=a->massiv_koef[i]+b->massiv_koef[i];
            cout<<c->massiv_koef[i]<<endl;
        }
        for(int i=a->stepen_m+1; i<b->stepen_m+1; i++)
        {
            c->massiv_koef[i]=b->massiv_koef[i];
        }
    }
    return c;
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
05.10.2012, 22:57
Ответы с готовыми решениями:

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

Деление полиномов
Не компилируется) #include&lt;math.h&gt; #include&lt;stdio.h&gt; #include&lt;alloc.h&gt; #include&lt;conio.h&gt;...

Умножение полиномов
Собсна задача определить класс полином перегрузить операторы, это я все сделал. Осталось умножение....

Класс полиномов
Здравствуйте. Помогите, пожалуйста, понять, почему не работает код. Есть класс полиномов,...

5
0 / 0 / 0
Регистрация: 27.02.2021
Сообщений: 89
31.01.2022, 17:36 2
добрый день, можно попросить показать весь код, если получилось сделать это задание
0
4770 / 2580 / 892
Регистрация: 29.11.2010
Сообщений: 5,581
31.01.2022, 23:25 3
Ну да.
Попросить код в посте десятилетней давности у человека с нулём постов.

Логично-логично.

Цитата Сообщение от Anastasia_Galax Посмотреть сообщение
это задание
Выложите "это задание" полностью, так, как его дал преподаватель, в новой теме. Вам с высокой вероятностью напишут этот код с нуля.

Добавлено через 56 минут
Anastasia_Galax, судя по коду выше, ТЦ делал полиномы с одним неизвестным и простыми операциями -- сложение, вычитание, умножение.
Можно, например, сделать так:
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
159
#include <iostream>
#include <utility>
#include <iomanip>
 
/**
 * Single Indeterminate Polynomial
 * @tparam T coefficient type
 */
template<typename T>
class Polynomial {
public:
    using Self = Polynomial<T>;
 
    Polynomial() : size{1}, coefficients(new T[1]{}) {}
 
    explicit Polynomial(std::size_t size) : size{size}, coefficients(new T[size]{}) {}
 
    Polynomial(const std::initializer_list<T> &coefficients) : size{coefficients.size()}, coefficients{new T[size]} {
        std::copy(coefficients.begin(), coefficients.end(), Polynomial::coefficients);
    }
 
    Polynomial(const Self &o) : size{o.size}, coefficients(new T[size]{}) {
        std::copy(o.coefficients, o.coefficients + o.size, coefficients);
    }
 
    Self &operator=(const Self &o) {
        if (this != &o) {
            size = o.size;
            if (coefficients != o.coefficients) {
                delete[] coefficients;
                coefficients = new T[size]{};
                std::copy(o.coefficients, o.coefficients + o.size, coefficients);
            }
        }
        return *this;
    }
 
    Polynomial(Self &&o) noexcept: size{std::move(o.size)}, coefficients{std::exchange(o.coefficients, nullptr)} {}
 
    Self &operator=(Self &&o) noexcept {
        if (this != &o) {
            size = std::move(o.size);
            if (coefficients != o.coefficients) {
                coefficients = std::exchange(o.coefficients, nullptr);
            }
        }
        return *this;
    }
 
    Self &operator+=(const Self &o) {
        if (this == &o) {
            return *this;
        }
        if (o.size > size) {
            T *extended = new T[o.size]{};
            std::copy(coefficients, coefficients + size, extended);
            delete[] coefficients;
            coefficients = extended;
            size = o.size;
        }
        for (std::size_t i = 0; i < o.size; ++i) {
            coefficients[i] += o.coefficients[i];
        }
        return *this;
    }
 
    virtual ~Polynomial() {
        delete[] coefficients;
    }
 
    std::size_t getSize() const {
        return size;
    }
 
    T &operator[](std::size_t i) {
        return coefficients[i];
    }
 
    const T &operator[](std::size_t i) const {
        return coefficients[i];
    }
 
private:
    std::size_t size;
    T *coefficients;
};
 
template<typename T>
std::ostream &operator<<(std::ostream &out, const Polynomial<T> &p) {
    for (std::size_t i = p.getSize(); i > 0; --i) {
        const T &value = p[i - 1];
        if (value >= 0) {
            out << "+";
        }
        out << std::fixed << std::setprecision(2) << value;
        if (i == 2) {
            out << "*x";
        } else if (i > 1) {
            out << "*x^" << (i - 1);
        }
    }
    return out;
}
 
template<typename T>
Polynomial<T> operator+(const Polynomial<T> &a, const Polynomial<T> &b) {
    if (a.getSize() < b.getSize()) {
        return operator+(b, a);
    }
    Polynomial<T> result{a};
    for (std::size_t i = 0; i < b.getSize(); ++i) {
        result[i] += b[i];
    }
    return result;
}
 
template<typename T>
Polynomial<T> operator-(const Polynomial<T> &a, const Polynomial<T> &b) {
    if (a.getSize() < b.getSize()) {
        return operator+(b, a);
    }
    Polynomial<T> result{a};
    for (std::size_t i = 0; i < b.getSize(); ++i) {
        result[i] -= b[i];
    }
    return result;
}
 
template<typename T>
Polynomial<T> multiply(const Polynomial<T> &p, const T &coefficient, std::size_t power) {
    Polynomial<T> result(p.getSize() + power);
    for (std::size_t i = 0; i < p.getSize(); ++i) {
        result[i + power] = p[i] * coefficient;
    }
    return result;
}
 
template<typename T>
Polynomial<T> operator*(const Polynomial<T> &a, const Polynomial<T> &b) {
    if (b.getSize() < a.getSize()) {
        return operator*(b, a);
    }
    Polynomial<T> result(a.getSize() + b.getSize() - 1);
    for (std::size_t i = 0; i < a.getSize(); ++i) {
        result += multiply(b, a[i], i);
    }
    return result;
}
 
int main() {
    Polynomial<int> a{1, 1, 1};
    Polynomial<int> b{1, 1, 1};
    std::cout << "a = " << a << std::endl
        << "b = " << b << std::endl
        << "a + b = " << a + b << std::endl
        << "a - b = " << a - b << std::endl
        << "a * b = " << a * b << std::endl;
    return 0;
}
0
0 / 0 / 0
Регистрация: 27.02.2021
Сообщений: 89
06.02.2022, 14:55 4
спасибо огромное!
А как в вашем коде сделать ручное заполнение полинома?
0
4770 / 2580 / 892
Регистрация: 29.11.2010
Сообщений: 5,581
06.02.2022, 15:59 5
Цитата Сообщение от Anastasia_Galax Посмотреть сообщение
А как в вашем коде сделать ручное заполнение полинома?
Чтобы в моём коде сделать ручное заполнение полинома надо написать ввод коэффициентов полинома и создать из них объект класса Polynomial.
Дерзайте.

Шучу
Не сомневаюсь, что вы хотели попросить написать за вас код ввода.


Поскольку классу Polynomial нужно знать свой размер в момент создания я добавил в основной функции ввод максимальной степени в полиноме и еще оператор ввода коэффициентов полинома для удобства.
Можно поизвращаться и считывать полином как строку, но чёт лень.
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
159
160
161
162
163
164
165
166
#include <iostream>
#include <utility>
#include <iomanip>
 
/**
 * Single Indeterminate Polynomial
 * @tparam T coefficient type
 */
template<typename T>
class Polynomial {
public:
    using Self = Polynomial<T>;
 
    Polynomial() : size{1}, coefficients(new T[1]{}) {}
 
    explicit Polynomial(std::size_t size) : size{size}, coefficients(new T[size]{}) {}
 
    Polynomial(const std::initializer_list<T> &coefficients) : size{coefficients.size()}, coefficients{new T[size]} {
        std::copy(coefficients.begin(), coefficients.end(), Polynomial::coefficients);
    }
 
    Polynomial(const Self &o) : size{o.size}, coefficients(new T[size]{}) {
        std::copy(o.coefficients, o.coefficients + o.size, coefficients);
    }
 
    Self &operator=(const Self &o) {
        if (this != &o) {
            size = o.size;
            if (coefficients != o.coefficients) {
                delete[] coefficients;
                coefficients = new T[size]{};
                std::copy(o.coefficients, o.coefficients + o.size, coefficients);
            }
        }
        return *this;
    }
 
    Polynomial(Self &&o) noexcept: size{std::move(o.size)}, coefficients{std::exchange(o.coefficients, nullptr)} {}
 
    Self &operator=(Self &&o) noexcept {
        if (this != &o) {
            size = std::move(o.size);
            if (coefficients != o.coefficients) {
                coefficients = std::exchange(o.coefficients, nullptr);
            }
        }
        return *this;
    }
 
    Self &operator+=(const Self &o) {
        if (this == &o) {
            return *this;
        }
        if (o.size > size) {
            T *extended = new T[o.size]{};
            std::copy(coefficients, coefficients + size, extended);
            delete[] coefficients;
            coefficients = extended;
            size = o.size;
        }
        for (std::size_t i = 0; i < o.size; ++i) {
            coefficients[i] += o.coefficients[i];
        }
        return *this;
    }
 
    virtual ~Polynomial() {
        delete[] coefficients;
    }
 
    std::size_t getSize() const {
        return size;
    }
 
    T &operator[](std::size_t i) {
        return coefficients[i];
    }
 
    const T &operator[](std::size_t i) const {
        return coefficients[i];
    }
 
private:
    std::size_t size;
    T *coefficients;
};
 
template<typename T>
std::ostream &operator<<(std::ostream &out, const Polynomial<T> &p) {
    for (std::size_t i = p.getSize(); i > 0; --i) {
        const T &value = p[i - 1];
        if (value >= 0) {
            out << "+";
        }
        out << std::fixed << std::setprecision(2) << value;
        if (i == 2) {
            out << "*x";
        } else if (i > 1) {
            out << "*x^" << (i - 1);
        }
    }
    return out;
}
 
template<typename T>
std::istream &operator>>(std::istream &in, Polynomial<T> &p) {
    const std::size_t last = p.getSize() - 1;
    for (std::size_t i = 0; i < p.getSize(); ++i) {
        in >> p[last - i];
    }
    return in;
}
 
template<typename T>
Polynomial<T> operator+(const Polynomial<T> &a, const Polynomial<T> &b) {
    if (a.getSize() < b.getSize()) {
        return operator+(b, a);
    }
    Polynomial<T> result{a};
    for (std::size_t i = 0; i < b.getSize(); ++i) {
        result[i] += b[i];
    }
    return result;
}
 
template<typename T>
Polynomial<T> operator-(const Polynomial<T> &a, const Polynomial<T> &b) {
    if (a.getSize() < b.getSize()) {
        return operator+(b, a);
    }
    Polynomial<T> result{a};
    for (std::size_t i = 0; i < b.getSize(); ++i) {
        result[i] -= b[i];
    }
    return result;
}
 
template<typename T>
Polynomial<T> multiply(const Polynomial<T> &p, const T &coefficient, std::size_t power) {
    Polynomial<T> result(p.getSize() + power);
    for (std::size_t i = 0; i < p.getSize(); ++i) {
        result[i + power] = p[i] * coefficient;
    }
    return result;
}
 
template<typename T>
Polynomial<T> operator*(const Polynomial<T> &a, const Polynomial<T> &b) {
    if (b.getSize() < a.getSize()) {
        return operator*(b, a);
    }
    Polynomial<T> result(a.getSize() + b.getSize() - 1);
    for (std::size_t i = 0; i < a.getSize(); ++i) {
        result += multiply(b, a[i], i);
    }
    return result;
}
 
int main() {
    std::size_t size;
    std::cin >> size;
    Polynomial<int> c(size);
    std::cin >> c;
    std::cout << c;
    return 0;
}
In:
Код
3 1 -2 1
Out:
Код
+1*x^2-2*x+1
0
0 / 0 / 0
Регистрация: 27.02.2021
Сообщений: 89
06.02.2022, 16:57 6
спасибо вам огромное, добрый человек!
0
06.02.2022, 16:57
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
06.02.2022, 16:57
Помогаю со студенческими работами здесь

Программа упрощения полиномов
Добрый день! Нуждаюсь в помощи или совете. Столкнулся со следующей задачей: на вход программы из...

Сложение и умножение полиномов
Необходимо разработать класс &quot;Полином&quot;, в котором информация о коэффициентах хранится в виде...

Простой класс полиномов
Есть методы для умножения, сложения и производной #include &lt;iostream&gt; #include &lt;cstdlib&gt; using...

Move семантика (класс полиномов)
Доброго времени суток. Пишу простенький класс полиномов, в котором есть единственное приватное поле...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru