Возможно ли продолжить мой полиномиальный класс? [закрыто]C++

Программы на C++. Форум разработчиков
Anonymous
 Возможно ли продолжить мой полиномиальный класс? [закрыто]

Сообщение Anonymous »

Проблема связана с моим домашним заданием по курсу в колледже. Проблема заключается в классе полиномов с двумя массивами для хранения коэффициентов и показателей каждого члена полинома. В классе Polynomial существуют функции сложения, вычитания и умножения.
Вот исходный код, который дал мне учитель:
#include
using namespace std;

/* UPLOAD START */
class IntPolynomial{
private:
public:
IntPolynomial(){
pair = 0;
coefficient[0] = 0;
power[0] = 0;
}
IntPolynomial(int* c, int* d, int n) {}

~IntPolynomial(){
}
int getDegree() {}
IntPolynomial* Add(IntPolynomial* b) {}
IntPolynomial* Subtract(IntPolynomial* b) {}
IntPolynomial* Multiply(IntPolynomial* b) {}
void printPolynomial() {}
};

/* UPLOAD END */

void test1(){
int p4c[5] = {-3,-5,6,1,0};
int p4d[5] = {1,3,7,9,11};
IntPolynomial p4(p4c,p4d,5);
p4.printPolynomial();
}

void test2(){
int p1c[3] = {3,5,-6};
int p1d[3] = {0,1,4};
IntPolynomial p1(p1c,p1d,3);

int p4c[5] = {-3,-5,6,1,-1};
int p4d[5] = {1,3,7,9,11};
IntPolynomial p4(p4c,p4d,5);

p1.Add(&p4)->printPolynomial();
p4.Subtract(&p1)->printPolynomial();

p4.Add(&p4)->printPolynomial();
p4.Subtract(&p4)->printPolynomial();
}

void test3(){
int p1c[3] = {0,0,0};
int p1d[3] = {0,3,7};
IntPolynomial p1(p1c,p1d,3);

int p2c[4] = {0,0,6,10};
int p2d[4] = {0,3,20,40};
IntPolynomial p2(p2c,p2d,4);

p1.Multiply(&p2)->printPolynomial();
}
void test4() {
int q1c[4] = { 0,1,0,-1 };
int q1d[4] = { 0,0,10,15};
IntPolynomial q1(q1c, q1d, 4);

int q2c[1] = { -1 };
int q2d[1] = { 0 };
IntPolynomial q2(q2c, q2d, 1);

q1.Multiply(&q2)->printPolynomial();
q1.Add(&q2)->printPolynomial();
q1.Subtract(&q2)->printPolynomial();
}

int main(){
int x;
cin >> x;
switch(x){
case 1: test1(); break;
case 2: test2(); break;
case 3: test3(); break;
case 4: test4();
default:
;
}
return 0;
}

Мне нужно завершить работу функций и провести тестирование, а затем отправить свой код (от /* UPLOAD START */ до /* UPLOAD END */).
Я работал два дня, и мой код успешно прошел тест1 ~ тест4. Но мой учитель использует специальную программу для проверки моего кода (я не знаю этой программы). Когда пришло время отправить домашнее задание на тестирование, я все равно провалил тест.
Ниже приведен мой код (извините за неточный перевод, мой родной язык не английский):Примечание. При печати полинома мне нужно начать с наименьшего показателя степени и печатать в порядке возрастания. Например, -x+x^3-3x^5 и 2x^2+7x^5-10x^9.
class IntPolynomial{
private:
public:
int pair = 0; //Number of polynomial terms, as well as the length of coefficients[] and power[](their length are always the same).
int *coefficient = new int[500];
int *power = new int[500]; // you can call it exponent[] if you want.

IntPolynomial(){
pair = 0;
coefficient[0] = 0;
power[0] = 0;
}
IntPolynomial(int* c, int* d, int n) {
pair = n;
for (int i = 0; i < n; i++) {
coefficient = c;
power = d;
}
for (int j = pair; j > 0; j--) { //Bubble Sort, sort from largest to smallest.
for (int i = 0; i < j; i++) {
if (power < power[i + 1]) {
int temp1 = power;
int temp2 = coefficient;
power = power[i + 1];
power[i + 1] = temp1;
coefficient = coefficient[i + 1];
coefficient[i + 1] = temp2;
}
}
}

}

~IntPolynomial(){
delete[] coefficient;
delete[] power;
}
int getDegree(){
int max = 0;
for (int i = 0; i < pair; i++) {
if (power > max) {
max = power[i];
}
}
if (max > 0) {
return max;
}
else {
return -1;
}
}
IntPolynomial* Add(IntPolynomial* b){
IntPolynomial* k = new IntPolynomial();
int x = 0;
int y = 0;
int s = 0;

/*
X and Y are the indicators of the loop, find the largest index in turn and add it to IntPolynomial *k.
(When x and y are smaller than the length of the inputted array.)
*/
while (x < pair && y < b->pair) {
if (power[x] < b->power[y]) {

k->power = b->power[y];
k->coefficient = b->coefficient[y];
k->pair += 1;
y++;
s++;
}
else if (power[x] == b->power[y]) {
if (coefficient[x] + b->coefficient[y] != 0) {

k->power = power[x];
k->coefficient = coefficient[x]+b->coefficient[y];
s++;
x++;
y++;
k->pair += 1;
}
else {
x++;
y++;
}
}
else {
{
k->power = power[x];
k->coefficient = coefficient[x];
k->pair += 1;
x++;
s++;
}
}

// When x or y is bigger than the length of the inputted array, then the remaining terms are added to k.
if (x == pair && y < b->pair) {
for (int i = y; i < b->pair; i++) {
if (b->coefficient[i] != 0) {
k->power = b->power[i];
k->coefficient = b->coefficient[i];
k->pair += 1;
s++;
}
}
}

if(x < pair && y == b-> pair){
for (int i = x; i < pair; i++) {
if (power[i] != 0) {
k->power = power[i];
k->coefficient = coefficient[i];
k->pair += 1;
s++;
}
}
}

//Adding the coefficients of two terms with the same exponent
for (int i = 0; i < k->pair; i++) {
for (int j = i + 1; j < k->pair; j++) {
if (k->power[i] == k->power[j]) {
k->coefficient[i] += k->coefficient[j];
k->coefficient[j] = 0;
k->power[j] = 0;
}
}
}
//Delete terms whose coefficient is 0
for (int i = 0; i < k->pair; i++) {
if (k->coefficient[i] == 0) {
CONTI:
if (k->coefficient[k->pair - 1] == 0) {
k->pair--;
goto CONTI;
}
else {
if (i > k->pair - 1) {
break;
}
else {
k->power[i] = k->power[k->pair - 1];
k->coefficient[i] = k->coefficient[k->pair - 1];
k->pair--;
}
}
}
}

/*cout pair) {
if (power[x] < b->power[y]) {
k->power[s] = b->power[y];
k->coefficient[s] = -(b->coefficient[y]);
k->pair += 1;
y++;
s++;
}
else if (power[x] == b->power[y]) {
if (coefficient[x] - b->coefficient[y] != 0) {
k->power[s] = power[x];
k->coefficient[s] = coefficient[x] - (b->coefficient[y]);
s++;
x++;
y++;
k->pair += 1;
}
else {
x++;
y++;
}
}
else {
k->power[s] = power[x];
k->coefficient[s] = coefficient[x];
k->pair += 1;
x++;
s++;
}
}
if (x == pair && y < b->pair) {
for (int i = y; i < b->pair; i++) {
if (b->power[i] != 0) {
k->power[s] = b->power[i];
k->coefficient[s] = -(b->coefficient[i]);
k->pair += 1;
s++;
}
}
}
if (x < pair && y == b->pair) {
for (int i = x; i < pair; i++) {
if (power[i] != 0) {
k->power[s] = power[i];
k->coefficient[s] = coefficient[i];
k->pair += 1;
s++;
}
}
}
for (int i = 0; i < k->pair; i++) {
for (int j = i + 1; j < k->pair; j++) {
if (k->power[i] == k->power[j]) {
k->coefficient[i] += k->coefficient[j];
k->coefficient[j] = 0;
k->power[j] = 0;
}
}
}
for (int i = 0; i < k->pair; i++) {
if (k->coefficient[i] == 0) {
CONTI:
if (k->coefficient[k->pair - 1] == 0) {
k->pair--;
goto CONTI;
}
else {
if (i > k->pair - 1) {
break;
}
else {
k->power[i] = k->power[k->pair - 1];
k->coefficient[i] = k->coefficient[k->pair - 1];
k->pair--;
}
}
}
}
if (k->pair < 0) {
k->pair = 0;
}
else {
for (int j = pair; j > 0; j--) { //Bubble Sort, sort from largest to smallest.
for (int i = 0; i < j; i++) {
if (power[i] < power[i + 1]) {
int temp1 = power[i];
int temp2 = coefficient[i];
power[i] = power[i + 1];
power[i + 1] = temp1;
coefficient[i] = coefficient[i + 1];
coefficient[i + 1] = temp2;
}
}
}
}
IntPolynomial* l = new IntPolynomial(k->coefficient, k->power, k->pair);
return l;
}
IntPolynomial* Multiply(IntPolynomial* b) {

//Defines some space for temporary storage of data.
int* ppower = new int[500];
int* ccoefficient = new int[500];
int ppair = 0;

//Adding the result of multiplying all the terms of the two polynomials to the above array.
//At this point there may be the same item appearing multiple times in the ppower[].
for (int i = 0; i < pair; i++) {
for (int j = 0; j < b->pair; j++) {
ppower[ppair] = power[i] + b->power[j];
ccoefficient[ppair] = coefficient[i] * b->coefficient[j];
ppair += 1;
}
}

//Combine the coefficients of two terms with the same index(power).
for (int i = 0; i < ppair; i++) {
for (int j = i + 1; j < ppair; j++) {
if (ppower[i] == ppower[j]) {
ccoefficient[i] += ccoefficient[j];
ccoefficient[j] = 0;
ppower[j] = 0;
}
}
}

//Delete terms whose coefficient is 0;
for (int i = 0; i < ppair; i++) {
if (ccoefficient[i] == 0) {
CONTI:
if (ccoefficient[ppair - 1] == 0) {
ppair--;
goto CONTI;
}
else {
if (i > ppair - 1) {
break;
}
else {
ppower[i] = ppower[ppair - 1];
ccoefficient[i] = ccoefficient[ppair - 1];
ppair--;
}
}
}
}

//This gives all the terms after multiplying the polynomials, and each different power occurs only once.
//Now it's time to define k. In the constructor I've designed a bubble sort.
if (ppair < 0) {
ppair = 0;
}
IntPolynomial* k = new IntPolynomial(ccoefficient, ppower, ppair);
return k;
}
void printPolynomial()
/*for (int j = pair; j > 0; j--) { //Bubble Sort, sort from largest to smallest.
for (int i = 0; i < j; i++) {
if (power[i] < power[i + 1]) {
int temp1 = power[i];
int temp2 = coefficient[i];
power[i] = power[i + 1];
power[i + 1] = temp1;
coefficient[i] = coefficient[i + 1];
coefficient[i + 1] = temp2;
}
}
}
*/
if (pair == 0) {
cout

Подробнее здесь: https://stackoverflow.com/questions/789 ... mial-class

Вернуться в «C++»