PDA

View Full Version : سوال: ایراد برنامه چیست؟



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);
}

hamed_gibago
یک شنبه 07 مهر 1387, 14:43 عصر
سلام خوب اگر ایراد syntax می ده در کجای برنامه هست ؟
و آیا این ایرادو در هنگام کامپایل می ده یا اینکه در هنگام اجرای برنامه

bestprogrammer
یک شنبه 07 مهر 1387, 15:34 عصر
برنامه اجرا میده ولی اجرای درست نمیده با trace کردنش حدس میزنم که تابع بدست آاوردن ماتریس همسازه تو برنامه درست جواب نمیده ولی ایرادش الگوریتمی نیست چون خود تابع را وقتی بصورت یک برنامه جدا نوشتم درست جواب داد.(ضمنا برنامه به زبان c++ نوشته شده)

#include <conio.h>
#include <stdio.h>
int main()
{
clrscr();
int a[3][3];
int z[2][2];
int i,j,l,m,f;
for (i=0;i<3;i++)
for (j=0;j<3;j++) {
printf("enter a[%d][%d]:",i,j);
scanf("%d",&a[i][j]);
}
printf("enter column:");
scanf("%d",&f);
for (i=1,l=0;i<3;i++,l++)
for(j=0,m=0;j<3;j++)
if(j!=f)
{
z[l][m]=a[i][j];
m++;
}
for (i=0;i<2;i++)
{
for (j=0;j<2;j++)
printf("%d",z[i][j]);
printf("\n");
}
getch();
return(0);
}