#include<iostream>
#include<stdlib.h>
#include<fstream>
using namespace std;

/* Interpolation lineaire. Les valeurs sont lues dans un fichier et ne
   sont pas regulierement espacees mais rangees par ordre croissant. */

double interpol(int n, double* xi, double* yi, double x, int* c){
  int i;
  double res;

  if (x < xi[0] || x > xi[n-1]){
    *c = 1;
    return 0;
  }
  *c = 0;
  for (i = 0; i < n; i++)
    if (xi[i] >= x)
      break;
  if (i == 0)
    res = yi[0];
  else
    res = yi[i-1] + (x-xi[i-1])/(xi[i]-xi[i-1])*(yi[i]-yi[i-1]);
  return res;
}

int main(){
  double *xi, *yi;
  double x, res;
  int n, i, c;
  fstream fich;

  fich.open("fichier_interpol.dat", ios::in);
  fich >> n;
  xi = (double*)malloc(n * sizeof(double));
  yi = (double*)malloc(n * sizeof(double));
  for (i = 0; i < n; i++)
    fich >> xi[i] >> yi[i];
  fich.close();

  cout << "Valeur de x ? ";
  cin >> x;
  res = interpol(n,xi,yi,x,&c);
  if (c == 1)
    cout << "x hors des limites !" << endl;
  else
    cout << "Valeur interpolee : " << res << endl;

  free(xi); free(yi);
  return 0;
}
