[問題]C 程式除錯
#include <stdio.h>
#include<stdlib.h>
void dumpmatrix(int n,int*p){
int i,j;
for(j=0;j<n;j++){
for(i=0;i<n;i++) {
printf("a[%d,%d]=%d,",j,i,*p++);
}
printf("\n");
}
}
int*makematrix(int n,int*m,int col,int*newm){
int i,j;
int*p=newm;
for(j=n;j<n*n;j+=n) {
for(i=0;i<n;++i) {
if(i!=col) *p++=*(m+j+i);
}
}
printf("previous matrix\n");
dumpmatrix(n,m);
printf("cofactor by %d\n",col);
dumpmatrix(n-1,newm);
return newm;
dumpmatrix(n-1,newm);
return newm;
}
int det(int n,int*m) {
int i,mydet;
int*newm;
if(n==2) return *m * *(m+3) - *(m+1) * *(m+2);
for(mydet=i=0;i<n;++i) {
if(*(m+i)!=0){
newm=(int*)malloc(sizeof(int)*(n-1)*(n-1));
mydet+=(i&1?-1:1)* *(m+i) * det(n-1,makematrix(n,m,i,newm));
free(newm);
}
}
return mydet;
}
int determinant(int n,int*m){
int ntotal=n*n;
int value,sum;
int i,j,k;
for(sum=0,i=0;i<ntotal;i+=n) {
printf("det %d\n",i);
value=1;
for(j=0,k=i;j<n;++j,k=(k+n+1)%ntotal) {
value=1;
for(j=0,k=i;j<n;++j,k=(k+n+1)%ntotal) {
value*=*(m+k);
printf("*m[%d]=%d, value=%d\n",k,m[k], value);
}
sum+=value;
}
for(i=n-1;i<ntotal;i+=n) {
printf("det %d\n",i);
value=1;
for(j=0,k=i;j<n;++j,k=(k+2)%ntotal) {
value*=*(m+k);
printf("*m[%d]=%d, value=%d\n",k,m[k], value);
}
sum-=value;
}
if(sum<0)sum= -sum;
return sum;
}
main(int argc,char*argv[])
{
int x[100];
int i;
for(i=2;i<argc;++i)x[i-2]=atoi(argv[i]);
dumpmatrix(atoi(argv[1]),x);
printf("det=%d\n",det(atoi(argv[1]),x));
}
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 114.42.49.245
→
05/29 14:25, , 1F
05/29 14:25, 1F
→
05/29 14:57, , 2F
05/29 14:57, 2F
→
05/29 15:05, , 3F
05/29 15:05, 3F
推
05/29 15:51, , 4F
05/29 15:51, 4F
→
05/29 15:51, , 5F
05/29 15:51, 5F
→
05/29 15:53, , 6F
05/29 15:53, 6F
→
05/29 15:55, , 7F
05/29 15:55, 7F
推
05/29 16:24, , 8F
05/29 16:24, 8F
推
05/29 16:25, , 9F
05/29 16:25, 9F
推
05/29 16:27, , 10F
05/29 16:27, 10F
→
05/29 17:31, , 11F
05/29 17:31, 11F
→
05/29 18:54, , 12F
05/29 18:54, 12F
推
05/29 21:18, , 13F
05/29 21:18, 13F
推
06/03 22:34, , 14F
06/03 22:34, 14F