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

Описать класс "полином" - Для чего нужен конструктор по умолчанию?

07.11.2013, 20:13. Показов 2607. Ответов 1
Метки нет (Все метки)

неоюходимо написать класс для работы с полиномами в нете нашел что-то поожее может кто-нибудь объяснить для чего нужен конструктор по умолчанию и для чего нужна метод givememory?
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
#include <iostream>
#include "conio.h"
#include <algorithm>
#include "math.h"
class Polynom {
int n;
double *koef;
public:
Polynom(); //конструкторы
Polynom(int k);
Polynom(int k,double *mas);
Polynom(const Polynom&ob); //конструктор копирования
~Polynom(){delete[]koef;}
void GiveMemory(int k);
void SetPolynom(int k,double *mas);
void SetDegree(int k){n=k;}; //установить степень
void CalculateValue(double x); //вычислить значение
int GetDegree(){return n;}; //получить степень
double GetOneCoefficient(int i){return(koef[i]);};
Polynom operator+(Polynom ob); //перегрузка операторов
Polynom operator*(Polynom ob);
double& operator[](int i){return(koef[i]);}//перегрузка []
Polynom& operator= (const Polynom p) {
if(&p==this) return *this;
if(koef) delete [] koef;
n=p.n;
koef=new double [p.n+1];
for(int i=0;i<=p.n;i++)
koef[i]=p.koef[i];
return *this;
}
friend std::ostream& operator<<(std::ostream& mystream,Polynom &ob);
friend std::istream& operator>>(std::istream& mystream,Polynom &ob);
int min(int n,int m)
{return (n<m)? n:m; }
int max(int n,int m)
{return (n>m)? n:m; }
};
//*********** Polynom() **********************************
Polynom::Polynom()
{
n=rand();
koef=new double[n+1];
if(!koef){std::cout<<"Error";getch();return;}
for(int i=n;i>=0;i--)
koef[i]=rand()-5;
}
//************* Polynom(int k) *******************************
Polynom::Polynom(int k)
{ n=k;
koef=new double[n+1];
if(!koef){std::cout<<"Error";getch();return;}
for(int i=n;i>=0;i--)
koef[i]=rand()-5;
}
//****************** Polynom(int k,double mas[]) ******************
Polynom::Polynom(int k,double mas[])
{n=k;
koef=new double[n+1];
if(!koef){std::cout<<"Error";getch();return;}
for(int i=n;i>=0;i--)
koef[i]=mas[i];
}
//*************** Polynom(const Polynom&ob) *********************
Polynom::Polynom(const Polynom&ob)
{n=ob.n;
koef=new double[n+1];
if(!koef){std::cout<<"Error";getch();return;}
for(int i=0;i<=n;i++)
koef[i]=ob.koef[i];
}
//**************** void GiveMemory(int k) **********************
void Polynom::GiveMemory(int k)
{
if(koef) delete [] koef;
koef=new double[k+1];
if(!koef){std::cout<<"Error";getch();return;}
}
//******************** SetPolynom **************************
void Polynom::SetPolynom(int k,double *mas)
{ n=k;
if(koef) delete [] koef;
koef = new double [n+1];
for(int i=n;i>=0;i--)
koef[i]=mas[i];
}
//*************** CalculateValue *****************************
void Polynom::CalculateValue(double x=1.0)
{ double s;
int i;
for(s=koef[0],i=1;i<=n;i++)
s=s+koef[i]*pow(x,i);
std::cout<<"f("<<x<<")="; std::cout<<s<<std::endl;
}
//**************** Polynom operator+(Polynom ob) ***************
Polynom Polynom::operator+(Polynom ob)
{ int i;
Polynom rab;
rab.GiveMemory(max(n,ob.GetDegree() ));
for(i=0;i<=min(n,ob.GetDegree());i++)
rab.koef[i]=koef[i]+ob.GetOneCoefficient(i);
if(n<ob.GetDegree())
{
for(i=min(n,ob.GetDegree())+1;i<=ob .GetDegree();i++)
rab.koef[i]=ob.GetOneCoefficient(i);
rab.n=ob.GetDegree();
}
else
{
for(i=min(n,ob.GetDegree())+1;i<=n; i++) rab.koef[i]=koef[i];
rab.n=n;
}
return rab;
}
//*************** Polynom operator*(Polynom ob) ***************
Polynom Polynom::operator*(Polynom ob)
{
int i,j,k;
double s;
Polynom rab;
rab.GiveMemory(n+ob.GetDegree());
for(i=0;i<=n+ob.GetDegree();i++)
{ s=0;
for(j=0;j<=n;j++)
for(k=0;k<=ob.GetDegree();k++)
if(j+k==i)s=s+koef[j]*ob.GetOneCoefficient(k);
rab.koef[i]=s;
}
rab.n=n+ob.GetDegree();
return rab;
}
//********** ostream& operator<<(ostream& mystream,Polynom &ob) ******
std::ostream& operator<<(std::ostream& mystream,Polynom &ob)
{ char c=' '; //пропустим “+” перед первым коэффициентом
for(int i=ob.n;i>=0;i--)
{ double ai=ob.koef[i];
if(ai==0) continue;
else {if(ai>0) mystream<<c; mystream<<ai;}
if(i==0) continue; else mystream<<"x";
if(i==1) continue; else mystream<<"^"<<i;
if(ai!=0)c='+';
}
if(c==' ')mystream<<0;
mystream<<std::endl;
return mystream;
}
//********* istream& operator>>(istream& mystream,Polynom &ob) *
std::istream& operator>>(std::istream& mystream,Polynom &ob)
{
int i;
std::cout<<"Enter Degree:"; mystream>>ob.n; std::cout<<std::endl;
for(i=ob.n;i>=0;i--)
{
std::cout<<"Enter koeff "<<i<<":"; mystream>>ob.koef[i];
}
return mystream;
}
 
//******************** MAIN ****************************
using namespace std;
int main(int argc, char* argv[])
{ 
    const int m=3;
Polynom f,g,masp[m],*p1,s;
int n=5,i;
double K[6]={1.0,3.2,0.0,4.1,0.0,1.1};
p1=new Polynom(n,K);
cout<<*p1;
p1->CalculateValue(2.0);
cin>>f;
cout<<" f(x)= "; cout<<f;
cout<<" g(x)= "; cout<<g;
s=f+g;
cout<<"f(x)+g(x) = "; cout<<s;
s=f*g;
cout<<" f(x)*g(x) = "; cout<<s;
s=masp[0]; cout<<masp[0];
for(i=1;i<m;i++)
{ s=s+masp[i]; cout<<masp[i];}
cout<<"Summa: "; cout<< s;
delete p1;
return 0;
}
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
07.11.2013, 20:13
Ответы с готовыми решениями:

Создать класс "Вектор" и реализовать конструктор по умолчанию, конструктор копирования и деструктор
Всем доброго времени суток! нужна ваша помощь! нужно создать класс вектор и реализовать...

Описать класс "полином"
описать класс полином(ввод,вывод,вычислить значение в точке)(с++)

Описать класс "Точка", реализовать в классе конструктор по умолчанию
Пожалуйста помогите нужно Создать класс Tochka. Реализовать в классе конструктор по умолчанию(без...

Создать класс "Двухмерная точка". Реализовать в классе конструктор по умолчанию
Помогите с решением;) Создать класс «Двухмерная точка». Реализовать в классе конструктор по...

1
zzzZZZ...
527 / 358 / 94
Регистрация: 11.09.2013
Сообщений: 2,041
07.11.2013, 20:36 2
ну перегруженный констурктор нужен для инициализации полинома, там n - это кол-во его параметро, в случае () он задается рандомно, ну и соответственно при заданном n полином имеет определённую размерность, а массивом его явно инициализируют.

а giveMemory походу освобождает память под новый полином, но вот if (koef) этого я не понимаю))


Напиши свой класс, лучше, это и понимания прибавит вам и разбираться в собственном коде всё-таки проще
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
07.11.2013, 20:36
Помогаю со студенческими работами здесь

Описать класс "поезд", содержащий поля "пункт назначения", "номер поезда", "время отправления"
Помогите пожалуйста с классом Описать класс «поезд», содержащий следующие закрытые поля:...

Описать класс "Цветная точка". Чего не хватает в программе?
Задание: Описать класс «цветная точка». Для точки задаются координаты и цвет. Цвет описывается с...

Описать класс "Контейнер" как объект, предназначенный для транспортировки классов "Строительных блоков"
1. Опишите класс &quot;Строительный блок&quot;, описывающий габариты и массу блока прямоугольной формы....

Для класса "Quadrangle" не существует конструктор по умолчанию
Добрый вечер, студия выдает ошибку, не могу разобраться в чем именно заключается проблема, понимаю...


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

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

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