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

Унаследовать класс

09.12.2016, 21:39. Показов 298. Ответов 0
Метки нет (Все метки)

Здравствуйте!На ООП задали придумать как унаследовать написаный ранее класс полиномов, ну и унаследовать.
Вот базовый класс:
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
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
#ifndef POLYNOM_H
#define POLYNOM_H
#include <math.h>
#include <iostream>
using namespace std;
class Polynom
{
    protected:
    unsigned int deg; //степень полинома
    int *koef_u;
    int *koef_v; //указатели на массив коэффициентов полинома
                  //koef[i] - коэффициент при i-й степени,
                  //koef[0] - коэффициент при нулевой степени
 
public:
    Polynom(); //конструктор без параметров
    Polynom(unsigned int, int*,int*); //конструктор с параметрами
    Polynom(const Polynom &); //копирующий контсруктор
    ~Polynom(); //деструктор
    Polynom operator + (const Polynom &);   //оператор сложения двух полиномов
    Polynom operator = (const Polynom &);   //оператор присвоения
    Polynom operator - (const Polynom &);   //оператоп отнимания от одного многочлена другого
    Polynom operator * (const Polynom &);   //оператор умножения двух полиномов
  //оператор вывода полинома
    friend ostream& operator << (ostream& ,Polynom&);
    friend Polynom operator == (const Polynom &,const Polynom &);   //оператор сравнения двух полиномов
       //оператор присваивания
    void InputPolynom();    //функция ввода полинома
    void OutputPolynom();   //функция вывода полинома
    void Tochcka();
    void Skoro();
    void Pohidna();
}
Polynom Polynom::operator = (const Polynom &t)
{
    deg=t.deg;
    delete[] koef_u;
    delete[] koef_v;
    koef_u=new int[deg+1];
    koef_v=new int[deg+1];
    for(int i=0;i<=deg;i++)
    {
        koef_u[i]=t.koef_u[i];
        koef_v[i]=t.koef_v[i];
    }
    return *this;
}
Polynom operator == (const Polynom &t, const Polynom &d)
{
if (t.deg == d.deg)
{
 
cout <<"degree polynomials are equal"<<endl;
}
if (t.deg < d.deg)
{
cout<<"second polynom bigger "<<endl;
}
if (t.deg > d.deg)
{
cout<<"first polynom bigger"<<endl;
}
}
Polynom Polynom::operator + (const Polynom &t)
{
 
    int i;
    Polynom *result;
    if(deg>=t.deg)
        { //если степень первого полинома больше степени второго
        result=new Polynom(deg,koef_u,koef_v);
        for(i=0;i<=t.deg;i++)
        {
            result->koef_u[i]=(koef_u[i]*t.koef_v[i])+(koef_v[i]*t.koef_u[i]) ;
            result->koef_v[i]=t.koef_v[i]*koef_v[i];
        }
    }
    else
        {                   //если степень второго полинома больше степень первого
        result=new Polynom(t.deg,t.koef_u,t.koef_v);
        for(i=0;i<=deg;i++)
        {
             result->koef_u[i]=(koef_u[i]*koef_v[i])+(koef_v[i]*koef_u[i]);
             result->koef_v[i]=koef_v[i]*koef_v[i];
        }
    }
    return *result;
}
Polynom Polynom::operator *(const Polynom &t)
{
   Polynom temp;
        temp.deg=deg+t.deg;
        temp.koef_u=new int[temp.deg+1];
        temp.koef_v=new int[temp.deg+1];
        memset(temp.koef_u, 0, (temp.deg+1)*sizeof(float));
        memset(temp.koef_v, 0, (temp.deg+1)*sizeof(float));
        for(int i=0;i<=deg;i++)
        {
            for(int j=0;j<=t.deg;j++)
                {
                    temp.koef_u[i+j] +=koef_u[i]*t.koef_u[j];
                    temp.koef_v[i+j] +=koef_v[i]*t.koef_v[j];
                }
        }
        return temp;
}
Polynom Polynom::operator -(const Polynom &t)
{
int i;
    Polynom *result;
    if(deg>=t.deg)
        { //если степень первого полинома больше степени второго
        result=new Polynom(deg,koef_u,koef_v);
        for(i=0;i<=t.deg;i++)
        {
            result->koef_u[i]=(koef_u[i]*t.koef_v[i])-(koef_v[i]*t.koef_u[i]) ;
            result->koef_v[i]=t.koef_v[i]*koef_v[i];
        }
    }
    else
        {                   //если степень второго полинома больше степень первого
        result=new Polynom(t.deg,t.koef_u,t.koef_v);
        for(i=0;i<=deg;i++)
        {
             result->koef_u[i]=(koef_u[i]*t.koef_v[i])-(koef_v[i]*t.koef_u[i]);
             result->koef_v[i]=koef_v[i]*koef_v[i];
        }
    }
    return *result;
}
 
Polynom::~Polynom()
{
    delete[] koef_u;
    delete[] koef_v;
}
Polynom::Polynom()
{
    deg=0;
    koef_u=new int[deg+1];
    koef_v=new int[deg+1];
    koef_u[0]=0.0;
    koef_v[0]=0.0;
}
Polynom::Polynom(unsigned int new_deg, int *new_koef_u, int *new_koef_v)
{
    deg=0;
    for(int i=0;i<=new_deg;i++)
        if(new_koef_u[i]!=0 && new_koef_v[i]!=0)
            deg=i;   //инициализация переменной степени
    koef_u=new int[deg+1];
    koef_v=new int[deg+1];
    for(int i=0;i<=deg;i++)
    {
        koef_u[i]=new_koef_u[i]; //инициализация массива коэффициентов
        koef_v[i]=new_koef_v[i];
    }
}
Polynom::Polynom(const Polynom &f)
{
    deg=f.deg;
    koef_u=new int[deg+1];
    koef_v=new int[deg+1];
    for(int i=0;i<=deg;i++)
    {
        koef_u[i]=f.koef_u[i];
        koef_v[i]=f.koef_v[i];
    }
}
 
void Polynom::Tochcka()
{
int x;
float rez = 0;
cout<<"\nEnter point:";
cin>>x;
int p = 1;
if(deg==1)
{
for(int i = 0;i<deg;i++)
{
 rez = (x*((float)koef_u[1]/(float)koef_v[1]))+((float)koef_u[0]/(float)koef_v[0]);
}
}
else
for(int i = 1;i<=deg;i++)
{
p *= x;
rez += p*((float)koef_u[i]/(float)koef_v[i]);
 
}
cout<<"Polynom in the point ="<<rez+(float)koef_u[0]/(float)koef_v[0]<<endl;
}
void Polynom::Skoro()
{
Polynom *r;
r=new Polynom(deg,koef_u,koef_v);
for(int i = 0;i <= deg;i++)
if (koef_u[i] == koef_v[i])
{
r->koef_u[i] =koef_u[i]/koef_v[i];
r->koef_v[i] =koef_v[i]/koef_v[i];
}
for(int i = 0;i <= deg;i++)
{
if (!((int)koef_u[i]%(int)koef_v[i]))
{
r->koef_u[i]=koef_u[i]/koef_v[i];
r->koef_v[i]=koef_v[i]/koef_v[i];
}
}
for(int i = 0;i <= deg;i++)
{
if (!((int)koef_v[i]%(int)koef_u[i]))
{
r->koef_u[i]=koef_u[i]/koef_u[i];
r->koef_v[i]=koef_v[i]/koef_u[i];
}
}
cout<<*r;
}
void Polynom::InputPolynom()
{
    cout << "Enter deg of polynom: ";
    cin >> deg;
    delete[] koef_u;
    delete[] koef_v;
    koef_u=new int[deg+1];
    koef_v=new int[deg+1];
    for(int i=0;i<deg;i++){
        cout << "K" << i << " = ";
        cin >> koef_u[i];
        cin >> koef_v[i];
    }
    do{
        cout << "K" << deg << " = ";
        cin >> koef_u[deg];
        cin >> koef_v[deg];
        if(koef_v[deg]==0)
            cout << "K" << deg << " NOT A ZERO!!!\n";
    }while(!koef_u[deg] &&!koef_v[deg]);
}
void Polynom::Pohidna()
{
Polynom *p;
p=new Polynom(deg,koef_u,koef_v);
for(int i = 0;i < deg;i++)
{
 
p->koef_u[i] = koef_u[i+1]*(i+1);
p->koef_v[i] = koef_v[i+1];
p->deg = deg-1;
p->koef_u[0] = koef_u[1];
p->koef_v[0] = koef_v[1];
}
cout<<*p;
int x,b,m;
float rez = 0;
cout<<"\nEnter a & b:";
cin>>x>>b;
m = x+b;
int l = 1;
for(int i = 1;i<=deg;i++)
{
int t = deg;
l *= m;
rez += m*((float)koef_u[i]/(float)koef_v[i]);
}
cout<<rez+(float)koef_u[0]/(float)koef_v[0]<<endl;;
}
void Polynom::OutputPolynom()
{
    if(koef_u[deg]==1 && koef_v[deg] == 1)
        cout << "X^" << deg;
    else if(koef_u[deg]==-1 && koef_v[deg]==-1)
        cout << "X^" << deg;
    else
        cout << koef_u[deg] << "/" << koef_v[deg]<< "X^" << deg;
 
    for(int i=deg-1;i>0;i--)
    {
        if(koef_u[i]>0 && koef_v[i]>0)
            {
            if(koef_u[i]==1 &&koef_v[i]==1)
                cout << " + " << "X^" << i;
            else
                cout << " + " << koef_u[i] << "/" << koef_v[i]<< "X^" << i;
        }
        else if(koef_u[i]<0 && koef_v[i]<0)
            if(koef_u[i]==-1 && koef_v[i]==-1)
                cout << " + " << "X^" << i;
            else
                cout << " - " << (-1)*koef_u[i] << "/" <<(-1)*koef_v[i]<< "X^" << i;
    }
 
    if(koef_u[0]>0 && koef_v[0]>0)
        cout << " + " << koef_u[0]<< "/" <<koef_v[0] << "\n";
    else if(koef_u[0]<0 && koef_v[0]<0)
        cout << " + " << (-1)*koef_u[0]<< "/" <<(-1)*koef_v[0]<< "\n";
}
 ostream &operator<<(ostream &os, Polynom &t)
{
     if(t.koef_u[t.deg]==1 && t.koef_v[t.deg] == 1)
        os<< "X^" << t.deg;
    else if(t.koef_u[t.deg]==-1 && t.koef_v[t.deg]==-1)
        os<< "X^" << t.deg;
    else
        os<< t.koef_u[t.deg] << "/" << t.koef_v[t.deg]<< "X^" << t.deg;
 
    for(int i=t.deg-1;i>0;i--)
    {
        if(t.koef_u[i]>0 && t.koef_v[i]>0)
            {
            if(t.koef_u[i]==1 &&t.koef_v[i]==1)
                os<< " + " << "X^" << i;
            else
                os<< " + " << t.koef_u[i] << "/" << t.koef_v[i]<< "X^" << i;
        }
        else if(t.koef_u[i]<0 && t.koef_v[i]<0)
            if(t.koef_u[i]==-1 && t.koef_v[i]==-1)
                os<< " + " << "X^" << i;
            else
                os<< " - " << (-1)*t.koef_u[i] << "/" <<(-1)*t.koef_v[i]<< "X^" << i;
    }
 
    if(t.koef_u[0]>0 && t.koef_v[0]>0)
        os<< " + " << t.koef_u[0]<< "/" <<t.koef_v[0] << "\n";
    else if(t.koef_u[0]<0 && t.koef_v[0]<0)
        os<< " + " << (-1)*t.koef_u[0]<< "/" <<(-1)*t.koef_v[0]<< "\n";
       return os;
}
;
Не удивляйтесь тому что есть и OutputPolynom и перегружен cout, меня заставили.
Вот что я надумал:
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
class AgrPolynom : public Polynom
{
    public:
        AgrPolynom();
        AgrPolynom(const AgrPolynom&);
        AgrPolynom operator /(const AgrPolynom&);
        AgrPolynom(unsigned int,int*,int*);
        void mno();
        void Pervisna();
        void DRAW();
        void GetDeg();
};
grPolynom::AgrPolynom()
{
 
    deg=0;
    koef_u=new int[deg+1];
    koef_v=new int[deg+1];
    koef_u[0]=0.0;
    koef_v[0]=0.0;
}
void AgrPolynom::mno()
{
AgrPolynom *g;
int x;
cout<<"Enter x"<<endl;
cin>>x;
g=new AgrPolynom(deg,koef_u,koef_v);
for(int i = 0;i<=deg;i++)
{
g->koef_u[i]=x*koef_u[i];
g->koef_v[i]=koef_v[i];
}
cout<<*g;
}
void AgrPolynom::GetDeg()
{
cout<<"Degree of polynom is:"<<deg;
}
AgrPolynom::AgrPolynom(unsigned int new_deg, int *new_koef_u, int *new_koef_v)
{
    deg=0;
    for(int i=0;i<=new_deg;i++)
        if(new_koef_u[i]!=0 && new_koef_v[i]!=0)
            deg=i;   //инициализация переменной степени
    koef_u=new int[deg+1];
    koef_v=new int[deg+1];
    for(int i=0;i<=deg;i++)
    {
        koef_u[i]=new_koef_u[i]; //инициализация массива коэффициентов
        koef_v[i]=new_koef_v[i];
    }
}
void AgrPolynom::Pervisna()
{
AgrPolynom *p;
p=new AgrPolynom(deg,koef_u,koef_v);
for(int i = 0;i <= deg;i++)
{
p->koef_u[i+1] = koef_u[i];
p->koef_v[i+1] = koef_v[i]*(i+1);
p->deg = deg + 1;
p->koef_u[0] = 0;
p->koef_v[0] = 0;
}
cout<<*p;
}
void AgrPolynom::DRAW()
{
    int gd = DETECT, gm, x, y, color, angle = 0;
    initgraph(&gd, &gm, "C:\\TC\\BGI");
    int x0=200,y0=400;
    float rx=0,yx=(koef_u[deg-1]*10)/koef_v[deg-1],rx1,yx1;
    // line(x0,y0,x0,0);
    // line(x0,y0,x0+500,y0);
     for(int i=1;i<=100;i++)
        {
            yx1=0;
         for(int j=0;j<deg;j++)
             yx1+=(koef_u[j]/koef_v[j])*pow(i,j);
         line(rx+x0,y0-yx,i*250+x0 ,y0-(yx1*200));
         yx=(yx1*20);
         rx=i*50;
         getch();
        }
 
}
AgrPolynom AgrPolynom ::operator /(const AgrPolynom &t)
{
bool inAlgoritm = true;
AgrPolynom temp,ob_1,ob_2,ob_4;
temp.deg = deg - t.deg;
temp.koef_u = new int[temp.deg+1];
temp.koef_v = new int[temp.deg+1];
memset(temp.koef_u,0,(temp.deg+1)*sizeof(int));
memset(temp.koef_v,0,(temp.deg+1)*sizeof(int));
ob_1.deg = deg;
ob_1.koef_u = new int[deg + 1];
ob_1.koef_v = new int[deg + 1];
for (int i = deg; i >= 0; i--)
        {ob_1.koef_u[i] = koef_u[i];
        ob_1.koef_v[i] = koef_v[i];
        }
    ob_2.deg = t.deg;
    ob_2.koef_u = new int[t.deg + 1];
    ob_2.koef_v = new int[t.deg + 1];
    for (int i = t.deg; i >= 0; i--)
        {ob_2.koef_u[i] = t.koef_u[i];
        ob_2.koef_v[i] = t.koef_v[i];
        }
 
    ob_4.deg = ob_1.deg;
    ob_4.koef_u = new int[ob_1.deg + 1];
    ob_4.koef_v = new int[ob_1.deg + 1];
    double mnojnik;
    int k = 0;
    int i, j;
    while (inAlgoritm)
    {
 
        for (int i = t.deg; i >= 0; i--)
            {ob_4.koef_u[i] = t.koef_u[i];}
 
        if (ob_2.deg < ob_1.deg)
        {
            for (i = ob_1.deg,j = ob_2.deg; i >= 0; i--, j--)
            if (j < 0)
                ob_4.koef_u[i] = 0;
            else
                {ob_4.koef_u[i] = ob_2.koef_u[j];
                    ob_4.koef_u[i] = ob_2.koef_v[j];
                }
        }
        mnojnik = (ob_1.koef_u[ob_1.deg]/ob_1.koef_v[ob_1.deg]) / (ob_4.koef_u[ob_1.deg]/ob_4.koef_v[ob_1.deg]);
        temp.koef_u[temp.deg - k] = mnojnik;
        temp.koef_v[temp.deg - k] = 1;
        k++;
        for (int i = 0; i <= ob_1.deg; i++)
        ob_4.koef_u[i] *= mnojnik;
 
        for (int i = 0; i <= ob_1.deg; i++)
            ob_1.koef_u[i] -= ob_4.koef_u[i];
        ob_1.deg--;
        if (ob_2.deg > ob_1.deg) inAlgoritm = false;
 
    }
    return temp;
Не получается с делением и рисованием.На деление программа просто виснет, а на рисовании рисует правильно только прямую.Был бы очень благодарен за помощь.Заранее спасибо)
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
09.12.2016, 21:39
Ответы с готовыми решениями:

От класса Таблица унаследовать класс Ячейка
Для начала задание: есть классы строка и таблица, обработчик. Класс обработчик позволяет выводить...

Создать класс Машина и унаследовать от него Грузовик
помогите пожалуйста, напишите полный код. Буду очень благодарен! Перепечатывайте задание на...

Создать класс Машина и унаследовать от него Грузовик
Создать класс Машина, содержащий в качестве параметров марку(строка), число цилиндров, мощность....

Наследование классов С++ (не могу правильно унаследовать базовый класс)
Здравствуйте, вот хочу разобраться как правильно унаследовать класс. Задача такова, унаследовать...

0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
09.12.2016, 21:39
Помогаю со студенческими работами здесь

Определить класс «Шахматная фигура» и унаследовать от него классы, соответствующие шахматным фигурам
Здравствуйте. Помогите реализовать алгоритм решения задачи. Определить класс «Шахматная фигура»...

Создать класс "устройство ввода" и унаследовать от него три разных класса
Помогите создать иерархию типов: -Клавишное устройство ввода, имеющие количество клавиш(целое) и...

От класса "Файл" унаследовать класс "Зашифрованный файл"
Помогите с задачей, пожалуйста! Определить объект файл с поддержкой операций создания,...

Унаследовать функцию с переменным числом параметров
Добрый день, форум! Вот такая задачка: Есть базовый класс A с методом void func(void). От этого...


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

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

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