都道府県穴埋めゲーム

今変数 aについて考えています.aは i,jの2次元の座標におけるデータです.
a(1,1)は10個配列を持ちたい
a(1,2)は5配列を持ちたい
a(i,j)はn個配列を持ちたい
このような場合どのように配列を定義すれば良いのでしょうか?

例えば 2次元の大きさが3x3の場合で,それぞれの位置に配列したいデータ個数をnとします.
nには既に個数が定義されているとします.このとき aの配列は nを使ってどのように定義すれば良いのでしょうか?

integer n(3,3)
integer i,j
real, allocatable :: a(:,:,:)

do j=1,3
do i=1,3
n(i,j)=i*j
end do
end do

do j=1,3
do i=1,3
allocate (a(n(i,j),3,3))
end do
end do

では aの宣言が重複するためエラーになってします.

何方か良い方法を教えて下さい.

A 回答 (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
    • good
    • 0

たとえばこんな感じ


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
    • good
    • 0
この回答へのお礼

f272さん.早速の回答有難うございました.
教えて頂いたプログラムを実行し動作確認を致しました.

私の知識不足からポインタ,Type,"%"の使い方が理解できておらず上のプログラムが良くわかりません.
たとえばi=1, j=1ではaは1個のデータを持てることになりますが,上のプログラムの場合それをどのようにして使用するのでしょうか?

たとえば変数 bにa(1,1)のデータを渡したいとすると,簡単な考えでは
b=a(1,1,1)になるかと思います.
教えて頂いたプログラムの場合も同様に
b=a(1,1,1)と書けるのでしょうか?

===============
以前,f272さんにはfortranに関してご回答を頂きました.
今回もご親切に回答頂き有難うございます.

お礼日時:2012/09/21 11:37

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!