class Lagrange{
  float[] u;
  float[] v;
  int n; //pocet uzlov

  public Lagrange(float[] u,float[] v){
	// otestujeme ci nemame nahodou v u[] rovnake 2 hodnoty

     if (u.length!=v.length){
		   System.out.println("Nespravne zadane parametre konstruktora");

		                    }


	   else{ boolean q=false;
	    out: for (int i=0;i<=n;i++)
	           for (int j=0;j<=n;j++) if((i!=j)&&(u[i]==u[j])){ q=true;
	                                                            break out; }
             if (q) System.out.println("Error: 2 rovnake hodnoty v poli u");

	     	     else{ this.u=u;
	                   this.v=v;
	                   n=u.length-1; }
		    }
  }

  public Polynom interpol(){
	Polynom vys,pom;
	Polynom[][] l;
	Polynom[] L;

	if (n==0) { vys=new Polynom(0);
	            vys.a[0]=v[0];
	            return vys;
			     }
	if (n==1) { l=new Polynom[n+1][n+1];

				 l[0][1]=new Polynom(1);
				 l[0][1].a[1]=1/(u[0]-u[1]);
			     l[0][1].a[0]=-u[1]/(u[0]-u[1]);
			     l[1][0]=new Polynom(1);
				 l[1][0].a[1]=1/(u[1]-u[0]);
	             l[1][0].a[0]=-u[0]/(u[1]-u[0]);

				 L=new Polynom[n+1];
				 L[0]=l[0][1];
				 L[1]=l[1][0];
		         }

       else {  l=new Polynom[n+1][n+1];
		       for (int i=0;i<=n;i++)
	            for (int j=0;j<=n;j++)
		           if (i!=j) { l[i][j]=new Polynom(1);
		        			   l[i][j].a[1]=1/(u[i]-u[j]);
					           l[i][j].a[0]=(-u[j])/(u[i]-u[j]);
					          }

			   	 /* for (int i=0;i<=n;i++)
				     for (int j=0;j<=n;j++)
		               if (i!=j)
		                System.out.println("l["+i+"]["+j+"]="+l[i][j].naRetazec());
		                */

			   L=new Polynom[n+1];
               for (int i=0;i<=n;i++){

                   if (i==0){ L[i]=l[i][1].sucin(l[i][2]);
                              for (int j=3;j<=n;j++) L[i]=L[i].sucin(l[i][j]);
						     }

                   if (i==1){ L[i]=l[i][0].sucin(l[i][2]);
                              for (int j=3;j<=n;j++) L[i]=L[i].sucin(l[i][j]);
						     }

                   if (i>1){  L[i]=l[i][0].sucin(l[i][1]);
                              for (int j=2;j<=n;j++)
                                  if (i!=j) L[i]=L[i].sucin(l[i][j]);
						    }


   								       } //for

   					/* for (int j=0;j<=n;j++)
		                  System.out.println("L["+j+"] : "+L[j].naRetazec());
		                  */

		     }
      vys=new Polynom(0);
      vys.a[0]=0;
      for (int i=0;i<=n;i++){ vys=vys.sucet(L[i].nasob(v[i]));
                              vys.osetriSt(); }
      return vys;
  }

}

