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

[3. Fortran] 【求助】数组下标更换

[复制链接]
祭道者 该用户已被删除
发表于 2004-4-18 19:12:06 | 显示全部楼层 |阅读模式 来自 河南郑州
提示: 作者被禁止或删除 内容自动屏蔽
发表于 2004-4-18 20:17:23 | 显示全部楼层 来自 天津

回复: 【求助】数组下标更换

Simdroid开发平台
我认为直接用arr(0:n-1) = arr这样的方式是不可以的,下标从是在定义的时候就指定了的,不能用上面的语句来更改。
  
real arr2(0:n-1)
arr2 = arr
这样arr2就是从0开始的了。

评分

1

查看全部评分

祭道者 该用户已被删除
 楼主| 发表于 2004-4-20 13:28:07 | 显示全部楼层 来自 河南郑州
提示: 作者被禁止或删除 内容自动屏蔽
发表于 2004-4-20 21:16:13 | 显示全部楼层 来自 美国

回复: 【求助】数组下标更换

You can do that: allocate a(0:N)
祭道者 该用户已被删除
 楼主| 发表于 2004-4-21 19:03:10 | 显示全部楼层 来自 河南郑州
提示: 作者被禁止或删除 内容自动屏蔽
发表于 2004-4-21 21:26:07 | 显示全部楼层 来自 美国

回复: 【求助】数组下标更换

定义之前预先规划好
allocate a(0:N+1)不就行了
使用时先用1:N个元素,需要0:N-1各元素时,先做如下循环
do i = 1, N
  a(i-1) = a(i)
enddo
又想用1:N+1时,再做如下循环
do i = n, 1, -1
  a(i) = a(i-1)
enddo
但a(n+1)需要自己处理。
总之个人不喜欢这样的做法。建议在下标上做文章更简单。如公式为
y=a(0:N-1)*x
程序可为
allocate a(1:N)
do i = 0, n-1
  y = a(i+1)*x
enddo
数组的直接运算需要谨慎,保险起见对元素进行循环计算更好。
发表于 2004-4-22 10:39:41 | 显示全部楼层 来自 湖北武汉

回复: 【求助】数组下标更换

祭道者 wrote:
有一个数组下标从1到n,现在想换成0到n-1.我是这么做的arr(0:n-1)=arr,用循环print*的结果是正确的,但我省略下标print整个数组时却发现arr(0)没有了,最后一个元素输出了两遍,请问这是怎么回事,应该怎么解决呢?

  
arr(0:n-1)=arr这样对吗?
如果改为arr(0:n-1)=arr(1:n)
那么print*整个数组时就出现最后一个元素出现两遍的情况。
这是因为元素arr(n-1)=arr(n)
发表于 2004-4-22 10:43:15 | 显示全部楼层 来自 湖北武汉

回复: 回复: 【求助】数组下标更换

祭道者 wrote:
可以这样用啊,这样最好了。我还想多问一句,如果我allocate a(0:N)之后有想用a(1:N+1)了怎么办啊,还有我提到的第0个元素丢失而最后一个元素重复的现象该怎样解释呢,freepu能不能多说几句啊。

  
其实,第0个元素没有消失,而是因为被赋值为元素1的值。
因为元素n赋值给元素n-1所以,整个数组打印时出现最后一个元素重复的现象。
祭道者 该用户已被删除
 楼主| 发表于 2004-4-22 20:11:47 | 显示全部楼层 来自 河南郑州
提示: 作者被禁止或删除 内容自动屏蔽
发表于 2004-4-23 08:10:29 | 显示全部楼层 来自 湖北武汉

回复: 回复: 回复: 回复: 【求助】数组下标更换

祭道者 wrote:
[quote]
  
其实,第0个元素没有消失,而是因为被赋值为元素1的值。
因为元素n赋值给元素n-1所以,整个数组打印时出现最后一个元素重复的现象。

这句话我没有理解。我原是想改变数组下标而不是数组内容,而且就一个数组而不是两个数组相赋值。arr(n)应当不存在了才对。我也不知道该说些什么了,毕竟arr(0:n-1)=arr是太想当然的做法,freepu也给出了很好的解决方法,谢谢两位前辈。 [/quote]
  
数组的存储空间对应的是实际的物理地址,从你定义开始就已经分配存在了。如果你不将数组空间释放,数组是一直都存在着的。怎么可能将数组中的某一个数组元素单独去掉呢?
我想问一下,arr(0:n-1)=arr时,arr数组定义得大小是多少?是不是arr(0:n)?
祭道者 该用户已被删除
 楼主| 发表于 2004-4-25 14:07:56 | 显示全部楼层 来自 河南郑州
提示: 作者被禁止或删除 内容自动屏蔽
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Simapps系列直播

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

GMT+8, 2024-11-2 03:41 , Processed in 0.061491 second(s), 18 queries , Gzip On, MemCache On.

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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