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

Класс "Полином с действительными коэффициентами" - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Сортировка строк массива http://www.cyberforum.ru/cpp-beginners/thread1303576.html
Задание:отсортировать по не возрастанию предпоследнюю строку массива. Массив 5*6. Вывести массив после обработки. Я представляю как это делать, но из-за того, что я только начала изучать язык С++, у меня не получается записать все свои идеи по поводу этого задания. Поэтому прошу указать мне на мои ошибки и объяснить. #include <cstdlib> #include <iostream> using namespace std; void main()...
C++ Шаблонный класс. Ошибка : aggregate 'Box<info*> ob' has incomplete type and cannot be defined Здравствуйте! Снова возникла небольшая проблема. Создал шаблонный класс: box.h #ifndef BOX_H #define BOX_H //#include "info.h" #include <iostream> #include <cstring> http://www.cyberforum.ru/cpp-beginners/thread1303566.html
C++ Посчитать количество нулевых элементов в массиве, вывести их индексы
делаю лабу, наполовину завершил, но наткнулся на эту задачу, хэлп.. Написать программу определения количества и номера индексов нулевых элементов массива вещественных чисел. Вывести на экран найденное количество, а также все найденные номера индексов. Заранее Thank's!
Функции друзья в отдельном файле C++
Здравствуйте уважаемые программисты ! У меня вопрос. При разбивке проекта, класс поместил в заголовочный файл, а как быть с его функциями друзьями ?) Тоже к нему в хэдер добавить ? Ведь прототип функции-друга находится внутри класса, и новый прототип за пределами класса с ключевым словом friend, создать не получится.
C++ Преобразовать в рекурсивную функцию http://www.cyberforum.ru/cpp-beginners/thread1303546.html
Помогите преобразовать следующий код так, чтобы вычисление функции происходило с помощью рекурсии... #include <cstdlib> #include <iostream> #include <math.h> using namespace std;
C++ Объединение чисел в пары Нужна небольшая помощь. Задание звучит так: Даны n пар положительных чисел: (a1,b1),(a2,b2),...,(An,Bn). Определить: а)в какой паре среднее арифметическое значений чисел является максимальным. Если пар с макс. значением среднего арифметического несколько, найти номер последней из них; б)в какой паре среднее геометрическое значений чисел является максимальным. Если таких пар несколько, найти... подробнее

Показать сообщение отдельно
zss
Модератор
Эксперт С++
 Аватар для zss
5946 / 5551 / 1784
Регистрация: 18.12.2011
Сообщений: 14,178
Завершенные тесты: 1
09.03.2015, 13:46     Класс "Полином с действительными коэффициентами"
В отношении списка.
Вместо
C++
1
2
int n;
double *koef;
используйте
C++
1
list<double> koef;
Тогда циклы будут выглядеть так
C++
1
2
3
4
for(list<double> p=koef.begin(),p!=koef.end();++p)
{
    (*p)=....
}
Получившийся итог
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
#include <iostream>
#include <list>
#include <cmath>
using namespace std;
class Polynom 
{
private:
    list<double> koef;
public:
    Polynom(){} //конструкторы
    Polynom(int k);
    Polynom(int k,double *mas);
    Polynom(const Polynom&ob); //конструктор копирования
    //void GiveMemory(int k);
    void SetPolynom(int k,double *mas);
    //void SetDegree(int k){n=k;}; //установить степень
    double CalculateValue(double x); //вычислить значение
    int GetDegree(){return koef.size()-1;}; //получить степень
    const double GetOneCoefficient(int i) const;
    Polynom operator*(Polynom ob);
    double& operator[](int i);//перегрузка []
    Polynom& operator= (const Polynom p) 
    {
        this->koef=p.koef;
        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; }
//------------------------------------------------
double& Polynom ::operator[](int i)//перегрузка []
{
    list<double>::iterator p=koef.begin();
    for( ; p!=koef.end() && i>0 ; ++p)
        --i;
    if(p==koef.end())
        throw ("index out of range.");
    return(*p);
}//------------------------------------------------
const double Polynom::GetOneCoefficient(int i) const
{
    list<double>::const_iterator p=koef.begin();
    for( ; p!=koef.end() && i>0 ; ++p)
        --i;
    if(p==koef.end())
        throw ("index out of range.");
    return(*p);
}
//************* Polynom(int k) *******************************
Polynom::Polynom(int k)
{ 
    for(int i=0;i<k;i++)
        koef.push_back((double)rand()/RAND_MAX-0.5);
}
//****************** Polynom(int k,double mas[]) ******************
Polynom::Polynom(int k,double mas[])
{
    for(int i=0;i<k;i++)
        koef.push_back(mas[i]);
}
//*************** Polynom(const Polynom&ob) *********************
Polynom::Polynom(const Polynom&ob)
{
    this->koef=ob.koef;
}
//**************** void GiveMemory(int k) **********************
//void Polynom::GiveMemory(int k)
//{
//  // empty
//}
//******************** SetPolynom **************************
void Polynom::SetPolynom(int k,double *mas)
{ 
    for(int i=0;i<k;i++)
        koef.push_back(mas[i]);
 
}
//*************** CalculateValue *****************************
double Polynom::CalculateValue(double x=1.0)
{ 
    list<double>::iterator p=koef.begin();
    double s=(*(p++));
    double px=x;
    for( ; p!=koef.end()  ; ++p)
    {
        s+=(*p)*px;
        px*=x;
    }
    return s;
}
//*************** Polynom operator*(Polynom ob) ***************
Polynom Polynom::operator*(Polynom ob)
{
    double s;
    Polynom rab;
    int n=GetDegree()+1;
    list<double>::iterator pj=koef.begin();
    list<double>::iterator pk=koef.begin();
    for(int i=0;i<=n+ob.GetDegree();i++)
    { 
        s=0;
        int j,k;
        for(pj=koef.begin(),j=0;pj!=koef.end();++pj,j++)
            for(pk=ob.koef.begin(),k=0;pk!=ob.koef.end();++pk,k++)
                if(j+k==i)
                    s+=(*pj)*(*pk);
        rab.koef.push_back(s);
    }
    return rab;
}
//********** ostream& operator<<(ostream& mystream,Polynom &ob) ******
std::ostream& operator<<(std::ostream& mystream,Polynom &ob)
{ 
    char c='+';
    list<double>::iterator p=ob.koef.begin();
    int i=0;
    for( ; p!=ob.koef.end(); ++p)
    { 
        double ai=*p;
        if(ai==0) 
            continue;
        else 
        {
            if(ai>0 && i>0) 
                mystream<<c; 
            mystream<<ai;
        }
        if(i!=0)
        {
            mystream<<"x";
            if(i>1)
                mystream<<"^"<<i;
        }
        ++i;
    }
    if(i==0)
        mystream<<"0";
    mystream<<std::endl;
    return mystream;
}
//********* istream& operator>>(istream& mystream,Polynom &ob) *
std::istream& operator>>(std::istream& mystream,Polynom &ob)
{
    int i,n;
    cout<<"Enter Degree:"; 
    mystream>>n;
    ob.koef.clear();
    for(i=0;i<=n;i++)
    {
        cout<<"Enter koeff "<<i<<":"; 
        double t;
        mystream>>t;
        ob.koef.push_back(t);
    }
    return mystream;
}
 
//******************** MAIN ****************************
int main()
{ 
    double K[3]={1.0,2.0,3.0};
    Polynom f(3,K);
    cout<<" f(x)= "<<f;
    cout<<"f(2)="<<f.CalculateValue(2.0)<<endl;
    Polynom g;cin>>g;
    cout<<" g(x)= "<<g;
    Polynom s=f*g;
    cout<<" f(x)*g(x) = "; cout<<s;
    system("pause");
    return 0;
}
 
Текущее время: 01:14. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru