/*    ATK IV - Numerical Programming (2006)      */
/*  Excercise 5.2a -  Cubic Spline Interpolation */

#include<stdio.h>
#include<math.h>
#define NRANSI
#include<nr.h>
#define Pi 3.141592
#define N 40

float f(float x){return sin(x);}

int main(void){
  float xi[N+1],yi[N+1],y2[N+1];
  int i;
  float step;
  float a=0.0;
  float b=2.0*Pi;
  float z=0.0;
  float y;

  step = (b-a)/(N-1);

  for(i=1;i<=N;i++){
    xi[i]=z;
    yi[i]=f(z);
    z+=step;
  }

  spline(xi,yi,N,1,1,y2);

  for(i=1;i<4*N;i++){
    splint(xi,yi,y2,N,(i-1)*step/4.0,&y);
    printf("%f %f\n",y,f((i-1)*step/4.0));
  }

  return 0;
}