📄 polynomial.cpp
字号:
#include "Polynomial.h"
#include <iostream>
using namespace std;
void Polynomial::mult_term(Polynomial p, Term t)
{
clear();
while (!p.empty())
{
Term pterm;
p.serve_and_retrieve(pterm);
Term answer_term(pterm.degree + t.degree,
t.coefficient * pterm.coefficient);
append(answer_term);
}
}
int Polynomial::degree() const
/*
Post: If the Polynomial is identically 0, a result of -1 is returned.
Otherwise the degree of the Polynomial is returned.
*/
{
if (empty()) return -1;
Term lead;
retrieve(lead);
return lead.degree;
}
void Polynomial::print() const
/*
Post: The Polynomial is printed to cout.
*/
{
Node *print_node = front;
bool first_term = true;
while (print_node != NULL)
{
Term &print_term = print_node->entry;
if (first_term)
{ // In this case, suppress printing an initial '+'.
first_term = false;
if (print_term.coefficient < 0) cout << "- ";
}
else if (print_term.coefficient < 0) cout << " - ";
else cout << " + ";
double r = (print_term.coefficient >= 0)
? print_term.coefficient : -(print_term.coefficient);
if (r != 1) cout << r;
if (print_term.degree > 1) cout << " X^" << print_term.degree;
if (print_term.degree == 1) cout << " X";
if (r == 1 && print_term.degree == 0) cout << " 1";
print_node = print_node->next;
}
if (first_term)
cout << "0"; // Print 0 for an empty Polynomial.
cout << endl;
}
void Polynomial::read()
/*
Post: The Polynomial is read from cin.
*/
{
clear();
double coefficient;
int last_exponent, exponent;
bool first_term = true;
cout << "Enter the coefficients and exponents for the polynomial, "
<< "one pair per line. Exponents must be in descending order."
<< endl
<< "Enter a coefficient of 0 or an exponent of 0 to terminate."
<< endl;
do
{
cout << "coefficient? " << flush;
cin >> coefficient;
if (coefficient != 0.0)
{
cout << "exponent? " << flush;
cin >> exponent;
if ((!first_term && exponent >= last_exponent) || exponent < 0)
{
exponent = 0;
cout << "Bad exponent: Polynomial ends without its last term."
<< endl;
}
else
{
Term new_term(exponent, coefficient);
append(new_term);
first_term = false;
}
last_exponent = exponent;
}
} while (coefficient != 0.0 && exponent != 0);
}
void Polynomial::equals_sum(Polynomial p, Polynomial q)
/*
Post: The Polynomial object
is reset as the sum of the two parameters.
*/
{
clear();
while (!p.empty() || !q.empty())
{
Term p_term, q_term;
if (p.degree() > q.degree())
{
p.serve_and_retrieve(p_term);
append(p_term);
}
else if (q.degree() > p.degree())
{
q.serve_and_retrieve(q_term);
append(q_term);
}
else
{
p.serve_and_retrieve(p_term);
q.serve_and_retrieve(q_term);
if (p_term.coefficient + q_term.coefficient != 0)
{
Term answer_term(p_term.degree,
p_term.coefficient + q_term.coefficient);
append(answer_term);
}
}
}
}
void Polynomial::equals_difference(Polynomial p, Polynomial q)
{
clear();
Term p_term, q_term;
while (!p.empty() || !q.empty())
{
if (p.degree() > q.degree())
{
p.serve_and_retrieve(p_term);
append(p_term);
}
else if (q.degree() > p.degree())
{
q.serve_and_retrieve(q_term);
q_term.coefficient = -q_term.coefficient;
append(q_term);
}
else
{
p.serve_and_retrieve(p_term);
q.serve_and_retrieve(q_term);
if (p_term.coefficient - q_term.coefficient != 0)
{
Term answer_term(p_term.degree,
p_term.coefficient - q_term.coefficient);
append(answer_term);
}
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -