دترمینان ماتریس n*n - هفت خط کد انجمن پرسش و پاسخ برنامه نویسی

دترمینان ماتریس n*n

0 امتیاز

سلام

من یه کد نوشتم برای حساب کردن  دترمینان ماتریس n*n میخواستم اگه میشه خطاهای کد من رو برام بگین

برنامم نمیدونم چرا جواب نمیده ...

#include<iostream>
using namespace std ;
int j,i,r,t;
void func( int a[][100], int c[][100],int m , int n, int dim )
{
	int r=0 , t=0 ;
	for (int i=0 ; i<dim ; i++ )
	{
		if ( i==m )
			continue;
		else 
		{
			for (int j=0 ; j<dim ; j++ )
			{
				if ( j==n)
					continue;
				else
				{
					c[r][t] = a[i][j] ;
					t++;
				}
			}

		}
		r++;
		t=0;
	}
}
int Deter( int a[100][100] , int dim )
{
	int y;
	int c[100][100];
	for (int i=0 ; i<dim ; i++ )
	{
		for( int j=0 ; j<dim ; j++ )
		{
		func(a,c,i,j,dim);
		y = pow ((-1),i+j) * a[i][j] * Deter( c, dim-1 ) ;
		}
		return y;
	}
		
}

int main()
{
	int a[100][100];
	int s;
	cout << " PLEASE ENTER MATRIX DIMANTION : "<<endl;
	cin >> s ;
	for (int i = 0; i <s ; i++ )
	{
		for (int j = 0 ; j< s ; j++ )
		{
			cout<<"ENTER ELEMAN : ";
			cin >> a[i][j] ;
		}
	}
	int w;
	w = Deter(a,s);
	cout << w << endl;
	return 0;
}

 

سوال شده آذر 13, 1392  بوسیله ی Azar (امتیاز 628)   29 42 61
دوباره تگ گذاری شد بهمن 22, 1392 بوسیله ی BlueBlade
چند تا نکته :
به جای به کار بردن عدد جادویی 100 توی کد یک مقدار ثابت بسازید و از اون استفاده کنید const int SIZE=100
نیازی هم به تعریف int j,i,r,t بصورت گلوبال نیست تو کد شما !
اسم گذاری متغیر ها  و توابع هم جالب نیست .
باید به صورت گلوبال بنویسم چون احتیاجشون دارم
چرا جالب نیست ؟؟
اولا این که هر چیزی رو که نیاز داشته باشی دلیل نمیشه global تعریفی کنی .
نیاز نیست چون i j r t همشون داخل بدنه ی توابع و حلقه ها تعریف شدن
اسم گذاری جالب نیست چون کدت خوانا نیست شما فرض کن این کدو من بهت دادم از این خط چی می تونی بفهمی ؟ !( func(a,c,i,j,dim
یا مثلا از این(  y = pow ((-1),i+j) * a[i][j] * Deter( c, dim-1
همیشه سعی کن جوری بنویسی که راحت بفهمی هر خط کارش چیه

1 پاسخ

+1 امتیاز
 
بهترین پاسخ

تابع func و Deter رو بردارید جاش تابع زیر را بزارید.

 


int determinant(int b[100][100],int dim)   

{
 int i,j,sum = 0,c[100][100];
 if(dim==2)
  {                            
    sum = b[0][0]*b[1][1] - b[0][1]*b[1][0];
    return sum;
  }
 for(int p=0;p<dim;p++)
 {
  int h = 0,k = 0;
  for(i=1;i<dim;i++)
  {
    for( j=0;j<dim;j++)
    {
     if(j==p)
      continue;
     c[h][k] = b[i][j];
     k++;
     if(k == dim-1)
      {
         h++;
         k = 0;
      }

    }
  }

  sum = sum + b[0][p]*pow(-1,p)*determinant(c,dim-1);
 }
 return sum;
}
پاسخ داده شده آذر 13, 1392 بوسیله ی مصطفی ساتکی (امتیاز 21,998)   24 34 75
انتخاب شد آذر 17, 1392 بوسیله ی BlueBlade
...