bestprogrammer
یک شنبه 07 مهر 1387, 10:06 صبح
سلام جمیعا خسته نباشید!
برنامه بایین برای محاسبه دترمینان ماتریس n*n با روش بازگشتی نوشته شده ولی درست جواب نمیده.الگوریتمش درسته ولی ظاهرا ایراد syntax داره.فکر میکنم ایراد در نحوه فراخوانی تابع باشه.کسی نمیدونه چه تغییری باید بهش بدم تا درست جواب بده؟
با تشکر
#include <stdlib.h>
#include <conio.h>
#include <stdio.h>
#include <math.h>
int **h(int **a,int k,int f);//تابع بدست اوردن ماتریس همسازه
int det(int **p,int n);
int **h(int **a,int k,int f)
{
int i,j,l,m;
int **z;
z=(int **)malloc(sizeof(int)*(k-1));
if (!z)
{
textcolor(4);
cprintf("no memory");
exit(0);
}
for (i=0;i<k-1;i++)
{
z[i]=(int*)malloc(sizeof(int)*(k-1));
if (!z[i])
{
textcolor(4);
cprintf("no memory");
exit(0);
}
}
for (i=1,l=0;i<k;i++,l++)
for(j=0,m=0;j<k;j++)
if(j!=f)
{
z[l][m]=a[i][j];
m++;
}
return(z);
}
int det(int **p,int n)
{
int s,q=0;
if (n==2)
s=(p[0][0]*p[1][1])-(p[0][1]*p[1][0]);
else
for(q=0;q<n;q++)
s=s+(p[0][q]*det(h(p,n,q),n-1)*pow(-1,q));
return(s);
}
int main()
{
int **p;
int n,i,j,b;
printf("enter matrix dimension:");
scanf("%d",&n);
p=(int **)malloc(sizeof(int)*n);
if (!p)
{
textcolor(4);
cprintf("no memory");
exit(0);
}
for(i=0;i<n;i++)
{
p[i]=(int*)malloc(sizeof(int)*n);
if(!p[i])
{
textcolor(4);
cprintf("no memory");
exit(0);
}
}
for(i=0;i<n;i++)
for(j=0;j<n;j++)
{
printf("Enter p[%d][%d]:",i,j);
scanf("%d",&p[i][j]);
}
b=det(p,n);
printf("%d",b);
getch();
return (0);
}
برنامه بایین برای محاسبه دترمینان ماتریس n*n با روش بازگشتی نوشته شده ولی درست جواب نمیده.الگوریتمش درسته ولی ظاهرا ایراد syntax داره.فکر میکنم ایراد در نحوه فراخوانی تابع باشه.کسی نمیدونه چه تغییری باید بهش بدم تا درست جواب بده؟
با تشکر
#include <stdlib.h>
#include <conio.h>
#include <stdio.h>
#include <math.h>
int **h(int **a,int k,int f);//تابع بدست اوردن ماتریس همسازه
int det(int **p,int n);
int **h(int **a,int k,int f)
{
int i,j,l,m;
int **z;
z=(int **)malloc(sizeof(int)*(k-1));
if (!z)
{
textcolor(4);
cprintf("no memory");
exit(0);
}
for (i=0;i<k-1;i++)
{
z[i]=(int*)malloc(sizeof(int)*(k-1));
if (!z[i])
{
textcolor(4);
cprintf("no memory");
exit(0);
}
}
for (i=1,l=0;i<k;i++,l++)
for(j=0,m=0;j<k;j++)
if(j!=f)
{
z[l][m]=a[i][j];
m++;
}
return(z);
}
int det(int **p,int n)
{
int s,q=0;
if (n==2)
s=(p[0][0]*p[1][1])-(p[0][1]*p[1][0]);
else
for(q=0;q<n;q++)
s=s+(p[0][q]*det(h(p,n,q),n-1)*pow(-1,q));
return(s);
}
int main()
{
int **p;
int n,i,j,b;
printf("enter matrix dimension:");
scanf("%d",&n);
p=(int **)malloc(sizeof(int)*n);
if (!p)
{
textcolor(4);
cprintf("no memory");
exit(0);
}
for(i=0;i<n;i++)
{
p[i]=(int*)malloc(sizeof(int)*n);
if(!p[i])
{
textcolor(4);
cprintf("no memory");
exit(0);
}
}
for(i=0;i<n;i++)
for(j=0;j<n;j++)
{
printf("Enter p[%d][%d]:",i,j);
scanf("%d",&p[i][j]);
}
b=det(p,n);
printf("%d",b);
getch();
return (0);
}