класс — C ++: почему адреса памяти возвращаются вместо формульных значений?

Я пишу класс для сложения, вычитания и умножения многочленов (сейчас будет 1 неделя!). Во всяком случае, код компилируется, но я вижу то, что кажется адресами памяти в выводе.

Я не могу понять, почему это происходит.

Кто-нибудь может направить меня в правильном направлении?

Заранее спасибо за внимание!
Райан

Код:

#include "stdafx.h"#include <iostream>
#include <string>

using namespace std;

class Poly
{
private:

//  int ord;                            // the order of the polynomial
//  int coeff[100];

public:

int ord;                            // the order of the polynomial
int coeff[100];int a, b, c;
Poly();                             // constructor
Poly addition(Poly b);              // adds 2 polynomials
Poly subtraction(Poly b);           // subtracts 2 polynomials
Poly multiplication(Poly b);        // multiplies 2 polynomials
int evaluate(int);                  // uses Horner's method to compute and return the polynomial evaluated at x
Poly differentiate();               //
void set(int, int);                 // mutator function
int order();
void print();                       // prints the results
};

Poly::Poly()                            // the default constructor
{
for (int i = 0; i < 100; i++)
{
coeff[i] = 0;
}
}

void Poly::set(int a, int b)            // mutator function
{
// coeff = new Poly[b + 1];
coeff[b] = a;
ord = order();
}

int Poly::order()
{
int d = 0;
for (int i = 0; i < 100; i++)
if (coeff[i] != 0) d = i;
return d;
}

void Poly::print()
{
int coeff[] = { 0 };

for (int i = 99; i >= 0; i--)
{
if (coeff[i] != 0)
{
cout << coeff[i] << "x^" << i << " ";
}
}
}

int Poly::evaluate(int x)
{
int p = 0;
for (int i = ord; i >= 0; i--)
p = coeff[i] + (x * p);
return p;
}

Poly Poly::differentiate()
{
if (ord == 0)
{
Poly t;
t.set(0, 0);
return t;
}

Poly deriv;
deriv.ord = ord - 1;

for (int i = 0; i < ord; i++)
deriv.coeff[i] = (i + 1) * coeff[i + 1];
return deriv;
}

Poly Poly::addition(Poly b)
{
Poly a = *this;
Poly c;

for (int i = 0; i <= a.ord; i++)
c.coeff[i] += a.coeff[i];
for (int i = 0; i <= b.ord; i++)
c.coeff[i] += b.coeff[i];

c.ord = c.order();

return c;
}

Poly Poly::subtraction(Poly b)
{
Poly a = *this;
Poly c;

for (int i = 0; i <= a.ord; i++)
c.coeff[i] += a.coeff[i];
for (int i = 0; i <= b.ord; i++)
c.coeff[i] -= b.coeff[i];

c.ord = c.order();

return c;
}

Poly Poly::multiplication(Poly b)
{
Poly a = *this;
Poly c;

for (int i = 0; i <= a.ord; i++)
for (int j = 0; j <= b.ord; j++)
c.coeff[i + j] += (a.coeff[i] * b.coeff[j]);
c.ord = c.order();
return c;
}

int main()
{
Poly a, b, c, d;
a.set(7, 4);                    //  7x^4
a.set(1, 2);                    //  x^2

b.set(6, 3);                    //  6x^3
b.set(-3, 2);                   //  -3x^2

c = a.subtraction(b);           //  (7x^4 + x^2) - (6x^3 - 3x^2)

c.print();

//  cout << "\n";

//  d = c.differentiate().differentiate();

//  d.print();

//  cout << "\n";

//  cout << c.evaluate(2);          //  substitute x with 2
//  cin.get();

return 0;
}

РЕДАКТИРОВАТЬ

Это то, что я вижу. Любая идея, как исправить это ???

введите описание изображения здесь

-2

Решение

Насколько я могу судить, ты вообще ничего не должен видеть.

print() метод начать с

int coeff[] = { 0 };

Это скроет переменную члена coeffи будет установлен в 0,

7

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

Было бы полезно, если бы вы опубликовали некоторые результаты, которые вы видите. Попробуйте обернуть каждое выражение, выведенное в скобках. Например, cout << (coeff[i]) вместо cout << coeff[i], Кроме того, в вашем print метод вы пишете int coeff[] = {0}несмотря на наличие coeff уже объявлен как переменная-член.

0

Ваш код будет работать. Просто сделайте следующее изменение в вашем методе «Poly :: Print ()»

void Poly::print()

{
//int coeff[] = { 0 };

for (int i = 99; i >= 0; i--)
{
if (coeff[i] != 0)
{
cout << coeff[i] << "x^" << i << " ";
}
}
}

или вы можете скопировать этот код и заменить его текущим методом Poly :: Print ().

Основной причиной проблемы было то, что вы печатали массив локальной переменной, который вы объявили в методе «Poly :: print ()». И этот массив имеет только один элемент в соответствии с вашей декларацией. Так как

int coeff[] = {0};

приведенный выше код фактически создает массив размером 1.

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