Привожу код ниже в виде zip файла, где используются динамические списки:
Но прошу помощи, данный код попросили перевести в массивы, но у меня одни ошибки , прошу помочь:
Код:
#include <sstream>
#include <iostream>
#include <fstream>
#include <string.h>
using namespace std;
struct MonicPoly{
double coef;
int power;
};
class Poly{
int MonicPoly [1];
public:
Poly();
Poly(int Coef, int Power);
Poly(const Poly & P);
void Add(Poly P);
void ConstMult(double c);
void XMult();
void MultToKXPlusB(double k, double b) {
Poly P(*this);
P.XMult();
P.ConstMult(k);
ConstMult(b);
Add(P);
};
void Derivative();
std::string GetOutputString();
};
Poly::Poly(){
MonicPoly [0] = 1; // вместо head->coef
MonicPoly [1] = 0; //вместо head->power
}
Poly::Poly(int Coef, int Power){ //Создает полином вида Coef*x^Power
AdditionHead [0] = Coef; // вместо head->coef
MonicPoly [1] = Power; //вместо head->power
}
void Poly::Add(Poly P){ //Функция сложения
MonicPoly *AdditionHead = P.head;
MonicPoly *PHead, *buf;
int AdditionHead [1]; // создаем массив на 2 переменые
if (MonicPoly [1] < AdditionHead [0]){ //Начало - "паталогический" случай, тк нет предшественника, обрабатываем отдельно // заменила AdditionHead->power
MonicPoly [1] = AdditionHead [0];
MonicPoly [0]= AdditionHead [1]; //]AdditionHead> вместо AdditionHead->coef;
continue;
}
if (MonicPoly [1] == AdditionHead [0]){
AdditionHead [0]+= ditionHead [1];
continue;
}
else{
int PHead [1]; //]нужно лишь 2 переменных
if (PHead[0] == AdditionHead [0]){ // вместо Phead->power
PHead[1] += AdditionHead [1]; // вместо PHead->coef
break;
}
else{
if(PHead[0] < AdditionHead [0]){
int buf[1]
buf[0] = AdditionHead [0];// вместо PHead->next->power
buf[1]=AdditionHead [1] ; // вместо PHead->next->coef
}
}
}
}
string Poly::GetOutputString(){
MonicPoly *PHead = head;
string ret = "";
ostringstream sstream;
int fl = 0;
if(fl && buf[1]PHead->coef>0) sstream « "+";
if(buf[1] != 1 || buf[0] == 0) sstream « buf[1];
if(buf[1] != 1 ){
sstream « "*x^"; else sstream « "x^";
sstream « buf[0];
}
fl = 1;
} t
ret = sstream.str();
return ret; urn ret;
}
void Poly::ConstMult(double c){ //Умножение на константу
MonicPoly *cur;
cur = head;
while(cur){
cur->coef*=c;
cur = cur -> next;
}
}
void Poly::XMult(){ //Умножение на f(x) = x
MonicPoly *cur;
cur = head;
while(cur){
cur->power++;
cur = cur -> next;
}
}
void Poly::Derivative(){ //Вычисление производной
MonicPoly *cur;
cur = head;
while(cur){
if (cur->power){
cur->coef *= cur->power;
cur->power--;
if (cur -> next && cur -> next -> power == 0){
cur->next = NULL;
break;
}
cur = cur -> next;
}
else {
cur->coef = 0;
}
}
}
Poly *interpolate(double *x, double *y, int N) {
Poly *l = new Poly[N];
for (int i=0; i < N; i++){ //Здесь "собираются" базисные полиномы посредством умножения на очередные множители, являющиеся полиномами первой степени
l[i].ConstMult(y[i]);
for (int j=0; j < N; j++){
if(j != i) {
l[i].MultToKXPlusB(1/(x[i] - x[j]), -x[j]/(x[i] - x[j]));
}
}
}
Poly *L = new Poly(l[0]);
for (int i = 1; i < N; i++){ //Суммируем базисные полиномы(на значения функции они домножены выше)
L->Add(l[i]);
}
delete[] l;
return L;
}
int main() {
setlocale(LC_ALL,"Russian");
int N;
ifstream fin;
fin.open("input.txt");
fin >> N;
double *x = new double[N];
double *y = new double[N];
for (int i = 0; i < N; i++)
fin >> x[i];
for (int i = 0; i < N; i++)
fin >> y[i];
Poly *L = interpolate(x, y, N);
cout << L->GetOutputString() << endl;
L->Derivative();
cout << L->GetOutputString();
delete L;
return 0;
}
_____
Код программы нужно выделять (форматировать) тегами [CODE] (читать FAQ)
Модератор