/*Figueroa Bernal jaime eduardo
UNAM FES ACATLAN METODOS NUMERICOS II*/
#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
#include<ctype.h>
double *cons(int);
void leer(double []int);
void dest(double []);
void solution(double[]double[]doubleint);
void main(void)
{
int ing;
char dt;
double *X*Yein;
clrscr();
textcolor(10);
cprintf("\t\t\t Interpolacion de Lagrange.\n");
puts("\n¨No de elementos de la tabla?:");
scanf("%d"&n);
X=cons(n);
Y=cons(n);
do
{
puts("\n¨Grado del polinomio.?");
scanf("\t%d"&g);
if(g<n)
{
puts("¨Punto a interpolar.?");
scanf("%lf"&in);
do
{
puts("\nIngresa los elementos de x:");
leer(Xn);
puts("Ingresa los elemtos de F(x).");
leer(Yn);
puts("¨Datos correctos.?");
puts("(s/n)");
}while(d=tolower(getch())!='s');
solution(XYing);
dest(X);
dest(Y);
}
else
{
puts("No hay sufucientes puntos.");
}
getch();
puts("\n¨Deseas continuar.?\n");
puts("(s/n)");
}while(t=tolower(getch())!='n');
}
double *cons(int N)
{
double *T;
T=(double*)calloc(Nsizeof(double));
if(T==NULL)
{
puts("No hay memoria disponible");
}
return(T);
}
void leer(double A[]int N)
{
int i;
for(i=0;i<N;i++)
{
printf("\t%d="i);
scanf("%lf"&A
);
}
}
void dest(double A[])
{
free(A);
}
void solution(double X[]double Y[]double xint gr)
{
int ij;
double num=1den=1s=0;
for(i=0;i<=gr;i++)
{
for(j=0;j<=gr;j++)
{
if(i!=j)
{
num*=(x-X[j]);
den*=(X-X[j]);
}
}
num*=Y;
printf("\nL(%d)=%lf"inum/den);
s+=num/den;
num=den=1;
}
printf("\nEl resultado es=%lf"s);
}
Autor: jaime