C++ ile Karmaşık Sayılarda Dört İşlem

Karmaşık sayılarla dört işlem, karmaşık gibi görünse de normal yapılan dört işlemden bir farkı yoktur. İşin matematiksel kısmını kısaca açıkladıktan sonra kod kısmına geçeceğim.

Karmaşık sayılarda toplama ve çıkarma işlemlerinde hatırlanacağı üzere sanal kısımla sanal kısım, reel kısımla reel kısım toplanır ya da çıkarılır. Karmaşık sayılarda bölme ve çarpma işlemlerinde ise durum biraz farklıdır. Çarpma işleminde, birinci sayının reel kısmı, ikinci sayının hem reel hem sanal kısmıyla çarpılır. Ardından da yine birinci sayının sanal kısmı ikinci sayının reel ve sanal kısmıyla çarpılır. Çarpımların işaretlerine göre toplama ya da çıkarma işlemleri yapılır. Bölme işleminde ise yine çarpmadan yararlanılır. İki sayı da paydanın eşleniği ile çarpılır. Böylece payda karmaşık sayıdan kurtulur. Pay kısmındaki işlem ise  standart çarpma işlemidir.

Kod kısmına gelindiğinde ise yapılacak işlem yine bilinen toplama, çıkarma ve çarpma işlemleridir. Kod bloğundaki yorum satırlarında kodu açıklamaya çalıştım. Bu yüzden burada açıklamaya gerek duymuyorum.

[cc lang='cpp' ]
#include "iostream"
using namespace std;

//değişkenlerin ve fonksiyonların tutulduğu class
class karmasik
{

	private:
		double reel;
		double sanal;

	public:
		karmasik(){}
		karmasik(double x,double y);
		karmasik operator+(karmasik ikinciSayi);
		karmasik operator-(karmasik ikinciSayi);
		karmasik operator*(karmasik ikinciSayi);
		karmasik operator/(karmasik ikinciSayi);
		void ekranaYaz();
}; 

// reel ve sanal kısımlar atanıyor
karmasik::karmasik(double x, double y)
{
    reel=x;
    sanal=y;
}

//Toplama işlemi
karmasik karmasik::operator+(karmasik ikinciSayi)
{
	karmasik toplam;
    toplam.reel=reel+ikinciSayi.reel;
    toplam.sanal=sanal+ikinciSayi.sanal;

    return toplam;
} 

//Çıkarma işlemi
karmasik karmasik::operator-(karmasik ikinciSayi)
{
    karmasik fark;
    fark.reel=reel-ikinciSayi.reel;
    fark.sanal=sanal-ikinciSayi.sanal;

    return fark;
} 

//Çarpma işlemi
karmasik karmasik::operator*(karmasik ikinciSayi)
{
    karmasik carpim;
    carpim.reel=(reel*ikinciSayi.reel)-(sanal*ikinciSayi.sanal);
    carpim.sanal=(reel*ikinciSayi.sanal)+(sanal*ikinciSayi.reel);
    return carpim;
} 

//Bölme işlemi
karmasik karmasik::operator/(karmasik ikinciSayi)
{
    karmasik bolum;
    karmasik pay;
    float payda; 

    pay.reel=(reel*ikinciSayi.reel)+(sanal*ikinciSayi.sanal); //reel 
    pay.sanal=(reel*(-ikinciSayi.sanal))+(sanal*ikinciSayi.reel); 
    payda=(ikinciSayi.reel*ikinciSayi.reel)+(ikinciSayi.sanal*ikinciSayi.sanal);

    bolum.reel=pay.reel/payda;
    bolum.sanal=pay.sanal/payda;

    return bolum;
} 

// Ekrana yazma fonksiyonu. Gereksiz sayılardan kurtarır. 
// Yani if blokları içindeki kontroller, 0 + 2i gibi bir sonucu 2i olarak yazmayı sağlar.
void karmasik::ekranaYaz()
{
    if(sanal>0)
	{
        if(reel>0) 
		{
            cout<0)
		{
            cout<>reel1;
    cout<<"Birinci Karmasik Sayinin Sanal Kismini Giriniz: ";
    cin>>sanal1;
    cout<<"Ikinci Karmasik Sayinin Reel Kismini Giriniz: ";
    cin>>reel2;
    cout<<"Ikinci Karmasik Sayinin Sanal Kismini Giriniz: ";
    cin>>sanal2; 

	//karmasik sınıfından nesneler oluşturulup işleme tabi tutuluyor 
    karmasik sayi1(reel1,sanal1);
    karmasik sayi2(reel2,sanal2);
    karmasik toplam, fark, carpim, bolum;
    toplam = sayi1+sayi2;
    fark = sayi1-sayi2;
    carpim = sayi1*sayi2;
    bolum = sayi1/sayi2; 

	//ekrana sonuçlar yazılıyor	
    cout<<"\nGirilen Karmasik Sayilarin Toplami: ";
    toplam.ekranaYaz();
    cout<<"\nGirilen Karmasik Sayilarin Farki: ";
    fark.ekranaYaz();
    cout<<"\nGirilen Karmasik Sayilarin Carpimi: ";
    carpim.ekranaYaz();
    cout<<"\nGirilen Karmasik Sayilarin Bolumu: ";
    bolum.ekranaYaz();

	//Sonucu ekranda görebilmek(console u duraklatmak için) için bir input bekleniyor
	int a;
	cin>>a;
	//////

    return 0;
}

[/cc]

C++ ile karmaşık sayılarda dört işlem programının kodları bu şekilde. Değişken isimleri ile zaten neyin ne olduğu açıkça ortada. Yorum satırları da anlaşılmada yardımcı olacaktır.

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir