Назначение:
В этом домашнем задании вы собираетесь разработать класс 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;
}
Задача ещё не решена.
Других решений пока нет …