#include<stdio.h>
#include<conio.h>
#include<math.h>

void getdata (double a[], double fa[])
{
   char fname[64];
   FILE *f;
   int i, j, n, rc;
   char c;

   do {
      printf ("File: ");
      scanf ("%s", fname);
      if ((f = fopen (fname, "rt")) != NULL) break;
      printf ("Cannot open file %s\n", fname);
   } while (1);

    do {fscanf(f, "%c", &c);} while(c!=10);
    do {fscanf(f, "%c", &c);} while(c!=10);

   for (i = 0; i < 18; i++) {
	 fscanf (f, "%lf", &a[i]);
	 fscanf (f, "%lf", &fa[i]);
	 }

   fclose (f);
}

double interpolation (double T[18], double Tk[18], double Cpk[18], int n, int k)
{
static double r, r1;
int i, j;
r=0;
for(i=0; i<=n; i++)
{r1=Cpk[i];
 for(j=0; j<=n; j++)
  {if (j==i) goto end;
   r1*=(T[k]-Tk[j])/(Tk[i]-Tk[j]);
   end:
  }
 r+=r1;
}
return(r);
}

void main (void)
{
static double T[18], Cp[18], Tk[18], Cpk[18], d;
static int n, i, j, k;
getdata(T,Cp);
printf("Enter the degree of interpolationg polynomial: ");
scanf("%d",&n);
printf("Enter the points of interpolation: \n");
for(i=0; i<=n; i++)
{printf("%d. ",i+1);
 scanf("%d",&k);
 Tk[i]=T[k-1];
 Cpk[i]=Cp[k-1];
}
clrscr();
printf("No. | Cp value | Interpolated value | Error\n");
for (i=0; i<18; i++)
{printf("%d",i+1);
 gotoxy(7,i+2);
 printf("%4.4lf",Cp[i]);
 gotoxy(18,i+2);
 k=0;
  {for(j=0; j<=n; j++)
   if(T[i]==Tk[j])
   k=1;
  }
 if (k==0)
  {d=interpolation(T,Tk,Cpk,n,i);
   printf("%4.4lf",d);
  }
 else printf("Point");
 gotoxy(39,i+2);
 if (k==0)
  {d=fabs(d-Cp[i]);
   printf("%.10lf\n",d);
  }
 else printf("%d\n",k-1);
}
}