求教:Frotran code

f
ftmit
楼主 (未名空间)

各位大仙,请出手相助,多谢!

1,必须使用fortran,不能使用其他语言,不要问我为啥,问大老板去 :(

2,问题:从一个很大的数组中挑选出符合条件的数值,筛选的条件也很多,为了表达
清楚,简化一下问题如下:

假设:数组A =(0, 1, 2,3,4,5,0, 1,2,3,4,5)

筛选条件1:数组B=(5,-6,-7,8,-9)
筛选条件2:数组C=(-11,12,-13)

2.1:各个筛选条件是独立的,这些条件之间没有关联,并且数组的长度是不一样的。
2.2:数组B中有三个负值,分别为B(2),B(3)和B(5)
2.3:数组C中有两个负值,分别为B(1)和B(3)
2.4:数组B和数组C的共同点就是在第三个位置上都是负数,那么请把数组A中的数值3挑选出来,即输出A(4)和A(10)

不知道我表达清楚了没有,不是搞CS的,只好上来求救,在线等,灌水paper用,先谢
谢了

B
BroPingtou

1. 同时遍历B,C ,里面同为负数的index放到indexset里面
2. 遍历A, 把indexset里面对应的A的元素提出来

f
ftmit

大侠!麻烦您给写一个fortran的例子,我对编程不灵光啊,先谢谢了!

【 在 BroPingtou (ǢŦĦȆȐ) 的大作中提到: 】
: 1. 同时遍历B,C ,里面同为负数的index放到indexset里面
: 2. 遍历A, 把indexset里面对应的A的元素提出来

f
ftmit

do i = 1, 12 */数组A
do j = 1, 5 */数组B
do k = 1, 3 */数组C

if (B(j).lt.0) then
if (C(k).lt.0) then

write(*,*) A(i) /这里到底怎么才能和j和k联系起来啊?

else
endif
else
endif

enddo
enddo
enddo
【 在 BroPingtou (ǢŦĦȆȐ) 的大作中提到: 】
: 1. 同时遍历B,C ,里面同为负数的index放到indexset里面
: 2. 遍历A, 把indexset里面对应的A的元素提出来

B
BroPingtou

恁是没看懂!
【 在 ftmit (八戒) 的大作中提到: 】
: do i = 1, 12 */数组A
: do j = 1, 5 */数组B
: do k = 1, 3 */数组C
: if (B(j).lt.0) then
: if (C(k).lt.0) then
: write(*,*) A(i) /这里到底怎么才能和j和k联系起来啊?
: else
: endif
: else
: endif
: ...................

f
ftmit

我这个想法可能本身就是错的。你不用考虑这个,就是根据上边说的问题,用您自己的想法,给我一个fortran的例子,可以吗?谢谢了。

【 在 BroPingtou (ǢŦĦȆȐ) 的大作中提到: 】
: 恁是没看懂!

H
Huangchong

为啥非要用fortran? 数学系都可以用python了吧

【 在 ftmit (八戒) 的大作中提到: 】
: 各位大仙,请出手相助,多谢!
: 1,必须使用fortran,不能使用其他语言,不要问我为啥,问大老板去 :(
: 2,问题:从一个很大的数组中挑选出符合条件的数值,筛选的条件也很多,为了表达
: 清楚,简化一下问题如下:
: 假设:数组A =(0, 1, 2,3,4,5,0, 1,2,3,4,5)
: 筛选条件1:数组B=(5,-6,-7,8,-9)
: 筛选条件2:数组C=(-11,12,-13)
: 2.1:各个筛选条件是独立的,这些条件之间没有关联,并且数组的长度是不一样的。: 2.2:数组B中有三个负值,分别为B(2),B(3)和B(5)
: 2.3:数组C中有两个负值,分别为B(1)和B(3)
: ...................

H
Huangchong

看不懂筛选条件 BC和A什么意思?

【 在 ftmit (八戒) 的大作中提到: 】
: 各位大仙,请出手相助,多谢!
: 1,必须使用fortran,不能使用其他语言,不要问我为啥,问大老板去 :(
: 2,问题:从一个很大的数组中挑选出符合条件的数值,筛选的条件也很多,为了表达
: 清楚,简化一下问题如下:
: 假设:数组A =(0, 1, 2,3,4,5,0, 1,2,3,4,5)
: 筛选条件1:数组B=(5,-6,-7,8,-9)
: 筛选条件2:数组C=(-11,12,-13)
: 2.1:各个筛选条件是独立的,这些条件之间没有关联,并且数组的长度是不一样的。: 2.2:数组B中有三个负值,分别为B(2),B(3)和B(5)
: 2.3:数组C中有两个负值,分别为B(1)和B(3)
: ...................

H
Huangchong

因为BC 第三个都是负值就把A里的3都拿出来?那不就是先比较BC找到想要的数字 然
后把A过一遍 数字对了就存序号吗?

H
Huangchong

fortran77很简单的 看几小时就会了 关键是要自己主动去学 不要觉得很难

【 在 ftmit (八戒) 的大作中提到: 】
: 大侠!麻烦您给写一个fortran的例子,我对编程不灵光啊,先谢谢了!

z
zeami

这么怀旧的老板叔喜欢。你告诉他你用awk写,他肯定同意
下面是六年前给别人举的一个例子,你改改 && 前后的条件就能用

创建文件夹 C:/Data/20150202,把所有原始测试结果放进去,
比如7800个*.out文件

在这里下载并安装Cygwin B20https://www3.cs.stonybrook.edu/~alee/g++/g++.html

把下面两行########################里的东西存成文件"a2.awk"
放到C:/Data/20150202里面

########################
BEGIN {
{fileno=0}
{printf " #|%12s|%12s|%12s|%22s\n","Freq","Mag","Ph","File"}
}
{ if (FNR==1) {
{FileNo=FileNo+1 }
}
}
/30./,/10;/ {
if ($2<=0. && $3>-50.) {
a1=$1
a4=$4
a5=$5
{printf "%4i|",FileNo}
{printf "%12f|%12f|%12f|%22s\n",a1,a4,a5,FILENAME}
}
}
########################

把这个拷贝到桌面 C:\cygnus\cygwin-b20\cygnus.bat

双击点开,然后在$符后输入(不包括$符自己):
$mount
$cd C:/Data/20150202
$awk -f a2.awk *.out>Results_a2.txt
(这个*.out你要根据实际的文件后缀改)

Results_a2.txt就是你想要的结果

【 在 ftmit (八戒) 的大作中提到: 】
: 我这个想法可能本身就是错的。你不用考虑这个,就是根据上边说的问题,用您自己的
: 想法,给我一个fortran的例子,可以吗?谢谢了。

J
JobWanted

如果你会任何别的语言,这里有个办法

用那个你会的写好程序得到结果

然后用fortran包装一下:
用fortran 写着程序的code
用fortran,调用系统命令,运行你上面写的那个

done

【 在 ftmit (八戒) 的大作中提到: 】
: 各位大仙,请出手相助,多谢!
: 1,必须使用fortran,不能使用其他语言,不要问我为啥,问大老板去 :(
: 2,问题:从一个很大的数组中挑选出符合条件的数值,筛选的条件也很多,为了表达
: 清楚,简化一下问题如下:
: 假设:数组A =(0, 1, 2,3,4,5,0, 1,2,3,4,5)
: 筛选条件1:数组B=(5,-6,-7,8,-9)
: 筛选条件2:数组C=(-11,12,-13)
: 2.1:各个筛选条件是独立的,这些条件之间没有关联,并且数组的长度是不一样的。: 2.2:数组B中有三个负值,分别为B(2),B(3)和B(5)
: 2.3:数组C中有两个负值,分别为B(1)和B(3)
: ...................