Module dati real ::A,C end Module dati program provaFind USE dati implicit none real(KIND=8) :: x,FindZeroNewton logical :: trovato real(KIND=8), EXTERNAL :: miafunz,miader,miafunz1,miader1 write(6,*)'A,C' read(5,*) a,c x=FindZeroNewton(0.3D0,.0001D0,300,trovato,miafunz,miader) if(trovato)then write(6,*)'Prima Funzione X=',x else write(6,*)'Non converge' endif x=FindZeroNewton(0.3D0,.0001D0,300,trovato,miafunz1,miader1) if(trovato)then write(6,*)'Seconda Funzione X=',x else write(6,*)'Non converge' endif end program ProvaFind real(KIND=8) function FindZeroNewton(xtt,eps,maxp,trovato,f,f1) implicit none real(KIND=8), INTENT(in) :: xtt,eps integer, INTENT(in) :: maxp logical, Intent(OUT) ::trovato real(KIND=8), EXTERNAL :: f,f1 real(KIND=8) ::xc,xt integer ::i xt=xtt do i=1,maxp xc=xt-f(xt)/f1(xt) if(abs(xc-xt) < eps ) exit xt=xc enddo trovato= i <= maxp FindZeroNewton=xc end function FindZeroNewton real(KIND=8) function miafunz(x) USE dati implicit none real(KIND=8) , INTENT(IN) ::x miafunz=A*x**2-C end function miafunz real(KIND=8) function miader(x) USE dati implicit none real(KIND=8) , INTENT(IN) ::x miader=A*2*x end function miader real(KIND=8) function miafunz1(x) USE dati implicit none real(KIND=8) , INTENT(IN) ::x miafunz1=A*x**3-C end function miafunz1 real(KIND=8) function miader1(x) USE dati implicit none real(KIND=8) , INTENT(IN) ::x miader1=3*A*x**2 end function miader1