//===========================================
// bayağı kesir sınıfı tanımı
// Dr. Turhan Coban
//===========================================
import java.util.*;
import java.awt.*;
import java.applet.Applet;
import java.awt.event.*;
import javax.swing.*; // giriş çıkış


// sınıf bayağı kesir
// bu sinif bayağı kesir sayılarının matamatik
// işlemlerini yapar
//

public class bayagikesir {
    // sınıf degişkenleri
    protected int   pay;
    protected int   payda;

    // kurucu metodlar

public bayagikesir()
{pay=0;payda=1;}

public bayagikesir(int npay,int npayda)
{pay=npay;payda=npayda;}

public bayagikesir(int numer)
{pay=numer;payda=1;}

public bayagikesir(bayagikesir c )
{pay=c.Pay();payda=c.Payda();}

//hesap metodları

public int enbuyukortakbolen()
{// iki tam sayinin en buyuk ortak bolenini hesaplar
int n=pay;
int m=payda;
if(n==0) return m;
if(m==0) return n;
while(m != n)
{ if(n>m) n=n-m;
  else    m=m-n;
} return n;
}

public void sadelestir()
{//bayağı kesiri sadeleştirir
int isaret=1;
if(pay<0) {isaret=-isaret;pay=-pay;}
if(payda<0){isaret=-isaret;payda=-payda;}
if(payda==0)
   { JOptionPane.showMessageDialog(null,toString(),
     "Bayağı kesir sıfıra bölme hatası",
     JOptionPane.ERROR_MESSAGE);System.exit(0);
   }
int ebob=enbuyukortakbolen();
ebob=Math.abs(ebob);
pay=isaret*pay/ebob;
payda=payda/ebob;
}


// giriş - çıkış metotları
public int Pay()
{return pay;}
public int Payda()
{return payda;}
public void payGir(int r)
{pay=r;}
public void paydaGir(int i)
{payda=i;}
public void bayagikesirGir(bayagikesir sag)
{pay=sag.Pay();payda=sag.Payda();}
public void bayagikesirGir(int nr,int ni)
{pay=nr;payda=ni;}
public void bayagikesirGir(int nr)
{pay=nr;payda=1;}
public void bayagikesirGir(double d)
{// tam sayinin bayagikesir esitini yükle
// eh birazcık yaklaşım var tabi
bayagikesirGir((int)d*10000,10000);
sadelestir();
}
public double toDouble()
{//bayagikesir sayinin gercek sayi esidi
return ((double)pay/(double)payda);}
public static bayagikesir BayagikesireCevir(double d)
{// tam sayinin bayagikesir esiti
bayagikesir b=new bayagikesir();
b.bayagikesirGir((int)d*10000,10000);
b.sadelestir();
return b;
}
public void topla(bayagikesir  sag)
{//ikinci bir bayagikesirle topla
pay = pay*sag.Payda() + sag.Pay()*payda;
payda = payda*sag.Payda();
sadelestir();
}
public void topla(int sag)  
{//bir gercek sayıyla topla
pay = pay + sag*payda;
sadelestir();
}
public void cikar(bayagikesir  sag)  
{//ikinci bir bayagikesirle topla
pay = pay*sag.Payda() - sag.Pay()*payda;
payda = payda*sag.Payda();
sadelestir();
}
public void cikar(int sag)  
{//bir gercek sayıyla topla
pay = pay - sag*payda;
sadelestir();
}
public void carp(bayagikesir sag )  
{//bir bayagikesir sayiyla carp
pay = pay*sag.Pay();
payda = payda*sag.Payda();
sadelestir();
}
public void carp(int sag )  
{//bir gercek sayiyla carp
pay = pay*sag;
sadelestir();
}

public void bol(bayagikesir sag )  
{//bir bayagikesir sayıyla bol
pay = pay*sag.Payda();
payda = payda*sag.Pay();
sadelestir();
}
public void bol(int sag )  
{//bir Pay sayıyla bol
payda = payda*sag;sadelestir();
}
public static bayagikesir topla(bayagikesir sol, bayagikesir sag)  
{ // iki bayagikesir sayının toplamını return deyimiyle bayagikesir olarak
 // aktarır
 int r1= sol.Pay() * sag.Payda() + sag.Pay() * sol.Payda();
 int i1= sol.Payda()* sag.Payda();
 bayagikesir sonuc;
 sonuc=new bayagikesir(r1,i1);
 sonuc.sadelestir();
 return sonuc;
}
public static bayagikesir topla(bayagikesir sol, int sag)  
{// bir bayagikesir ve bir Pay sayının toplamını return deyimiyle bayagikesir olarak
 // aktarır
 int r1=sol.Pay() + sag*sol.Payda();
 int i1=sol.Payda();
 bayagikesir sonuc;
 sonuc=new bayagikesir(r1,i1);
 sonuc.sadelestir();
 return sonuc;
}
public static bayagikesir topla(int sol, bayagikesir sag)  
{ // bir bayagikesir ve bir Pay sayının toplamını return deyimiyle bayagikesir olarak
 // aktarır
 int r1=sag.Pay() + sol*sag.Payda();
 int i1=sag.Payda();
 bayagikesir sonuc;
 sonuc=new bayagikesir(r1,i1);
 sonuc.sadelestir();
 return sonuc;
}
//===================================
public static bayagikesir cikar(bayagikesir sol, bayagikesir sag)  
{ // iki bayagikesir sayının toplamını return deyimiyle bayagikesir olarak
 // aktarır
 int r1= sol.Pay() * sag.Payda() - sag.Pay() * sol.Payda();
 int i1= sol.Payda()* sag.Payda();
 bayagikesir sonuc;
 sonuc=new bayagikesir(r1,i1);
 sonuc.sadelestir();
 return sonuc;
}
public static bayagikesir cikar(bayagikesir sol, int sag)  
{
 // bir bayagikesir ve bir Pay sayının toplamını return deyimiyle bayagikesir olarak
 // aktarır
 int r1=sol.Pay() - sag*sol.Payda();
 int i1=sol.Payda();
 bayagikesir sonuc;
 sonuc=new bayagikesir(r1,i1);
 sonuc.sadelestir();
 return sonuc;
}
public static bayagikesir cikar(int sol, bayagikesir sag)  
{// bir bayagikesir ve bir int sayının toplamını return deyimiyle bayagikesir olarak
 // aktarır
 int r1=sag.Pay() - sol*sag.Payda();
 int i1=sag.Payda();
 bayagikesir sonuc;
 sonuc=new bayagikesir(r1,i1);
 sonuc.sadelestir();
 return sonuc;
}
//===================================
public static bayagikesir carp(bayagikesir sol, bayagikesir sag)  
{ // iki bayagikesir sayinin carpimini aktarır
 bayagikesir sonuc;
 sonuc=new bayagikesir(sol.Pay()*sag.Pay(),sol.Payda()*sag.Payda());
 sonuc.sadelestir();
 return sonuc;
}
public static bayagikesir carp(bayagikesir sol, int sag)  
{ // bir bayagikesir ve bir double sayinin carpimini aktar
 bayagikesir sonuc;
 sonuc=new bayagikesir(sol.Pay()*sag,sol.Payda());
 sonuc.sadelestir();
 return sonuc;
}
public static bayagikesir carp(int sol, bayagikesir sag)  
{ // bir bayagikesir ve bir double sayinin carpimini aktar
 bayagikesir sonuc;
 sonuc=new bayagikesir(sag.Pay()*sol,sag.Payda());
 sonuc.sadelestir();
 return sonuc;
}
public static bayagikesir bol(bayagikesir sol, bayagikesir  sag)  
{ // iki bayagikesir sayinin bölümlerini aktar
 double a=sag.Pay()*sag.Pay()+sag.Payda()*sag.Payda();
 bayagikesir sonuc;
 sonuc=new bayagikesir((int)(sol.Pay()*sag.Payda()),(int)(sol.Payda()*sag.Pay()));
 sonuc.sadelestir();
 return sonuc;
}
public static bayagikesir bol(bayagikesir sol, int  sag)  
{ // bayagikesir sayıyı double sayıya bol
 bayagikesir sonuc;
 sonuc=new bayagikesir(sol.Pay(),(sol.Payda()*sag));
 sonuc.sadelestir();
 return sonuc;
}
public boolean kucuktur(bayagikesir sol,bayagikesir sag)
{// less then comparison of two bayagikesir numbers
return (sol.toDouble() < sag.toDouble());}
public boolean kucuktur_esittir(bayagikesir sol,bayagikesir sag)
{// less then and esittir comparison of two bayagikesir numbers
return (sol.toDouble() <= sag.toDouble());}
public boolean buyuktur(bayagikesir sol,bayagikesir sag)
{// buyuktur then comparison of two bayagikesir numbers
return sol.toDouble() > sag.toDouble();}
public boolean buyuktur_esittir(bayagikesir sol,bayagikesir  sag)
{// buyuktur then and esittir comparison of two bayagikesir numbers
return sol.toDouble() >= sag.toDouble();}
public boolean esittir(bayagikesir sol,bayagikesir sag)
{// esittir comparison of two bayagikesir numbers
return sol.toDouble() == sag.toDouble();}
public boolean esit_degildir(bayagikesir sol,bayagikesir  sag)
{// not esittir comparison of two bayagikesir numbers
return sol.toDouble() != sag.toDouble();}
public static String toString(bayagikesir  value)
{String b="";
if(Math.abs(value.Payda())!=1)
  {b=b+"( "+value.Pay()+" / "+value.Payda()+" )";}
else  {b=b+value.Pay()+" ";}
return b;
}
public String toString()
{// yazima hazır bayagikesir formda String deşiskenini iletir.
String b="";
if(Math.abs(Payda())!=1)
  {b=b+"( "+pay+" / "+Payda()+" )";}
else
  {b=b+Pay()+" ";}
return b;
}
     public static bayagikesir bayagikesirgir(String s)
     {
	 //bumetod bayagı kesiri ekrandan okur.
	 //StringTokanizer kütüphane sınıfı bir stringicümlelere ayırır    
     String s1=JOptionPane.showInputDialog(s);        
     StringTokenizer token=new StringTokenizer(s1);
     int n=token.countTokens()-1;
     int m=n+1;
     double a[]=new double[m];
     int j=0;           
     while(token.hasMoreTokens())
     {
     Double ax=new Double(token.nextToken());
     a[j++]=ax.doubleValue();
     }
     bayagikesir b=new bayagikesir((int)a[0],(int)a[1]);
     return b; 
     }
};

//bayagikesir sınıfının sonu


