C/Visual C - Ayuda de favor

   
Vista:

Ayuda de favor

Publicado por Uriel (1 intervención) el 07/10/2010 01:17:51
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);
}
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder