C ++ полиномиальный класс

Назначение:
В этом домашнем задании вы собираетесь разработать класс C ++ для описания и управления
многочлены.

завершить объявление класса в заголовке и затем реализовать (в соответствующем файле .cpp)
функции, которые объявлены в заголовочном файле и проверяют их, чтобы убедиться, что они работают так, как объявлено.

Поставляемая программа тестирования очень проста. Вы должны будете изменить его и добавить несколько (2 или более)
тесты, чтобы убедиться, что все аспекты нового класса выполняются.

Пример результатов из TestThePoly.cpp:

(1) Testing cout << A: empty
(2) Testing cin >> A':
Enter the polynomial (integer degree then double coefficients):
3 -1 2.09 -5.3 -0.98
(3) Second look at A: -1x^(3) +2.09x^(2) -5.3x^(1) -0.98
(4) Testing Polynomial B(A): -1x^(3) +2.09x^(2) -5.3x^(1) -0.98
(5) Testing Polynomial C(2, clist)': +1x^(2) +4.5x^(1) +8
(6) Testing D = C: +1x^(2) +4.5x^(1) +8
(7) Testing A == B : TRUE
(8) Testing A == D : FALSE

Я пытался выполнить это задание много раз, но не понял этого. Я искал в Интернете что-то, что мог бы мне помочь, но ничего не нашел. Кажется, что большинство других полиномиальных задач класса включают умножение и тому подобное, и, по крайней мере, немного сложнее, чем это. Или они в некотором смысле проще / делают это не так, как я.

Вот заголовок файла

// Polynomial.h

#ifndef POLYNOMIAL_H
#define POLYNOMIAL_H

#include <iostream>
using std::ostream;
using std::istream;class Polynomial
{

public:
Polynomial();
Polynomial( int dgr, const double* clist );
Polynomial( const Polynomial& );
~Polynomial();

int setDegree(int dgr);
int getDegree() const;

const Polynomial& operator=( const Polynomial& clist);
bool operator==( const Polynomial& clist) const;void printPolynomial( int dgr, const double* clist );double operator[]( int index ) const;
double& operator[]( int index );

private:
int    degree;
double *coefficients; // list of coefficients};

ostream& operator<<( ostream& , const Polynomial& );
istream& operator>>( istream& , Polynomial& );

#endif

Вот исходный файл

// Polynomial.cpp#include <iostream>
using std::istream;
using std::ostream;

using std::cerr;
using std::endl;

#include <cstdlib>
using std::exit;

#include "Polynomial.h"

Polynomial::Polynomial()
{
degree        = 0;
coefficients = 0;

}Polynomial::Polynomial(int dgr, const double* clist)
{
getDegree();

}

int Polynomial::getDegree() const
{
return degree;
}

Polynomial:: ~Polynomial()
{
setDegree(0);
}

int Polynomial::setDegree(int dgr)
{

if( dgr <0 ) {
cerr << "Error:  attempted to set a negative degree" << endl;
exit(1);
} else {
if( coefficients!=0 ) {
delete [] coefficients;
coefficients = 0;
degree       = 0;
}
if( dgr !=0 ) {
coefficients = new double [dgr];
if( coefficients==0 ) {
degree =0;
cerr << "Warning:  unable to allocate enough space for list" << endl;
exit(2); // this surely is reasonable.
} else {
degree=dgr;
}
}
}
return dgr;}

//copy constructor
Polynomial::Polynomial(const Polynomial& clist) : degree(0), coefficients(0)
{
if( clist.getDegree()<=0 ) {
setDegree(0);
} else {
setDegree(clist.getDegree());
for (int i=0; i< degree ; i++) {
coefficients[i]=clist.coefficients[i];
}
}
}const Polynomial& Polynomial :: operator=(const Polynomial& clist)
{
if ( &clist==this )
{
cerr << "Warning:  attempt to copy Polynomial onto self" << endl;
}
else {
if( clist.getDegree()<=0 ) {
setDegree(0);
} else {
setDegree(clist.getDegree());
for (int i=0; i< degree ; i++) {
coefficients[i] = clist.coefficients[i];
}
}
}
return *this;
}

bool  Polynomial::operator==(const Polynomial& clist) const
{
bool result=true;
if( degree!=clist.getDegree() ) {
result=false;
} else {
for(int i=0; i< degree && result == true; i++) {
result = coefficients[i]==clist.coefficients[i];
}
}
return result;
}double Polynomial::operator[]( int index ) const
{
if( index<0 || index>= degree ) {
cerr << "Attempt to access element outside index bounds"<< endl;
exit(3); // Maybe not reasonable.
} else {
return coefficients[index];
}
}double& Polynomial::operator[]( int index )
{
if( index < 0 || index>= degree  ) {
cerr << "Attempt to access element outside index bounds"<< endl;
exit(4);
} else {
return coefficients[index];
}
}ostream& operator<<( ostream& left, const Polynomial& right)
{
if( right.getDegree() > 0 ) {
left << endl;
for (int i=0; i< right.getDegree(); i++ ) {
for (int j = 0; j >= 0 ; j -- ){left << right[i] << "X^(" << j << ") " ;
if (j > 0)
{
left << " + ";
}

}
}
}
else {
cerr << "Warning:  Attempt to display empty List" << endl;
}return left;
}istream& operator>>( istream& left, Polynomial& right)
{
int tmp;
left >> tmp;
if( tmp<=0 ) {
cerr << "First value expected to be list size, > 0." << endl;
} else {
if( tmp!=right.getDegree() ) {
right.setDegree(tmp);
}
for (int i=0; i<right.getDegree(); i++) {
left >> right[i];
}
}
return left;
}

Вот тестирование / основной файл

// Prog11.cpp

#include <iostream>
using std::cout;
using std::endl;
using std::cin;

#include "Polynomial.h"

int main()
{
Polynomial A;
cout << "(1) Testing `cout << A':  " << A << endl;

cout << "(2) Testing `cin >> A':\n";
cout << "Enter the polynomial (integer order then double    coefficients):\n\t ";
cin >> A;
cout << endl;
cout << "(3) Second look at A:  " << A << endl;

Polynomial B(A);
cout << "(4) Testing `Polynomial B(A)':  " << B << endl;

double clist[]={8, 4.5, 1};
Polynomial C(2, clist);
cout << "(5) Testing `Polynomial C(2, clist)':  " << C << endl;

Polynomial D=C;
cout << "(6) Testing D = C):  " << D << endl;

cout << "(7) Testing A == B :  " << (A==B ? "TRUE" : "FALSE") << endl;
cout << "(8) Testing A == D :  " << (A==D ? "TRUE" : "FALSE")<< endl;

return 0;
}

0

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]