- ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:fortran allocateを使って配列宣言を)
Fortran allocateを使った配列宣言の方法とエラー対処法
このQ&Aのポイント
- Fortranのallocateを使用して、2次元座標の配列変数aの宣言方法について教えてください。
- 具体的には、a(1,1)は10個の配列、a(1,2)は5個の配列、a(i,j)はn個の配列を持ちたい場合、どのように配列を定義すれば良いのか教えてください。
- また、配列の宣言を行う際に、重複した宣言によるエラーが発生してしまう場合の対処法も教えてください。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
> b=a(1,1,1)と書けるのでしょうか? まあ,そんなことはないということは変数の宣言の仕方からわかるだろう。 以下に使い方の例を示す。 !まずは追加の宣言 real :: b(1), c(4), d !そしてこんな感じ !代入 do j=1,nn do i=1,nn do k=1,n(i,j) ppa%pa(i,j)%a(k)=100*i+10*j+k end do end do end do !表示 !配列全部なら b=ppa%pa(1,1)%a print*,b !配列の一部だけでも ppa%pa(2,2)%a(3)=999 c=ppa%pa(2,2)%a print*,c !逆方向の代入も d=ppa%pa(3,3)%a(5) print*,d
その他の回答 (1)
- f272
- ベストアンサー率46% (8625/18445)
回答No.1
たとえばこんな感じ program test integer,parameter :: nn=3 type t1 real,pointer :: a(:) end type type t2 type(t1),pointer:: pa(:,:) end type type(t2) :: ppa integer n(nn,nn) integer i,j,k do j=1,nn do i=1,nn n(i,j)=i*j end do end do allocate(ppa%pa(nn,nn)) do j=1,nn do i=1,nn allocate(ppa%pa(i,j)%a(n(i,j))) end do end do do j=1,nn do i=1,nn print*,i,j,("*",k=1,size(ppa%pa(i,j)%a)) end do end do end program test
お礼
f272さん.早速の回答有難うございました. 教えて頂いたプログラムを実行し動作確認を致しました. 私の知識不足からポインタ,Type,"%"の使い方が理解できておらず上のプログラムが良くわかりません. たとえばi=1, j=1ではaは1個のデータを持てることになりますが,上のプログラムの場合それをどのようにして使用するのでしょうか? たとえば変数 bにa(1,1)のデータを渡したいとすると,簡単な考えでは b=a(1,1,1)になるかと思います. 教えて頂いたプログラムの場合も同様に b=a(1,1,1)と書けるのでしょうか? =============== 以前,f272さんにはfortranに関してご回答を頂きました. 今回もご親切に回答頂き有難うございます.