Buenas, estoy intentando pasar este programa que me calcula el polinomio de lagrange a clases y objetos, este programa originalmente hecho para correr con C++ linux.
Yya he pasado el codigo a una version en POO pero me genera algunos errores
Notas: le he añadido una funcion que introduce los nodos de manera dinamica ya que el programa original a continuacion los manejaba desde un archivo que ya contenia los datos.
Uso como compilador Turbo C++
SO: Windos 7 (tal ves algo tenga que ver)
Les agradeceria mucho su ayuda
****************************************PROGRMA ORIGINAL""""""""""""
#include <iostream>
#include <fstream>
using namespace std;
#include <iomanip>
void monomio2(int n, double *x, double *D);
int main () {
cout << "Polinomio de interpolacion de Lagrange\n\n";
ifstream label1 ("datos//datos.in");
int n, i, j, k;
label1 >> n;
double *x, *xp, *f, *L, *D, producto, sum, *P;
x = new double [n], xp = new double [n], f = new double [n];
L = new double [n], D = new double [n], P = new double [n];
cout << "Numero de pares ordenados = " << n << "\n\n";
cout << "Valores de x y f(x)\nx f(x)\n";
for (i= 0; i < n; i++){
label1 >> x[i] >> f[i];
cout << x[i] << setw(5) << setiosflags(ios::right) << f[i] << "\n";
}
cout << endl;
for (k = 0; k < n; k++){
producto = 1;
for (i = 0; i < n; i++){
if (i != k) producto = producto * (x[k] - x[i]);
}
L[k] = f[k]/producto;
}
cout << "Coeficientes de interpolacion de Lagrange\n\n";
cout.setf(ios::fixed);
cout.precision(1);
for (i= 0; i < n; i++){
cout << "L(" << n-i-1 << ") = " << setw(4) << setiosflags(ios::right) << L[i] << endl;
}
cout << endl;
for (k = 0; k < n; k++){
j = 0;
for (i = 0; i < n; i++){
if (i != k) {xp[j] = x[i]; j += 1;}
}
monomio2 (n-1, xp, D);
for (i= 0; i < n; i++){
P[i] = P[i] + L[k]*D[i];
.
}
}
cout << "Polinomio de interpolacion de Lagrange (grado " << n-1 << ")\n\n";
for (i= 0; i < n; i++){
cout << "P(" << n-i-1 << ") = " << setw(4) << setiosflags(ios::right) << P[i] << endl;
.
}
return 0;
}
.
void monomio2(int n, double *x, double *D){
double *E;
.
E = new double [n];
D[0] = 1;
D[1] = -x[0];
for (int i = 1; i < n; i++) {
for (int k =1; k < i+1; k++) {
E[k] = D[k] + D[k-1]*(-x[i]);
}
D[i+1] = D[i]*(-x[i]);
for (int j = 1; j < i+1; j++) {
D[j] = E[j];
}
}
delete E;
""""""""""""""""""""""""""""""""""""""PROGRAMA MODIFICADO POR MI""""""""
Soy un poco nuevo con la programacion con objetos asi que tal ves existan algunos errores fatales
"""""""""""""""""""""""""""""""""""""""""""""""""" """"""""""""""""""""""""""""""""""""
#include <iostream.h>
#include <conio.h>
#include <math.h>
#include <stdio.h>
#include <string.h>
#include <iomanip.h>
class Lagrange{
public:
vectores(int n);
calc(int n);
void monomio2(int n, double *x, double *D);
private:
int tam;
int X,Y;
int n, i, j, k;
double *x, *xp, *f, *L, *D, producto, sum, *P;
};
Lagrange::vectores(int n){
x=new double[X];
f=new double[Y];
for(i=1;i<=n;i++) {
cout<<"\nx"<< i<<"..";
cin>>x[i];
cout<<"y"<< i<<"..";
cin>>f[i];
cout<<"\n";
} }
Lagrange::calc(int n){
/*x = new double [n],*/ xp = new double [n] /*,f = new double [n]*/;
L = new double [n], D = new double [n], P = new double [n];
/*for (i= 0; i < n; i++){
cout << "L(" << n-i-1 << ") = " << setw(4) << setiosflags(ios::right) << L[i] << endl;
}*/
cout << endl;
for (k = 0; k < n; k++){
producto = 1;
for (i = 0; i < n; i++){
if (i != k) producto = producto * (x[k] - x[i]);
}
L[k] = f[k]/producto;
}
cout << "Coeficientes de interpolacion de Lagrange\n\n";
cout.setf(ios::fixed);
cout.precision(1);
for (i= 0; i < n; i++){
cout << "L(" << n-i-1 << ") = " << setw(4) << setiosflags(ios::right) << L[i] << endl;
}
cout << endl;
for (k = 0; k < n; k++){
j = 0;
for (i = 0; i < n; i++){
if (i != k) {xp[j] = x[i]; j += 1;}
}
monomio2 (n-1, xp, D);
for (i= 0; i < n; i++){
P[i] = P[i] + L[k]*D[i];
}
}
cout << "Polinomio de interpolacion de Lagrange (grado " << n-1 << ")\n\n";
for (i= 0; i < n; i++){
cout << "P(" << n-i-1 << ") = " << setw(4) << setiosflags(ios::right) << P[i] << endl;
}
return 0;
}
void Lagrange::monomio2(int n, double *x, double *D){
double *E;
E = new double [n];
D[0] = 1;
D[1] = -x[0];
for (int i = 1; i < n; i++) {
for (int k =1; k < i+1; k++) {
E[k] = D[k] + D[k-1]*(-x[i]);
}
D[i+1] = D[i]*(-x[i]);
for (int j = 1; j < i+1; j++) {
D[j] = E[j];
}
}
delete E;
}
int main(){
int n;
Lagrange A;
cout<<"cuantos datos desea ingresar ";
cin>>n;
A.vectores(n);
A.calc(n);
A.monomio2(n,0,0);
}