找回密码
 注册
Simdroid-非首页
查看: 344|回复: 12

[3. Fortran] 【求助】FORTRAN中的动态数组

[复制链接]
发表于 2004-5-5 18:34:08 | 显示全部楼层 |阅读模式 来自 浙江宁波
请问斑竹
在POWER STATION中
开动态数组,应该怎么开?
我查了好多书
都没有具体地说明
  
斑竹时刻可以给出一段源代码呢?
发表于 2004-5-5 21:37:40 | 显示全部楼层 来自 美国

回复: 【求助】FORTRAN中的动态数组

Simdroid开发平台
  1. REAL (8), ALLOCATABLE :: A(:,:)
  2. ALLOCATE(A(10,20))
  3. ....
  4. DEALLOCATE(A)
复制代码

  
建议发贴之前先看一看精华区,再就是多使用论坛的搜索功能。
 楼主| 发表于 2004-5-7 18:37:17 | 显示全部楼层 来自 浙江宁波

回复: 【求助】FORTRAN中的动态数组

为什么,我编的这段代码,运算到
I=69
J=99
的时候,程序出错,
自动跳出
  
代码如下:
program a1
REAL (8), ALLOCATABLE :: A(:,  
ALLOCATE(A(1:n,1:m))  
print *,"please input n?"
read(*,*)n
print *,"please input m?"
read(*,*)m
do i=1,n
do j=1,m
A=i/j
print *,i,j,A(i,j)
end do
end do
end
发表于 2004-5-7 21:44:00 | 显示全部楼层 来自 美国

回复: 【求助】FORTRAN中的动态数组

change this piece
  1. ALLOCATE(A(1:n,1:m))  
  2. print *,"please input n?"  
  3. read(*,*)n  
  4. print *,"please input m?"  
  5. read(*,*)m
复制代码

to  
  1. print *,"please input n?"  
  2. read(*,*)n  
  3. print *,"please input m?"  
  4. read(*,*)m  
  5. ALLOCATE(A(1:n,1:m))
复制代码

  
you will know why;)

评分

1

查看全部评分

 楼主| 发表于 2004-5-9 19:13:22 | 显示全部楼层 来自 浙江宁波

回复: 【求助】FORTRAN中的动态数组

为什么,我编译的时候,
老是说我的程序错误呢?
请管理员指点一二
谢谢
  
program gdb
  
REAL (5), ALLOCATABLE :: A(:,  
   
print *,"please input n?"
read(*,*)n
  
print *,"please input m?"
read(*,*)m
  
ALLOCATE(A(1:n,1:m))  
  
do i=1,n
do j=1,m
  
A=i/j
  
print *,i,j,A(i,j)
  
end do
end do
  
end
发表于 2004-5-9 22:54:40 | 显示全部楼层 来自 美国

回复: 【求助】FORTRAN中的动态数组

如果有编译错误最好看看错误信息,否则你永远不可能取得进步。
我编译了一下,错误出现在下面这行
REAL (5), ALLOCATABLE :: A(:,
错误指出(5)用的不正确,查一下real的kind类型,可以用4或8,改正后编译就没有错误了。但是这不能说程序就没有问题了,继续努力。
 楼主| 发表于 2004-5-10 18:52:33 | 显示全部楼层 来自 浙江宁波

回复: 【求助】FORTRAN中的动态数组

谢谢没有问题了
  
但是,使用以上这段代码的时候,
在编译的时候,有时候会说
  
ALLOCATABLE(A(1:N,1:M))
  
这句有错误,
好象是说什么在函数和(之间,还应该有什么东西
  
不知道是什么原因
发表于 2004-5-10 20:29:56 | 显示全部楼层 来自 武汉大学

回复: 【求助】FORTRAN中的动态数组

我调试通过了
我用的是CVF6.6B
好像你给的程序中一个地方是中文输入的
注意一下
只是你的矩阵中是整数的除法,所以结果很怪的
好运
^_^
发表于 2004-5-10 21:47:43 | 显示全部楼层 来自 美国

回复: 【求助】FORTRAN中的动态数组

你原来的程序里写的是ALLOCATE(A(1:n,1:m))  
现在你又说ALLOCATABLE(A(1:N,1:M)) 有问题,不知从哪里来的,不明白什么意思?
就现在这句来说,()是中文的(),不能用!
  
附带指出其他错误:
1. 用了allocate就必须用deallocate,否则会有内存泄漏!这在我的第1个回复帖子里就有。
2. A=i/j的方法是对整个数组操作,我想不是你所希望的。gboy也说的好,整数操作结果赋给实型,不合常规(除非特殊需要)。
 楼主| 发表于 2004-5-11 18:29:35 | 显示全部楼层 来自 浙江宁波

回复: 【求助】FORTRAN中的动态数组

DEALLOCATE 是干什么用的呢?
这个语句一般放在什么位置,有要求吗?
我刚开始学FORTRAN
以前一直用的是VB
  
所以有点摸不到头脑
发表于 2004-5-11 18:48:56 | 显示全部楼层 来自 黑龙江哈尔滨

回复: 【求助】FORTRAN中的动态数组

建议大家买一本f90的书籍放在手边, 平时好好看一看, 一般的问题都可以迎刃而解的.
  
deallocate是释放动态数组占用的空间, 当然是动态数组不再需要使用的时候就可以使用这个命令.
发表于 2004-5-11 21:30:38 | 显示全部楼层 来自 美国

回复: 【求助】FORTRAN中的动态数组

编程序个人觉得最重要的是逻辑能力,编程语言只是表述这些逻辑的一种方式。所以我觉得编程序前需要对待解决的问题进行系统分析,画出流程图,当然简单的问题可以在脑子里画出。
  
楼上说的对,多看书尽量自己解决问题对自己帮助最大!
发表于 2004-5-12 10:34:27 | 显示全部楼层 来自 武汉大学

回复: 【求助】FORTRAN中的动态数组

When the arrays are no longer needed, recover memory by de-allocating them:
DEALLOCATE ( X, Y )
和c语言中的释放内存差不多的吧,就是让那段内存又可以被别的数组什么的调用。我想是这样的。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Simapps系列直播

Archiver|小黑屋|联系我们|仿真互动网 ( 京ICP备15048925号-7 )

GMT+8, 2024-11-2 05:31 , Processed in 0.054453 second(s), 18 queries , Gzip On, MemCache On.

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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