Fortran Coder

查看: 238|回复: 5

[求助] 新人代码求大佬指正Unexpected data declaration statement at

[复制链接]

3

帖子

1

主题

0

精华

新人

F 币
30 元
贡献
15 点
发表于 2018-9-19 20:21:19 | 显示全部楼层 |阅读模式
刚刚学写fortran,读取一个三维周期图形的坐标后,以每一个坐标为原点,做周期小球,若小球包裹了4个点(不含小球中心点),则输出小球及四个点的坐标 代码如下,不知为什么一直报错,用的是linux的f90

[Fortran] 纯文本查看 复制代码
program 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




XYZ1.txt

64.5 KB, 下载次数: 0

回复

使用道具 举报

1327

帖子

12

主题

5

精华

论坛跑堂

Fcode跑堂伙计

F 币
236 元
贡献
270 点

新人勋章贡献勋章管理勋章帅哥勋章爱心勋章规矩勋章元老勋章水王勋章

发表于 2018-9-19 20:31:02 | 显示全部楼层
把所有定义语句放到前面即可。

1327

帖子

12

主题

5

精华

论坛跑堂

Fcode跑堂伙计

F 币
236 元
贡献
270 点

新人勋章贡献勋章管理勋章帅哥勋章爱心勋章规矩勋章元老勋章水王勋章

发表于 2018-9-19 20:33:55 | 显示全部楼层
忠告
1. 排版很重要,一定要做。
2. 对于代码中大量出现的同一个常数,可以定义为 Parameter,减少今后的修改量。比如你要把 2250 改成 2230,会很麻烦。

如下
[Fortran] 纯文本查看 复制代码
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

3

帖子

1

主题

0

精华

新人

F 币
30 元
贡献
15 点
 楼主| 发表于 2018-9-19 20:42:19 | 显示全部楼层
fcode 发表于 2018-9-19 20:31
把所有定义语句放到前面即可。

谢谢大佬 是我学术不精 刚开始学 以为没用到的定义可以往后放  一个小问题困扰了一天,一直在网上搜索问题盲目学,终于找到组织了 决定长期混论坛了

3

帖子

1

主题

0

精华

新人

F 币
30 元
贡献
15 点
 楼主| 发表于 2018-9-19 20:51:32 | 显示全部楼层
fcode 发表于 2018-9-19 20:31
把所有定义语句放到前面即可。

谢谢, 我会改正的.  同时这里我有一个问题想请教下 师兄说这里建议我用动态数组来赋值,增加程序的适用性,但导师说动态数组会增加程序负荷,这里静态数组就行,这段程序只是我要计算东西的一部分,还没完全写完,想知道如果改成动态数组会怎样

1327

帖子

12

主题

5

精华

论坛跑堂

Fcode跑堂伙计

F 币
236 元
贡献
270 点

新人勋章贡献勋章管理勋章帅哥勋章爱心勋章规矩勋章元老勋章水王勋章

发表于 2018-9-19 21:48:06 | 显示全部楼层
程序负荷这个问题可以忽略不计。
您需要登录后才可以回帖 登录 | 极速注册

本版积分规则

QQ|捐赠本站|Archiver|关于我们 About Us|群聊|Fcode

GMT+8, 2018-12-17 10:39

Powered by Discuz! X3.2

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表