//variabili globali
var
  kn,epsn;

//funz(x): calcolo dei valori della funzione corrispondenti all'argomento x

function funz(x)
{
  return Math.cos(x)-kn*x;
}

function funz0(k,x)
{
  k=parseFloat(k);
  x=parseFloat(x);
  return Math.cos(x)-k*x;
}

//bisezione(x1,x2) è la funzione che implementa l'algoritmo.

function bisezione(x1,x2)
{
//Le variabili f1,f2,xm, fm sono locali: possono venir dichiarate ed inizializzate quando servono.
  f1 = funz(x1);
  f2 = funz(x2);
//Condizioni di fine dell'algoritmo
  if (f1==0) return x1;
  if (f2==0) return x2;
  xm = (x1+x2)/2;
  fm = funz(xm);
  if (fm==0) return xm;
  if ((x2-x1)<epsn) return xm; //Questa è la condizione usuale di fine dell'algoritmo.
//Ricorsione: la funzione invoca sé stessa ma su un intervallo dimezzato
  if (f1*fm<0) 
    return bisezione(x1,xm)
  else 
    return bisezione(xm,x2);
}

/*
La funzione approssimaZero(x1,x2) è l'interfaccia tra HTML e Javascript:
-inizializza le variabili globali;
-controlla la validità dell'intervallo di ricerca;
-avvia l'algoritmo di bisezione.
*/

function arrotonda(x)
{
  return Math.floor(x*1/epsn)*epsn;
}

function approssimaZero(ks,as,bs,epss)
{
  kn=parseFloat(ks);
  epsn=parseFloat(epss);
  an=parseFloat(as);
  bn=parseFloat(bs);
  if (bn<an>0) 
    {
      alert("Cambiare gli estremi dell'intervallo.");
      return;
    }
  else
    return bisezione(an,bn);
}

function mostraJS(nomefilejs)
{
  jsWindow = window.open();
  jsWindow.document.open("text/plain")
  jsWindow.location = nomefilejs;
}