IRCForumları - IRC ve mIRC Kullanıcılarının Buluşma Noktası
  sohbet

 Kayıt ol  Topluluk
Yeni Konu aç Cevapla
 
LinkBack Seçenekler Stil
Alt 09 Eylül 2013, 22:14   #1
Çevrimdışı
Kullanıcıların profil bilgileri misafirlere kapatılmıştır.
IF Ticaret Sayısı: (0)
IF Ticaret Yüzdesi:(%)
C++ ile Kompleks Sayılarda 4 İşlem




Kompleks sayılar bir gerçel ve bir sanal kısımdan oluşan sayılardır.Sanal sayı gerçek dünyada karşılığı olmayan ancak matematiksel ifadelerde sıklıkla karşımıza çıkan bir sayıdır.Sanal sayılar bir gerçel sayı ile i(sqrt(-1)) sayısının çarpımı ile elde edilir.Burada sqrt(-1) gerçek dünyada var olmayan bir sayıdır ve i veya j harfi ile gösterilir.Kompleks sayılarla işlem yapmak gerçel sayılardan biraz farklıdır.Elimizde a+ib ve c+id şeklinde iki kompleks sayı olsun;
Toplama: Gerçel kısımlar kendi aralarında,sanal kısımlar kendi aralarında toplanır.
Çıkarma: Gerçel kısımdan gerçel kısım,sanal kısımdan sanal kısım çıkarılır.
Çarpma: (a+ib)(c+id) işlemi yapılacak olursa a.c+a.id+ib.c+ib.id=ac-bd+i(ad+bc) elde edilir.


Bu forumdaki linkleri ve resimleri görebilmek için en az 25 mesajınız olması gerekir.


Bölme: Bölme işlemi kompleks sayılar üzerinde doğrudan yapılamaz.Bölme işlemi yapabilmek için bölenin gerçel bir sayı olması gereklidir.Bunun için önce bölen ve bölünen bir kompleks sayı ile çarpılarak genişletilir.Çarpılan sayı böleni gerçel sayı yapacak bir kompleks sayı olmalıdır.Bu sayıya eşlenik adı verilir.c+id sayısının eşleniği c-id sayısıdır.Görüleceği üzere sayının kendisi ile
eşleniğini

çarparsak,
(c+id)(c-id)=c.c-c.id+c.id+id.id=c.c-d.d (gerçel) sayısı elde edilir.Şimdi kodlamaya geçelim.C++ üzerinde sanal sayılar tanımlı olmadığından kendi sınıfımızı oluşturmak zorundayız.Oluşturduğumuz bu sınıf tipi ile tanımladığımız her değişkenin bir gerçel ve bir de sanal kısmı olmalıdır.Önce sınıfımızı tanımlayalım;

Kod:   Kodu kopyalamak için üzerine çift tıklayın!
class cfloat { public: float reel,sanal; cfloat() { reel=0; sanal=0; } cfloat(float,float); cfloat operator+(cfloat); cfloat operator-(cfloat); cfloat operator+=(cfloat); cfloat operator*(cfloat); cfloat operator/(cfloat); };

cfloat sınıfımızı oluşturduktan sonra main() içerisinde cfloat a; dediğmiz zaman a.reel ve a.sanal adında 2 float(ondalıklı) değişkene sahip olacağız.Kod içerisinde yeşil renkte gördüğünüz kısım işlemimizin en önemli noktası.Operator Overload diye isimlendirilen bir aşırı yükleme işlemi.Yani dediğimiz üzere kompleks sayılarda işlem yapmak gerçel sayılar gibi değil bu yüzden gerçel sayılarda kullandığımız operatörleri(+,-,*,/) yukarıda yazdığımız kurallara göre uygulamalıyız.cfloat operator+(cfloat); tanımını yaparak programa 2 tane cfloat türünde değiken geldiğinde + işaretinin yeni anlamını tanımlıyoruz.Bu tanımları inceleyecek olursak,

Kod:   Kodu kopyalamak için üzerine çift tıklayın!
cfloat cfloat::operator+(cfloat sayi) { cfloat sonuc; sonuc.reel=reel+sayi.reel; sonuc.sanal=sanal+sayi.sanal; return sonuc; } cfloat cfloat::operator-(cfloat sayi) { cfloat sonuc; sonuc.reel=reel-sayi.reel; sonuc.sanal=sanal-sayi.sanal; return sonuc; } cfloat cfloat::operator+=(cfloat sayi) { reel=reel+sayi.reel; sanal=sanal+sayi.sanal; return *this; } cfloat cfloat::operator*(cfloat sayi) { cfloat sonuc; sonuc.reel=reel*sayi.reel-sanal*sayi.sanal; sonuc.sanal=reel*sayi.sanal+sanal*sayi.reel; return sonuc; } cfloat cfloat::operator/(cfloat sayi) { cfloat sonuc; float reelsayi=sayi.reel*sayi.reel+sayi.sanal*sayi.sanal; sonuc.reel=(reel*sayi.reel-sanal*(-1*sayi.sanal))/reelsayi; sonuc.sanal=(reel*(-1*sayi.sanal)+sanal*sayi.reel)/reelsayi; return sonuc; }

Kodlar incelenecek olursa her bir operator için cfloat(operator)cfloat değişkenleri ile kullanıldığında hesaplaması gereken değerler tanımlanmıştır.4 işleme ek olarak kompleks sayılarda bir += işlemide tanımlanmıştır. Bu işlem ile gerçel sayılarda kullandığımız += işlemi sanal sayılarda da uygulanabilir hale getirilmiştir.(int a=a+5 ifadesi int a+=5 ifadesine eşittir) Kod içerisinde kırmızı ile yazdığım kısım diğer overload işlemlerinden biraz farklı görünebilir ancak return *this ifadesi burada = anlamı yerine geçerek işlemin sonucundaki iki değerin çağrıldığı iki değere atandığını(yani atandığı değeri) döndürür. Bu işlemlere ek olarak bir karmaşık sayılarda genlik bulma hesabı da yapalım. Genlik, koordinat ekseninde x-eksenini gerçel sayılar,y-eksenini sanal sayılar diye düşünürsek a+ib sayısı için (a,b) noktasının orijine olan uzaklığıdır.Buda x=sqrt(a.a+b.b) (Pisagor Teoremi) orijine olan uzaklıktır ve gerçel bir pozitif sayıdır.

Kod:   Kodu kopyalamak için üzerine çift tıklayın!
float cabs(cfloat a) { return sqrt(a.reel*a.reel+a.sanal*a.sanal); }

Son olarak bir örnekle bitirelim main() içerisine aşağıdaki kodları yazarsak;

Kod:   Kodu kopyalamak için üzerine çift tıklayın!
cfloat a(3,4); cfloat b(3,-4); cfloat c(1,1); cfloat d; d=a*b/c; cout << "Sonuc : "<<d.reel<<"+"<<d.sanal<<"i"<cabs(d)<<endl

Programın ekran çıktısı aşağıdaki gibi olacaktır.


Bu forumdaki linkleri ve resimleri görebilmek için en az 25 mesajınız olması gerekir.


Alıntı

 
Alıntı ile Cevapla

IRCForumlari.NET Reklamlar
sohbet odaları sohbet odaları Benimmekan Mobil Sohbet
Cevapla

Etiketler
4, ile, kompleks, sayılarda, İşlem


Konuyu Toplam 1 Üye okuyor. (0 Kayıtlı üye ve 1 Misafir)
 

Yetkileriniz
Konu Acma Yetkiniz Yok
Cevap Yazma Yetkiniz Yok
Eklenti Yükleme Yetkiniz Yok
Mesajınızı Değiştirme Yetkiniz Yok

BB code is Açık
Smileler Açık
[IMG] Kodları Açık
HTML-Kodu Kapalı
Trackbacks are Kapalı
Pingbacks are Açık
Refbacks are Açık


Benzer Konular
Konu Konuyu Başlatan Forum Cevaplar Son Mesaj
Sayılarda Mutlak Değer Liaaa Matematik 0 14 Mayıs 2012 02:17
Kompleks nedir? ve kompleks depresyona kadar gider mi? Ay Felsefe 0 11 Kasım 2011 11:18