#include #include #include 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; }