#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#define real double
#define RND ((real)rand()/RAND_MAX)

int qrdec(real**,real**,int,int);
int qrback(real**,real**,int,int,real*,real*);

real funs(int i, real x){
	if(i==0) return 1;
	if(i==1) return x;
	else {fprintf(stderr,"funs: wrong parameter"); return 0;}
}

int main(void){
	int n=3,m=2;

	real* x = (real *)calloc(n,sizeof(real)); 
	real* y = (real *)calloc(n,sizeof(real)); 
	real* s = (real *)calloc(n,sizeof(real)); 
	real* time = (real *)calloc(n,sizeof(real)); 
	real* mass = (real *)calloc(n,sizeof(real)); 
	mass[0]=0.0698; mass[1]=0.0743; mass[2]=0.1194;
	time[0]=0.78; time[1]=0.80; time[2]=1.00;
	for(int i=0;i<n;i++) x[i]=mass[i];
	for(int i=0;i<n;i++) y[i]=time[i]*time[i];
	for(int i=0;i<n;i++) s[i]=2*time[i]*0.01;

	real** a = (real **)calloc(m,sizeof(real *)); 
	for (int i=0; i<m ; i++) a[i] = (real *)calloc(n,sizeof(real)); 

	for(int row=0;row<n;row++) for(int col=0;col<m;col++)
		a[col][row]=funs(col,x[row])/s[row];

	real* b = (real *)calloc(n,sizeof(real)); 
	for(int i=0;i<n;i++) b[i]=y[i]/s[i];

	real** r = (real **)malloc(m*sizeof(real *)); 
	for (int i=0; i<m ; i++) r[i] = (real *)malloc(n*sizeof(real)); 

	qrdec(a,r,n,m);

	real* sol = (real *)calloc(n,sizeof(real)); 
	qrback(a,r,n,m,b,sol);

	printf("# k=%g\n",pow(2*3.1415927,2)/sol[1]);

	for(int i=0;i<n;i++){
		printf("# m=1,S=28\n");
		printf("%g %g\n",x[i],y[i]-s[i]);
		printf("%g %g\n",x[i],y[i]);
		printf("%g %g\n",x[i],y[i]+s[i]);
		}

	printf("# m=1,S=0\n");
	for(int i=0;i<n;i++){
		printf("%g %g\n",x[i],sol[0]+x[i]*sol[1]);
		}

}
