追加
- 動的確保(nrutil.h)で確保した配列をsubroutineに渡す場合、temporaryに作ったvector配列に代入して引き渡す必要がある模様
- ここでは、vectorで確保した1次元配列に2次元配列を放り込んで引き渡している。
- 2次元配列 matrix(x1,x2,y1,y2)で確保した配列を1次元配列vector(0,(y2-y1+1)*(x2-x1+1))で確保した配列に入れ込む際
- vectorA[(i-x1)+(j-y1-1)*(i-x1)]=matrixB[i][j] for i=x1,x2 and j=y1,y2
#include <stdio.h> #include "nrutil.h" int main (int argc, const char * argv[]) { int i,j,x1,y1,x2,y2,d1,d2; double **a,b,**c,*tmp; x1=1; x2=3; y1=1; y2=3; d1=x2-x1+1; d2=y2-y1+1; a=matrix(x1,x2,y1,y2); c=matrix(x1,x2,y1,y2); // tmp=matrix(0,d1-1,0,d2-1); tmp=vector(0,d1*d2-1); // insert code here... printf("-------------------\n"); printf("Hello, World! from C \n"); printf("set the variable b and matrix a[3][3]\n"); b=999.0; printf("real numnber b=%f\n",b); for(i=x1;i<=x2;i++){ for(j=y1;j<=y2;j++){ a[i][j]=(double)(i*j+j*j+j); printf("%d.%d: [%f]\t",i,j,a[i][j]); } printf("\n"); } printf("-------------------\n"); for(i=x1;i<=x2;i++){ for(j=y1;j<=y2;j++){ tmp[(i-x1)*d1+(j-y1)]=a[i][j]; // printf("%f\t",a[i][j]); } } // printf("\n"); /* for(i=0;i<=d1*d2-1;i++){ printf("%f ",tmp[i]); } printf("\n"); */ test_(); test2_(&d1,&d2,tmp,&b); /* for(i=x1;i<=x2;i++){ for(j=y1;j<=y2;j++){ a[i][j]=tmp[(i-x1)*d1+(j-y1)]; } } */ printf("-------------------\n"); printf("Convert from a[i][j] to c[j][i] \n",b); for(i=x1;i<=x2;i++){ for(j=y1;j<=y2;j++){ c[i][j]=a[j][i]; printf("%f\t",c[i][j]); } printf("\n"); } printf("-------------------\n"); for(i=x1;i<=x2;i++){ for(j=y1;j<=y2;j++){ tmp[(i-x1)*d1+(j-y1)]=c[i][j]; } } test_(); test2_(&d1,&d2,tmp,&b); /* for(i=x1;i<=x2;i++){ for(j=y1;j<=y2;j++){ c[i][j]=tmp[(i-x1)*d1+(j-y1)]; } } */ printf("-------------------\n"); return 0; }
subroutine test write(*,*)'Hello from Fortran' return end ! subroutine test2(d1,d2,aa,b) INTEGER d1,d2 DOUBLE PRECISION aa(d1,d2) DOUBLE PRECISION b ! INTEGER i,j write(*,*) 'b =',b ! write(*,*)'matrix' do 10 i=1,d1 write(*,*) (aa(i,j),j=1,d2) 10 continue return end
参考記事:http://macwiki.sourceforge.jp/wiki/index.php/Xcode
ニューメリカルレシピ・イン・シー 日本語版―C言語による数値計算のレシピ
- 作者: William H. Press,William T. Vetterling,Saul A. Teukolsky,Brian P. Flannery,丹慶勝市,佐藤俊郎,奥村晴彦,小林誠
- 出版社/メーカー: 技術評論社
- 発売日: 1993/06/01
- メディア: 単行本
- 購入: 2人 クリック: 102回
- この商品を含むブログ (33件) を見る