求教各位大仙一个fortran问题

f
ftmit
楼主 (未名空间)

求教各位大仙一个fortran问题:

已知数组A=(0,1,0,2,0,0,5),现需要把其中的非零元素写入另一个数组B,即输出B=(1,2,5)

中间的那条语句到底应该怎么写?如果您还有别的方法,也请不吝告知,先谢谢了。必须是fortran :(

do i = 1, 7
if (A(i).ne.0) then
B = A(i) */这个地方到底应该怎么写?多谢!
else
endif
enddo
B
BroPingtou

用两个下标呗
A就用你的do i = 1, 7
B设定一个初始值j = 1,遇到A(i) ne 0的时候j++
f
ftmit

先多谢!军版ToyotaYaris (丰田雅力士)给出的回答和你的一样。

---------------------------------------------------------
多谢!

我就是这么干的,但编译通不过。既然你也认为这样没错,那我只有检查这个循环内的其他鬼咚咚了。

【 在 ToyotaYaris (丰田雅力士) 的大作中提到: 】
j = 1
do i = 1, 7
if (A(i).ne.0) then
B(j) = A(i) */这个地方到底应该怎么写?多谢!
j=j+1
else
endif
enddo

------------------------------------------------------
【 在 BroPingtou (ǢŦĦȆȐ) 的大作中提到: 】
: 用两个下标呗
: A就用你的do i = 1, 7
: B设定一个初始值j = 1,遇到A(i) ne 0的时候j++

B
BroPingtou

你这如果A在这之后不需要的话,甚至可以in-place弄,道理一样,也不用另外搞个B

【 在 ftmit (八戒) 的大作中提到: 】
: 先多谢!军版ToyotaYaris (丰田雅力士)给出的回答和你的一样。
: ---------------------------------------------------------
: 多谢!
: 我就是这么干的,但编译通不过。既然你也认为这样没错,那我只有检查这个循环内的
: 其他鬼咚咚了。
: j = 1
: do i = 1, 7
: if (A(i).ne.0) then
: B(j) = A(i) */这个地方到底应该怎么写?多谢!
: j=j+1
: ...................

f
ftmit

好的,我先查一下这个循环内的其他东西再说。多谢!

【 在 BroPingtou (ǢŦĦȆȐ) 的大作中提到: 】
: 你这如果A在这之后不需要的话,甚至可以in-place弄,道理一样,也不用另外搞个B

f
ftmit

您好,A在后边不调用了,使用您说的in-place,如何搞这个问题为好?麻烦您就这个
例子,具体写一下可以吗?先谢谢了。

【 在 BroPingtou (ǢŦĦȆȐ) 的大作中提到: 】
: 你这如果A在这之后不需要的话,甚至可以in-place弄,道理一样,也不用另外搞个B

w
wind

好多年没用过Fortran了,印象里也是要初始化变量的,就相当于C里头的分配memory。你这个B要开始指定长度吗?
j
jam76

为何会发到joke版来啊

(见鬼了,为什么J加1中间那个加号显示不出来?)

这样可以不

J=1
Do I = 1,7
If (A(i).eq.0) then
Goto 20
End if
B(j)=A(I)
J=j 1
20 Continue
End do

也就是遇到0跳过,B的下标不变。

H
Huangchong

这个站贴程序经常会被过滤

【 在 jam76 (jam) 的大作中提到: 】
: 为何会发到joke版来啊
: (见鬼了,为什么J加1中间那个加号显示不出来?)
: 这样可以不
: J=1
: Do I = 1,7
: If (A(i).eq.0) then
: Goto 20
: End if
: B(j)=A(I)
: J=j 1
: ...................

w
weidong

看了下,会FORTRAN的好象多是53老将。

【 在 Huangchong (净坛使者) 的大作中提到: 】
: 这个站贴程序经常会被过滤

★ 发自iPhone App: ChinaWeb 1.1.5
w
weidong

蟒蛇+熊猫, 一句话的事情,非要自己重新发明轮子。

【 在 weidong (伊拉克学习小组副组长) 的大作中提到: 】
: 看了下,会FORTRAN的好象多是53老将。
: ★ 发自iPhone App: ChinaWeb 1.1.5

★ 发自iPhone App: ChinaWeb 1.1.5
z
zeami

老板怀旧。。

【 在 weidong (伊拉克学习小组副组长) 的大作中提到: 】
蟒蛇+熊猫, 一句话的事情,非要自己重新发明轮子。

【 在 weidong (伊拉克学习小组副组长) 的大作中提到: 】
: 看了下,会FORTRAN的好象多是53老将。
: ★ 发自iPhone App: ChinaWeb 1.1.5

★ 发自iPhone App: ChinaWeb 1.1.5
j
jam76

楼主说了,必须是 Fortran

估计是历史遗留问题

【 在 weidong(伊拉克学习小组副组长) 的大作中提到: 】

: 蟒蛇 熊猫, 一句话的事情,非要自己重新发明轮子。

: ★ 发自iPhone App: ChinaWeb 1.1.5

w
weidong

估计那个撸主不是在改老代码,而是要调用老代码,如果是后者,还不如回去自己好好写数据接口。

【 在 jam76 (jam) 的大作中提到: 】
: 楼主说了,必须是 Fortran
: 估计是历史遗留问题
:
: 蟒蛇 熊猫, 一句话的事情,非要自己重新发明轮子。
:
: ★ 发自iPhone App: ChinaWeb 1.1.5
:

★ 发自iPhone App: ChinaWeb 1.1.5
d
daemonself1
https://pyccel.readthedocs.io/
用这个就好
【 在 ftmit (八戒) 的大作中提到: 】
: 求教各位大仙一个fortran问题:
: 已知数组A=(0,1,0,2,0,0,5),现需要把其中的非零元素写入另一个数组B,即输出B=(1
: ,2,5)
: 中间的那条语句到底应该怎么写?如果您还有别的方法,也请不吝告知,先谢谢了。必须
: 是fortran :(
: do i = 1, 7
: if (A(i).ne.0) then
: B = A(i) */这个地方到底应该怎么写?多谢!
: else
: endif
: ...................