function [x,cont]=zeri(f,a,b)

% Data una funzione 'f' in un intervallo [a b]
% determinare, se possibile, il valore x t.c. f(x)=0
% Come? Iteritavimente e ad ogni iterazione
% suddividendo l'intervallo [a b] in due e prendendo
% un nuovo intervallo [a1 b1] t.c. f(a1)*f(b1)<0

% Ipotesi di partenza: f(a)*f(b)<0, f e` continua
% e f'(x) e` diverso da 0 in [a b]

global A

A=zeros(30,3) ;
fa=f(a) ;
fb=f(b) ;

if fa*fb>0
    disp('Estremi non ammissibili')
    [a,b]=input('Inserisci di nuovo gli estremi dell''intervallo' ) ;
%    return
    fa=f(a) ;
    fb=f(b) ;
end
x1=linspace(a,b,200) ;
y=f(x1) ;
plot(x1,y)
grid

x=(a+b)/2 ;
fx=f(x) ;
A(1,:)=[a b fx] ;
cont=0 ;

toll=1e-12 ;  %puo` essere inserito da tastiera

while abs(fx)>toll
    cont=cont+1 ;
    if fa*fx>0
        a=x ;
        fa=fx ;
    else
        b=x ;
        fb=fx ;
    end    
    x=(a+b)/2 ;
    fx=f(x) ;
    A(cont+1,:)=[a b fx] ;
end

  disp(['Numero di iterazioni: ', num2str(cont)])
  disp(A(cont+1,:))
end
