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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Irisha3581
0 / 0 / 0
Регистрация: 03.12.2012
Сообщений: 10
#1

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

12.12.2013, 22:04. Просмотров 253. Ответов 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 с комментом // здесь проблема.
что я делаю не так? как мне решить проблему?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
12.12.2013, 22:04     Не могу разобраться в чем ошибка
Посмотрите здесь:

Не могу разобраться в чем суть ошибки - C++
Даны действительные числа x, y. Если они отрицательны, то каждое значение заменить модулем; если отрицательно только одно из них, то оба...

Помогите разобраться в чем ошибка. - C++
Есть 2 задачи, первая: Удалить элементы, значение которых меньше среднего значения всех элементов массива. #include &lt;iostream.h&gt;...

помогите разобраться с библиотекой и в чем ошибка? - C++
Это метод Якоби #include &quot;stdafx.h&quot; #include &lt;math.h&gt; #include &quot;nrutil.h&quot; /* Здесь определяются некоторые утилиты типа...

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

помгите разобраться в чем ошибка? (найти все натуральные числа в диапазоне между m и n (m<n)) - C++
Вот мое задание:найти все натуральные числа в диапазоне между m и n (m&lt;n), в записи которых нет двух одинаковых цифр. Подсчитать...

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

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

Не могу понять в чем ошибка - C++
Дано задание: &quot;Имеется текстовый файл. Игнорируя исходное деление этого файла на строки, переформатировать его, разбивая на строки так,...

Не могу понять в чем ошибка - C++
Мне нужно сделать менюшку, в которую я записываю данный в бинарный файл, но после ввода имени, у меня выдает 2 cout'a и не могу ввести...

Не могу понять в чем ошибка?! - C++
Задание: -Визначити кількість вузлів дерева, в яких є два нащадки. -функция добавления елемента -функцию удаления елемента -функцію...


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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Irisha3581
0 / 0 / 0
Регистрация: 03.12.2012
Сообщений: 10
14.12.2013, 20:19  [ТС]     Не могу разобраться в чем ошибка #2
помогите пожалуйста!!!
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru