Форум программистов, компьютерный форум CyberForum.ru

Создание класса Polinom - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 50, средняя оценка - 4.74
efe
 Аватар для efe
7 / 7 / 1
Регистрация: 25.10.2010
Сообщений: 218
27.04.2012, 04:12     Создание класса Polinom #1
Создать класс Polinom.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
laplas
15 / 11 / 1
Регистрация: 25.12.2010
Сообщений: 91
27.04.2012, 07:35     Создание класса Polinom #2
а конкретнее??
что он должен содержать?
PqDn
 Аватар для PqDn
2 / 2 / 0
Регистрация: 04.02.2012
Сообщений: 13
27.04.2012, 07:58     Создание класса Polinom #3
коэффициенты многочлена,
базовая операция сложение многочленов, умножение на число
Стыдно такое не сделать!!!
efe
 Аватар для efe
7 / 7 / 1
Регистрация: 25.10.2010
Сообщений: 218
27.04.2012, 10:46  [ТС]     Создание класса Polinom #4
ну сделай если тебе не стыдно!
Aero93
8 / 8 / 1
Регистрация: 19.12.2011
Сообщений: 35
27.04.2012, 12:09     Создание класса Polinom #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
#include <iostream>
using namespace std;
#include <conio.h>
#include <math.h>
class Polinom {
public:
int a,b,c;
int roots() {
float D;
float x1,x2
D=sqrt(pow(b,2)+(4*a*c));
if (D>=0) {
x1=(-b+D)\(2*a); }
else cout << "Korney net!";
return x1; }
}; Polinom A;
int main() {
int koren;
cout << "Input a= "
cin >> A.a;
cout << "Input b= "
cin >> A.b;
cout << "Input c= "
cin >> A.c;
koren=A.roots();
cout << "Koren' = " << koren << endl;
getch();
}
Вот тебе пример с функцией нахождения корней полинома второго порядка...
laplas
15 / 11 / 1
Регистрация: 25.12.2010
Сообщений: 91
27.04.2012, 12:13     Создание класса Polinom #6
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
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
#include <iostream.h>
#include <memory.h>
 
//класс Polynom
class Polynom{
private:
    unsigned int deg; //степень полинома
    double *koef; //указатель на массив коэффициентов полинома
                  //koef[i] - коэффициент при i-й степени,
                  //koef[0] - коэффициент при нулевой степени
    void CorrectDeg(); // функция корректировки степени полинома
 
public:
    Polynom(); //конструктор без параметров
    Polynom(unsigned int, double*); //конструктор с параметрами
    Polynom(const Polynom &); //копирующий контсруктор
    Polynom::~Polynom(); //деструктор
 
    unsigned int GetDeg(); //функция получения степени полинома
    double GetKoef(unsigned int); //функция получения коэффициента при i-й степени
    unsigned int SetKoef(double, unsigned int); //функция задания коэффициента при i-й 
                                                //степени, возвращает степень полинома
    Polynom operator + (const Polynom &);   //оператор сложения двух полиномов
    Polynom operator = (const Polynom &);   //оператор присваивания
    friend Polynom MultConst(double, Polynom &); //дружественная функция умножения полинома
                                              //на константу
    void InputPolynom();    //функция ввода полинома
    void OutputPolynom();   //функция вывода полинома
};
 
// конструктор без параметров: создается полином нулевой степени
// с коэффициентом при нулевой степени равным нулю
Polynom::Polynom(){
    deg=0;
    koef=new double[deg+1];
    koef[0]=0.0;
}
 
// конструктор с параметрами
// new_deg - степень создаваемого полинома
// newkoef - указатель на new_deg+1 - элементный массив с коэффициентами 
//           полинома, где newkoef[i] - коффициент при i-й степени
//           и newkoef[0] - коэффициент при нулевой степени
// В результате степень полинома будет наибольшим номером ненулевого
// элемента массива new_koef и меньше или равна new_deg (по определению степени полинома)
Polynom::Polynom(unsigned int new_deg, double *new_koef){
    deg=0;
    for(int i=0;i<=new_deg;i++)
        if(new_koef[i]!=0) deg=i;   //инициализация переменной степени
    koef=new double[deg+1];
    for(i=0;i<=deg;i++)
        koef[i]=new_koef[i]; //инициализация массива коэффициентов
}
 
//копирующий конструктор
Polynom::Polynom(const Polynom &f){
    deg=f.deg;
    koef=new double[deg+1];
    for(int i=0;i<=deg;i++)
        koef[i]=f.koef[i];
}
 
//деструктор
Polynom::~Polynom(){
    delete[] koef;
}
// функция получения степени полинома
unsigned int Polynom::GetDeg(){
    return deg;
}
 
// функция получения коэффициента при i-й степени
double Polynom::GetKoef(unsigned int i){
    if(i<=deg) 
        return koef[i];
    else 
        return 0.0;
}
 
// функция задания коэффициента при i-й степени
unsigned int Polynom::SetKoef(double new_koef, unsigned int i){
    if(i<=deg) koef[i]=new_koef;
    else return deg;
    CorrectDeg();   
    return deg;
}
 
//оператор сложения двух полиномов
Polynom Polynom::operator + (const Polynom &t){
    int i;
    Polynom *result;
 
    if(deg>=t.deg){ //если степень первого полинома больше степени второго
        result=new Polynom(deg,koef);
        for(i=0;i<=t.deg;i++)
            result->koef[i]=result->koef[i]+t.koef[i];
    }
    else{                   //если степень второго полинома больше степень первого
        result=new Polynom(t.deg,t.koef);
        for(i=0;i<=deg;i++)
            result->koef[i]=result->koef[i]+koef[i];
    }
    result->CorrectDeg();
    return *result;
}
 
//оператор присваивания
Polynom Polynom::operator = (const Polynom &t){
    deg=t.deg;
    delete[] koef;
    koef=new double[deg+1];
    for(int i=0;i<=deg;i++)
        koef[i]=t.koef[i];
    return *this;
}
    
 
//оператор умножения числа на полином
Polynom operator * (double K, Polynom &t){
    return MultConst(K,t);
}
 
//оператор умножения полинома на число
Polynom operator * (Polynom &t, double K){
    return MultConst(K,t);
}
 
//функция реализующая умножение полинома на число
Polynom MultConst(double K, Polynom &t){
    if(K==0){
        Polynom result;
        return result;
    }
    else{
        int deg=t.deg;
        double *tmp_koef=new double[deg+1];
        for(int i=0;i<=deg;i++)
            tmp_koef[i]=K*t.koef[i];
        Polynom result(deg,tmp_koef);
        delete[] tmp_koef;
        return result;
    }
}
 
// функция корректировки степени полинома: коэффициент 
// при максимальной степени должен быть ненулевым
void Polynom::CorrectDeg(){
    if(koef[deg]==0){
        do{                                 
            deg--;
        }while(deg && koef[deg]==0);
    }
}
 
//функция ввода полинома
void Polynom::InputPolynom(){
    cout << "Input degree: ";
    cin >> deg;
    delete[] koef;
    koef=new double[deg+1];
    for(int i=0;i<deg;i++){
        cout << "K" << i << " = ";
        cin >> koef[i];
    }
    do{
        cout << "K" << deg << " = ";
        cin >> koef[deg];
        if(koef[deg]==0)
            cout << "K" << deg << " must not be zero!!!\n";
    }while(!koef[deg]);
}
 
void Polynom::OutputPolynom(){
    if(koef[deg]==1)
        cout << "X^" << deg;
    else if(koef[deg]==-1)
        cout << "-X^" << deg;
    else
        cout << koef[deg] << "X^" << deg;
 
    for(int i=deg-1;i>0;i--){
        if(koef[i]>0){
            if(koef[i]==1)
                cout << " + " << "X^" << i;
            else
                cout << " + " << koef[i] << "X^" << i;
        }else if(koef[i]<0)
            if(koef[i]==-1)
                cout << " - " << "X^" << i;
            else
                cout << " - " << (-1)*koef[i] << "X^" << i;
    }
 
    if(koef[0]>0)
        cout << " + " << koef[0] << "\n";
    else if(koef[0]<0)
        cout << " - " << (-1)*koef[0] << "\n";
}
правда тут многого нет..например нет произведения 2х многочленов..
Yandex
Объявления
27.04.2012, 12:13     Создание класса Polinom
Ответ Создать тему
Опции темы

Текущее время: 02:06. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru