新人代码求大佬指正Unexpected data declaration statement at
刚刚学写fortran,读取一个三维周期图形的坐标后,以每一个坐标为原点,做周期小球,若小球包裹了4个点(不含小球中心点),则输出小球及四个点的坐标 代码如下,不知为什么一直报错,用的是linux的f90program up
implicit none
!read the file......................................
real :: x(2250),y(2250),z(2250)
integer :: i
open(1,file='XYZ1.txt')
loopi: do i = 1,2250
read(1,*) x(i),y(i),z(i)
end do loopi
close(1)
!........draw a ball and get 4 points..............................................
integer :: a(4)
integer :: j
integer :: n
integer :: k
integer :: l
integer :: m(2250,4)
loopj: do j = 1,2250
k = 0
loopn: do n = 1,2250
if (j == n) then
cycle
end if
if ((x(n)-x(j))**2+(y(n)-y(j))**2+(z(n)-z(j))**2 < 1.8**2) then
k = k + 1
a(k) = n
if (k == 4) then
loopl: do l = 1,4
m(j,l) = a(l)
print *,m(j,l)
end do loopl
end if
end if
end do loopn
end do loopj
end program up
报错如下:
integer :: a(4)
1
Error: Unexpected data declaration statement at (1)
5.f90:15.12:
integer :: j
1
Error: Unexpected data declaration statement at (1)
5.f90:16.12:
integer :: n
1
Error: Unexpected data declaration statement at (1)
5.f90:17.12:
integer :: k
1
Error: Unexpected data declaration statement at (1)
5.f90:18.12:
integer :: l
1
Error: Unexpected data declaration statement at (1)
5.f90:19.20:
integer :: m(2250,4)
1
Error: Unexpected data declaration statement at (1)
5.f90:28.8:
a(k) = n
1
Error: Unexpected STATEMENT FUNCTION statement at (1)
5.f90:31.13:
m(j,l) = a(l)
1
Error: Unexpected STATEMENT FUNCTION statement at (1)
5.f90:20.4:
do j = 1,2250
1
Error: Symbol 'j' at (1) has no IMPLICIT type
5.f90:21.1:
k = 0
1
Error: Symbol 'k' at (1) has no IMPLICIT type
5.f90:30.4:
do l = 1,4
1
Error: Symbol 'l' at (1) has no IMPLICIT type
5.f90:22.4:
do n = 1,2250
1
Error: Symbol 'n' at (1) has no IMPLICIT type
把所有定义语句放到前面即可。 忠告
1. 排版很重要,一定要做。
2. 对于代码中大量出现的同一个常数,可以定义为 Parameter,减少今后的修改量。比如你要把 2250 改成 2230,会很麻烦。
如下
program up
implicit none
Integer , parameter :: N = 2250 , S = 4
real :: x(N),y(N),z(N)
integer :: i , j , k , l
integer :: a(S)
integer :: m(N,S)
!read the file......................................
open(1,file='XYZ1.txt')
do i = 1,N
read(1,*) x(i),y(i),z(i)
end do
close(1)
!........draw a ball and get 4 points..............................................
do j = 1,N
k = 0
do i = 1,N
if (j == i) cycle
if ((x(i)-x(j))**2+(y(i)-y(j))**2+(z(i)-z(j))**2 < 1.8**2) then
k = k + 1
a(k) = i
if (k == 4) then
do l = 1,S
m(j,l) = a(l)
print *,m(j,l)
end do
end if
end if
end do
end do
end program up fcode 发表于 2018-9-19 20:31
把所有定义语句放到前面即可。
谢谢大佬 是我学术不精 刚开始学 以为没用到的定义可以往后放一个小问题困扰了一天:'(,一直在网上搜索问题盲目学,终于找到组织了 决定长期混论坛了:-P fcode 发表于 2018-9-19 20:31
把所有定义语句放到前面即可。
谢谢, 我会改正的.同时这里我有一个问题想请教下 师兄说这里建议我用动态数组来赋值,增加程序的适用性,但导师说动态数组会增加程序负荷,这里静态数组就行,这段程序只是我要计算东西的一部分,还没完全写完,想知道如果改成动态数组会怎样 程序负荷这个问题可以忽略不计。
页:
[1]