Bu yazımızda Class Objesini kullanarak Rasyonel Sayı işlemleri yapacağız. Aynı zamanda GET-SET özelliklerini tekrardan kullanarak pekiştirmiş olacağız.
GET-SET özelliğini unuttuysanız veya incelemek istiyorsanız Buradan ilgili konumuza ulaşabilirsiniz. Öncelikle şöyle bir yapı oluşturmaya çalışalım.
Gerekli iki özelliğimizi tanımlarken GET-SET özelliğini kullanmak için bu iki özelliğin “private” erişim belirlicisi kullanılması gerektiğini unutmayalım.
Kodlamaya geçelim!
Adım adım gidecek olursak öncelikle “Rasyonel” isimli sınıfımızı tanımlayıp, içine iki adet pay ve payda özelliğini ekliyoruz.
class Rasyonel { private int pay; private int payda; }
İki adet private özelliğimizi tanımladık, Main yordamından bu iki özelliğe ulaşıp değiştirme işlemi yapamayacağımız için GET-SET Metodlarına ihtiyacımız olacak, gerekli özellikleri tanımlayalım.
class Rasyonel { private int pay; private int payda; public int payGetSet { get { return pay; } set { pay = value; } } public int paydaGetSet { get { return payda; } set { payda = value; } } }
Daha sonra İşlem fonksiyonlarını tanımlayalım. Parametrelerin ve dönüş tiplerinin sınıf tipinde olduğunu unutmayalım. Gerekli tanımlamaları yapmaya Toplama işleminden başlayalım.
class Rasyonel { private int pay; private int payda; public int payGetSet { get { return pay; } set { pay = value; } } public int paydaGetSet { get { return payda; } set { payda = value; } } public Rasyonel Topla(Rasyonel sayi1,Rasyonel sayi2)//Parametrelerin Geliş tipine dikkat edelim. { Rasyonel rsy = new Rasyonel();//Dönüş olarak göndereceğimiz Objemiz. pay = sayi1.pay * sayi2.payda + sayi2.pay * sayi1.payda;//Rasyonel sayılarda toplamı işlemi yaparken pay için gerekli işlemler payda = sayi1.payda * sayi2.payda;//Rasyonel sayılarda Toplamı işlemi yaparken payda için gerekli işlemler. rsy.pay = this.pay;//Dönecek olan objemize atama işlemlerini yapıyoruz. rsy.payda = this.payda; return rsy; //Gerekli objeyi geri döndürüyoruz. } }
Toplama işlemi için bu şekilde bir fonksiyon tanımladık, Parametreleri ve Dönüş tipi sınıf objesi aynı tipte. Aynı tanımlamaları diğer 4 işlem için de yapacağız ve tabiki tek fark işlemlerın farklılığı olacaktır. Aşağıdaki gibi:
Çıkarma İşlemi
public Rasyonel Cikar(Rasyonel s1, Rasyonel s2) { Rasyonel rsy = new Rasyonel(); pay = s1.pay * s2.payda - s2.pay * s1.payda; payda = s1.payda * s2.payda; rsy.pay = this.pay; rsy.payda = this.payda; return rsy; }
Çarpma İşlemi
public Rasyonel Carp(Rasyonel s1, Rasyonel s2) { Rasyonel rsy = new Rasyonel(); pay = s1.pay * s2.pay; payda = s2.payda * s2.payda; rsy.pay = this.pay; rsy.payda = this.payda; return rsy; }
Bölme İşlemi
public Rasyonel Bolme(Rasyonel s1, Rasyonel s2) { Rasyonel rsy = new Rasyonel(); pay = s1.pay * s2.payda; payda = s1.payda * s2.pay; rsy.pay = this.pay; rsy.payda = this.payda; return rsy; }
Bu şekilde dört işlemi tamamlamış olacağız. Daha sonra Karsilastir ve Sadelestir fonksiyonlarını inceleyeceğiz. Karşılaştırma fonksiyonunda gelen iki objeyi karşılaştırıp;
Eğer sayı1 > sayı2 ise 1
Eğer sayı1 = sayı2 ise 0
Eğer sayı < sayı2 ise -1
Geri değer döndürmeliyiz. İki objeyi büyüklük küçüklük yönünden kıyaslamanın en kolay yolu , rasyonel olarak bölme yapmak ve çıkan değerleri kıyaslamak daha doğru olacaktır. Bunun için aşağıdaki gibi bir işlem yapabiliriz.
public int Karsilastir(Rasyonel s1, Rasyonel s2)//Parametreler Rasyonel objesi tipinde olduğunu unutmayalım. { double b1, b2; b1 = s1.pay / s1.payda;//Sayıları double tipe dönüştürüyoruz. b2 = s2.pay / s2.payda; if (b1 > b2)//Karşılaştırma yaptıktan sonra geri gerekli değeri döndürüyoruz. return 1; else if (b1 == b2) return 0; else return -1; }
Böylece karşılaştırma fonksiyonunu da tamamlamış oluyoruz. Bir sonraki inceleyeceğimiz fonksiyon Sadelestirme fonksiyonu olacak. Matematiksel olarak düşündüğümüzde Sadeleştirme işlemi en fazla paydaya kadar ilerleyebilir ve 2 den başlamalıdır. Yani 12/6 sayısını kodumuz, 2’ye bölünme işlemi bitene kadar 2 ye bölmeli eğer sayı artık 2 ye bölünmüyor ise 6’ya kadar bütün sayıları denemelidir.Yani kod olarak açıklayacak olursak:
public Rasyonel Sadelestirme(Rasyonel sayi)//Dönüş tipi ve aldığı parametre obje tipinde. { Rasyonel rsy = new Rasyonel(); for (int i = 2; i <= sayi.payda; i++)//Payda'ya kadar dönmeli { if ((sayi.pay % i == 0) && (sayi.payda % i == 0))//Hem pay hem payda bölündüğünde işlem olmalı { sayi.pay = sayi.pay / i;//Gerekli bölme işlemleri yapılıyor. sayi.payda = sayi.payda / i; i--;//Aynı sayıya tekrar bölünme ihtimali olduğu için i azaltılıyor. } } rsy.pay = sayi.pay; rsy.payda = sayi.payda; return rsy; }
Genel olarak bütün kodumuzu inceleyecek olursak:
class Rasyonel { private int pay; private int payda; public int payGetSet { get { return pay; } set { pay = value; } } public int paydaGetSet { get { return payda; } set { payda = value; } } public String Yaz() { return pay.ToString() + " " + "/" + " " + payda.ToString(); } public Rasyonel Topla(Rasyonel sayi1,Rasyonel sayi2) { Rasyonel rsy = new Rasyonel(); pay = sayi1.pay * sayi2.payda + sayi2.pay * sayi1.payda; payda = sayi1.payda * sayi2.payda; rsy.pay = this.pay; rsy.payda = this.payda; return rsy; } public Rasyonel Cikar(Rasyonel s1, Rasyonel s2) { Rasyonel rsy = new Rasyonel(); pay = s1.pay * s2.payda - s2.pay * s1.payda; payda = s1.payda * s2.payda; rsy.pay = this.pay; rsy.payda = this.payda; return rsy; } public Rasyonel Carp(Rasyonel s1, Rasyonel s2) { Rasyonel rsy = new Rasyonel(); pay = s1.pay * s2.pay; payda = s2.payda * s2.payda; rsy.pay = this.pay; rsy.payda = this.payda; return rsy; } public Rasyonel Bolme(Rasyonel s1, Rasyonel s2) { Rasyonel rsy = new Rasyonel(); pay = s1.pay * s2.payda; payda = s1.payda * s2.pay; rsy.pay = this.pay; rsy.payda = this.payda; return rsy; } public Rasyonel Sadelestirme(Rasyonel sayi) { Rasyonel rsy = new Rasyonel(); for (int i = 2; i <= sayi.payda; i++) { if ((sayi.pay % i == 0) && (sayi.payda % i == 0)) { sayi.pay = sayi.pay / i; sayi.payda = sayi.payda / i; } } rsy.pay = sayi.pay; rsy.payda = sayi.payda; return rsy; } public int Karsilastir(Rasyonel s1, Rasyonel s2) { double b1, b2; b1 = s1.pay / s1.payda; b2 = s2.pay / s2.payda; if (b1 > b2) return 1; else if (b1 == b2) return 0; else return -1; } }
Rasyonel sınıfımızın tanımı bu şekilde olmalı, Main metodundan referans çağırım şekli ile yeni Rasyonel objeler oluşturabilir ve bunları kullanabiliriz. Anlamadığınız, hata aldığınız konuları bu başlık altından sorabilirsiniz.
Teşekkürler.