İçindekilerGirişİndex
YukarıİlkÖncekiSonrakiSon
Geriİleri
Yazdır

C++ ile Determinant Hesaplama Programı

Bu proje, verilen bir matrisin determinantini hesaplamak uzere olusturulmus bir programdir. C++ dilinin objeye dayali program özelligine dayanilarak dizayn edilmis ve MS-DOS cercevesinde Turbo C++ ile yazilmistir

det.cppİndir Göster Gizle Kopar Satır Gizle Satır Göster
  1 <html>#include <iostream.h>
  2 #include <stdlib.h>
  3 #include <math.h>
  4 #include <conio.h>
  5 #include <dos.h>
  6 class SMatrix {
  7   int **matrix;
  8   int   Dim;
  9 public:
 10   SMatrix (int);
 11   SMatrix New_Matrix (int,int);
 12   void SetValues();
 13   int Determinant ();
 14 };
 15 SMatrix::SMatrix (int row) {
 16   int  *t;
 17   int   i;
 18   matrix=(int **) malloc (row*sizeof(int *));
 19   t=(int  *) calloc (row*row,sizeof(int));
 20   if ((t==NULL) || (matrix==NULL)) {
 21     cout<<"Memory Allocation Error"<<endl;
 22     exit(1);
 23     }
 24   for (i=0 ; i<row ; i++)
 25     matrix[i]=&(t[i*row]);
 26   Dim=row;
 27 }
 28 void SMatrix::SetValues(){
 29   int i,j,yCoord;
 30   yCoord=wherey();
 31   for (i=0 ; i<Dim ; i++)  {
 32     for (j=0 ; j<Dim ; j++) {
 33       gotoxy(j*4+2,yCoord);
 34       cin>>matrix[i][j];
 35         }
 36     yCoord=yCoord+1;
 37     }
 38 }
 39 SMatrix SMatrix::New_Matrix(int rowId,int colId) {
 40   int   i,j;
 41   SMatrix New_M(Dim-1);
 42   for (i=0 ; i<rowId ; i++) {
 43     for (j=0 ; j<colId ;j++)
 44       New_M.matrix[i][j]=matrix[i][j];
 45     for (j=colId+1 ; j<Dim ; j++)
 46       New_M.matrix[i][j-1]=matrix[i][j];
 47     }
 48   for (i=rowId+1 ; i<Dim ; i++) {
 49     for (j=0 ; j<colId ;j++)
 50       New_M.matrix[i-1][j]=matrix[i][j];
 51     for (j=colId+1 ; j<Dim ; j++)
 52       New_M.matrix[i-1][j-1]=matrix[i][j];
 53     }
 54   return(New_M);
 55 }
 56 int SMatrix::Determinant() {
 57   int det=0;
 58   int i;
 59   if (Dim<=3) {
 60    if (Dim==3) {
 61     for (i=0 ; i<Dim ; i++)
 62      det=
 63       det+(matrix[i][0]*matrix[(i+1)%3][1]*matrix[(i+2)%3][2])
 64       -(matrix[i][2]*matrix[(i+1)%3][1]*matrix[(i+2)%3][0]);
 65     }
 66    
 67     if (Dim==2)
 68     det=matrix[0][0]*matrix[1][1]-matrix[0][1]*matrix[1][0];
 69    if (Dim==1)
 70     det=matrix[0][0];
 71    }
 72   
 73    else {
 74    for (i=0 ; i<Dim ; i++) {
 75     SMatrix NewMatrix(Dim-1);
 76     NewMatrix=New_Matrix(0,i);
 77     det=det+matrix[0][i]*pow(-1,i)*NewMatrix.Determinant();
 78           }
 79    }
 80   return(det);
 81 }
 82 main() {
 83   int   row,determ,yCoord;
 84   clrscr();
 85   cout<<"Enter the dimension of the matrix (positive integer):";
 86   cin>>row;
 87   SMatrix Matrix(row);
 88   cout<<"Enter the elements one by one"<<endl;
 89   cout<<"and press 'return' every time."<<endl;
 90   Matrix.SetValues();
 91   cout<<"The determinant of "<<row<<"x"<<row
 92         <<" matrix is ...";
 93   delay(2000);
 94   determ=Matrix.Determinant();
 95   yCoord=wherey();
 96   gotoxy(1,yCoord);
 97   cout<<"The determinant of "<<row<<"x"<<row
 98        <<" matrix is : "<<determ;
 99 }

Ilk olarak, matris objesi C++ dilinin "class" ozelligi kullanilarak olusturulmustur. Iki ozel alana ve "main" kisminda rahatca erisilebilen dort genel fonksiyona sahiptir.

class SMatrix { 
    int **matrix; 
    int Dim; 
public: 
    SMatrix (int); 
    SMatrix NewMatrix (int,int); 
    void SetValues(); 
    int Determinant (); 
}; 

"matrix" iki boyutlu dizinin dinamik olarak tutulmasi icin kullanilir.

"Dim" matrisin boyutunu tutmak icin kullanilir.

"Smatrix" class'in yaraticisidir. Kullanicinin girdigi tamsayi ile çagrilir ve bu tamsayi ile istenilen boyuttauygun kare matrisi yaratir

"NewMatrix" orjinal matristen bir sira ve bir kolonun silinmesi ile elde edilen yeni matrisin yaratilmasinisaglayan fonksiyondur. Bu fonksiyon, "Determinant" fonksiyonu tarafindan cagrilir.

"SetValues" kullanicidan alinan matrisin degerini koymak icin kullanilan fonksiyondur. Bilindigi gibi, class alanina direkt olarak ulasilmasini istemedigimiz için, matrisin degerini koymayi bu fonksiyon ilegerceklestirmekteyiz. "SetValues" ," main" fonksiyonu tarafindan cagrilir.

"Determinant" icice cagrilma tarzinda verilen matrisin determinantini hesaplayan fonksiyondur.Icice gecisin taban sarti 3x3 matrisidir. Herhangibir nxn matrisi icin; determinant, "a[i][j]" lerin spesifik sira veya kolonlarin elementleri oldugu zamanki "a[i][j]*DET(C)" lerin toplami olarak düsünülür ve DET(C), bu elementin kofaktor matrisinin elementidir. Bu yol ile, matris gittikce kücülür ve 3x3 matrisine yaklasir. Sonra ise, 3x3 matrisinin determinanti normal yol ile hesaplanir ve icice gecis sona erer.

Kullanici programin adini DOS ekraninda girdigi zaman, program uygulanmaya baslar ve kullaniciya ilk olarak kare matrisin boyutunu girmesini soyler. Daha sonra program matrisi yaratir ve kullaniciya elemanlari tek tek ve her defasinda "Return" tusuna basarak girmesini soyler. Kullanici butun elemanlari girdigi zaman, program verilen matrisin determinantini hesaplar ve sonucu ekranda gosterir.Boylece icice gecis sona erer ve tekrar DOS ekranina geri donulur.

Bu yazı İTU Bilişim Enstitüsünden alınmıştır. www.be.itu.edu.tr

Dosya Listesi

İçindekilerGirişİndex
YukarıİlkÖncekiSonrakiSon
Geriİleri
Yazdır