// 
//  
// Newton-Raphson yöntemi ile kök bulmak 
//    

import java.util.*;
import java.awt.*;
import java.applet.Applet;
import java.awt.event.*;
import javax.swing.*;
//============= Tanımı gereken fonksiyon ================

//===========================================================


public class FSCO4A3
{	

public static double newton(if_x f,double x)
{
int nmax=100;
double tolerance=1.0e-10;
double fx,dfx;
for(int i=0;i<nmax;i++)
{
  fx=f.func(x);
  dfx=f.dfunc(x);
  x-=fx/dfx;
  System.out.println("i="+i+"x="+x+"fx="+fx+"dfx = "+dfx);
  if(Math.abs(fx)<tolerance) { return x;}
}
JOptionPane.showMessageDialog(null,"Uyarı maximum iterasyon sayısı aşıldı \n"+
   " çözüm geçerli olmıyabilir","MAKSİMUM ITERASYON SAYISI UYARISI",JOptionPane.WARNING_MESSAGE);
return x;
}
     public static void main (String args[])  
     { 
	 if_x f=h->0.5-Math.PI*h*h*(3.0-h)/3.0;
	 //dfb df=new dfb();
     double x0;
     x0=Double.parseDouble(JOptionPane.showInputDialog(" Fonksiyon değeri için ilk tahmin : "));
     double r= newton(f,x0);
     JOptionPane.showMessageDialog(null," kök değeri  : "+r+"\nFonksiyon değeri : "+f.func(r),
     "Newton-Raphson yöntemiyle kök hesabı : ",JOptionPane.PLAIN_MESSAGE);
     System.exit(0);
     } 
}