次の簡単なプログラムを実行したとき
program test
! integer m,n,r,i
double precision x(2),y(3),z(4)
x=(/2.0,1.0/)
y=(/1.0,2.0,1.0/)
call polymul(x,2,y,3,z,4)
print *,z
end
subroutine polymul(x,m,y,n,z,r)
! polynominal multipy
integer i,j,k
do i=1,r
z(i)=0.0
end do
do i=1,m
do j=1,n
k=i+j-1
z(k)=z(k)+x(i)*y(j)
end do
end do
end
それは示した
エラー:分類できないステートメント
サブルーチン内のx
、y
、およびz
が何であるかを宣言していません。 Fortranは、これらの変数が関数(定義されていない)なのか配列なのかを知りません。修正は簡単です。サブルーチンで配列を明示的に宣言します。
subroutine polymul(x, m, y, n, z, r)
implicit none
integer m, n, r
double precision x(m), y(n), z(r)
integer i, j, k
do i=1,r
z(i)=0.0
enddo
do i=1,m
do j=1,n
k=i+j-1
z(k)=z(k)+x(i)*y(j)
enddo
enddo
end subroutine
Ifortが(変数z)この名前が配列または関数として宣言されていないことを要求するのと同じように、uは変数x、y、zをサブルーチンpolymulの配列として宣言する必要があります。