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

Не могу разобраться в чем ошибка

12.12.2013, 22:04. Показов 919. Ответов 1
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Задача:
Составить описание класса многочленов от одной переменной, задаваемых степенью многочлена и массивом коэффициентов. Предусмотреть методы для вычисления значения многочлена для заданного аргумента, операции сложения, вычитания и умножения многочленов с получением нового объекта многочлена, печатать (вывод на экран) описания многочлена. Разработать программу демонстрирующую работу с объектами этого класса.
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
#include "stdafx.h"
//main.cpp
#include <iostream>
using namespace std;
#include <conio.h>
#include "head.h"
 
int _tmain(int argc, _TCHAR* argv[])
{
    int main()
{
    
    usi n = 0;  //степень многочлена
    int menu;   
    do
    {
    cout<<"Vvedite stepen' pervogo mnogochlena (y1): ";
    cin>>n;
    }while(n<1);
    Multinominal MN1 = Multinominal(n); //объявляем объект
    do
    {
        cout<<"Vvedite stepen' vtorogo mnogochlena (y2): ";
        cin>>n;
    }while(n<1);
    Multinominal MN2 = Multinominal(n); //объявляем объект
    Multinominal MN3 = Multinominal();  //объявляем объект с параметрами по умолчанию
    MN1.SetMN(); //задаем параметры первого многочлена
    MN2.SetMN(); //задаем параметры второго многочлена
    do
    {
        system("cls");
        cout<<"1. Summa mnogochlenov"<<endl;
        cout<<"2. Raznost' mnogoclenov"<<endl;
        cout<<"3. Proizvedenie mnogochlenov"<<endl;
        cout<<"4. Vicheslenie znachenija"<<endl;
        cout<<"0. Exit"<<endl;
        cout<<"Vvedite punkt menu: ";
        cin>>menu;
        switch (menu)
        {
        case 1:
            /**********************сложение многочленов*********************/
            system("cls");
            cout<<"mn1: "; MN1.GetMN(); //выводим первый многочлен
            cout<<endl<<"    +"<<endl;
            cout<<"mn2: "; MN2.GetMN(); //выводим второй многочлен
            MN3 = MN1+MN2; //складываем первый многочлен со вторым (работает перегруженная операция присваивания),
            //а также перегруженная операция сложения 
            cout<<endl<<"    ="<<endl;
            cout<<"mn3: "; MN3.GetMN();//выводим третий многочлен
            getch();
            break;
        case 2:
            /********************разность многочленов*********************/
            system("cls");
            cout<<"mn1: "; MN1.GetMN();
            cout<<endl<<"    -"<<endl;
            cout<<"mn2: "; MN2.GetMN();
            MN3 = MN1 - MN2; //вычитаем из первого многочлена второй (работает перегруженная операция присваивания),
            //а также перегруженная операция вычитания
            cout<<endl<<"    ="<<endl;
            cout<<"mn3: "; MN3.GetMN();
            getch();
            break;
        case 3:
            /*********************произведение многочленов*********************/
            system("cls");
            cout<<"mn1: "; MN1.GetMN();
            cout<<endl<<"    *"<<endl;
            cout<<"mn2: "; MN2.GetMN();
            MN3 = MN2 * MN1;//умножаем первый многочлен на второй (работает перегруженная операция присваивания),
            //а также перегруженная операция умножения
            cout<<endl<<"    ="<<endl;
            cout<<"mn3: "; MN3.GetMN();
            getch();
            break;
        case 4:
            double x,value1, value2;
            system("cls");
            cout<<"Vvedite argument: ";
            cin>>x;
            value1 = MN1.value(x); //вычисление значения первого многочлена при х
            value2 = MN2.value(x); //вычисление значения второго многочлена при х
            cout<<"MN1: "<<value1<<endl;
            cout<<"MN2: "<<value2<<endl;
            getch();
            break;
        case 0: return 0;
        }
    }while(menu!=0);
}
return 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
//head.cpp
#include <iostream>
#include <conio.h>
#include "head.h" // здесь проблема
using namespace std;
Multinominal::Multinominal(usi _n, double* _dMN)
{
    this->n = _n+1; // переделываем степень многочлена в кол-во элементов в нем
    this->dMN = new double [n]; //динамически создаем массив
    if (!_dMN)//если указатель на массив не указывает на массив:)
        //то соответственно заполнить его нулями, чтобы не было лишних неудобств
        for (int i = 0; i<n; i++)
            dMN = 0;
    else
        //иначе заполнить его значениями переданного массива
        //причем заполняем задом наперед, для удобства работы с многочленами
        for (int i = n-1; i>=0; i--)
            dMN = _dMN;
}
Multinominal::~Multinominal()
{   
    delete [] this->dMN; // удаляем из памяти наш созданный массив
}
 
void Multinominal:: SetMN (void)
    {
        cout<<"Vvedite znachenija mnogochlena: ";
        //вводим значения многочлена задом наперед для удобства
        for (int i = n-1; i>=0; i--)
            cin>>this->dMN;
    }
void Multinominal:: GetMN (void)
    {
        //выводим наш многочлен, соответственно тоже задом наперед, 
        //так как вводили тоже задом наперед 
        for (int i = n-1; i>=1; i--)
        {
            cout.flags(ios::showpos);
            cout<<dMN<<"*x"<<"^";
            cout.unsetf(cout.flags());
            cout<<i;
        }
        cout.flags(ios::showpos);
        cout<<dMN[0];
        cout.unsetf(cout.flags());
    }
Multinominal& Multinominal::operator =(const Multinominal &MN)
{
    if (&MN == this) //проверка на самокопирование
        return *this;
    delete [] dMN; //уничтожить ранее существовавший массив
    this->n = MN.n; //задаем новому массиву новую размерность
    this->dMN = new double [this->n]; //динамически создаем новый массив
    //заполняем массив значениями копируемого объекта
    for (int i = n-1; i>=0; i--)
        this->dMN = MN.dMN;
    return *this; //возвращаем указатель на данный объект
}
Multinominal Multinominal::operator +(Multinominal& MN)
{   
    usi s,n1; //s - кол-во элементов в меньшем многочлене
              //n1 - кол-во элементов в большем массиве
    double * dmn; //массив элементов
    if (this->n < MN.n) //если кол-во элементов текущего класса больше передаваемого, то
    {
        n1 = MN.n; //n1- кол-во элементов передаваемого объекта
        s = this->n-1; //s - кол-во элементов текущего многочлена - 1
    }
    else //иначе наоборот
    {
        n1 = this->n;
        s = MN.n-1;
    }
    dmn = new double [n1]; //создаем массив временных элементов
    //складываем элементы первого многочлена с элементами второго
    for (int i = 0; i<n1; i++)
    {
        if (i>s)
        {
            dmn = this->n > MN.n ? this->dMN : MN.dMN;
        }
        else
        {
            dmn = this->dMN + MN.dMN;
        }
    }
    return Multinominal(n1-1,dmn);//возвращаем новый объект
}
//все тоже самое, только вместо операции '+' используется операция '-'
Multinominal Multinominal::operator -(Multinominal & MN)
{
    usi s,n1;
    double * dmn;
    if (this->n <= MN.n)
    {
        n1 = MN.n;
        s = this->n-1;
    }
    else
    {
        n1 = this->n;
        s = MN.n-1;
    }
    dmn = new double [n1];
    for (int i = 0; i<n1; i++)
    {
        if (i>s)
        {
            dmn = this->n > MN.n ? this->dMN : MN.dMN;
        }
        else
        {
            dmn = this->dMN - MN.dMN;
        }
    }
    return Multinominal(n1-1,dmn);
}
//все тоже самое, только вместо операций '+' или '-' используется операция '*'
Multinominal Multinominal::operator *(Multinominal & MN)
{
    usi s,n1;
    double * dmn;
    if (this->n < MN.n)
    {
        n1 = MN.n;
        s = this->n-1;
    }
    else
    {
        n1 = this->n;
        s = MN.n-1;
    }
    dmn = new double [n1];
    for (int i = 0; i<n; i++)
    {
        if (i>s)
        {
            dmn = this->n > MN.n ? this->dMN : MN.dMN;
        }
        else
        {
            dmn = this->dMN * MN.dMN;
        }
    }
    return Multinominal(n1-1,dmn);
}
double Multinominal::value (double _x)
{
        double value = 0, x;
        //вычисляем значение многочлена от аргумента х
        for( int i = n-1; i>=1; i-- )
        {
            x = _x;
            //для этого вычисляем степенные значения аргумента х
            for ( int j = i; j>1; j--)
                x *= x;
            value+=(this->dMN)*x;//умножаем его на коэффициент многочлена и прибавляем к основной сумме
        }
        return value+=this->dMN[0]; //прибавляем к основной сумме последний элемент и возвращаем значение
    }
код верный и рабочий, есть ошибка : fatal error C1014: слишком много включаемых файлов: глубина = 1024 с комментом // здесь проблема.
что я делаю не так? как мне решить проблему?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
12.12.2013, 22:04
Ответы с готовыми решениями:

Не могу разобраться в чём ошибка
Массив заполнен с помощью генератора случайных чисел. Разности (1-2,3-4,..,19-20) отсортировать по...

Работа со строкой. Не могу разобраться, в чём ошибка.
Есть такой код: HANDLE Search;//Объявляем хендл WIN32_FIND_DATAA FileSearch;//Создаем структуру...

Не могу разобраться в чём ошибка(инфиксная и постфиксная запись выражения)
на вход для простоты подаю коротенько выражение меньше 10 символов цифры во входе тоже от 0 до 10...

Не могу разобраться в чем ошибка
import math family = input('Здравствуйте, как вас зовут? ') print(family + ', мы рады представить...

1
0 / 0 / 1
Регистрация: 03.12.2012
Сообщений: 10
14.12.2013, 20:19  [ТС] 2
помогите пожалуйста!!!
0
14.12.2013, 20:19
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
14.12.2013, 20:19
Помогаю со студенческими работами здесь

В чем ошибка? не могу разобраться
В чем ошибка? не могу разобраться. Вот задание: Три устройства обрабатывают заявки в течении 690...

Не могу разобраться в чём ошибка
Помогите, пожалуйста, разобраться в чём ошибка procedure TForm1.Button1Click(Sender: TObject);...

Не могу разобраться в чем ошибка
Ребят, посмотрите пожалуйста эту програмку: Не работает 13 строчка, пишет нельзя считывать данные...

Не могу разобраться в чем ошибка кода
Только начала изучать язык С. Преподаватель дала пример лабораторной и я набрала ее, чтобы...


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

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

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