///Bilgisayar programlama II ve Sayısal Çözümleme
//ÖDEV 1
// f(x)=ln(x)-0.7 fonksiyonunun a=0.5 ile b=3 arasındaki 
// kökünü bulmak için yarıya bölme yönteminikullanarak bir 
// program geliştiriniz, kök değerini hesaplatınız 

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

class fb extends f_x
{
   public double func (double x)
   { return -0.9*x*x+1.7*x+2.5;}
//===========================================================
}
public class FSCO1
{
	
public static double ikiyebolme(f_x f,double a,double b)
{
//ikiye bölme yöntemi a ile b arsında kök değerini 
// her seferinde sayıyı ikiye bölerek arar.
double test;
double p=0;
double es,ea;
double fa,fp;
int maxit=500,iter=0;
es=0.0000001;
ea=1.1*es;
while((ea>es)&&(iter<maxit))
{
    p=(a+b)/2.0;
    iter++;
    if((a+b)!=0)
        { ea=Math.abs((b-a)/(a+b))*100;}
    fa= f.func(a);
    fp= f.func(p);
    test= fa*fp;
    if(test==0.0)      ea=0;
    else if(test<0.0)  b=p;
    else              {a=p;}
} 
if(iter>=maxit) 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 p;
}

     public static void main (String args[])  
     { 
	 fb f=new fb();
     double a,b;
     a=Double.parseDouble(JOptionPane.showInputDialog(" Fonksiyonun alt sınırını giriniz a : "));
     b=Double.parseDouble(JOptionPane.showInputDialog(" Fonksiyonun üst sınırını giriniz b : "));
     double r;
     r= ikiyebolme(f,a,b);
     JOptionPane.showMessageDialog(null," kök değeri  : "+r+"\nFonksiyon değeri : "+f.func(r),
     "ikiye bölme yöntemiyle kök hesabı : ",JOptionPane.PLAIN_MESSAGE);
     System.exit(0);
     } 
}