首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Fortran构造查找两个数组之间的匹配值

使用Fortran构造查找两个数组之间的匹配值
EN

Stack Overflow用户
提问于 2018-05-02 14:47:43
回答 1查看 1.3K关注 0票数 0

在继续代码之前,我需要使用IF条件来确定数组(A)中的整数是否与另一个数组(B)中的整数匹配。数组的长度不等,并且包含唯一的值,它们都是正的。

我知道我可以通过以下方法找到匹配的值:

代码语言:javascript
复制
DO I = 1,SIZE(A)
Match(J)=(ANY(A(I)==B))

然而,这种格式不被IF...THEN构造所接受。我还没有找到一种方法来实现它的在线和通用测试。我在这里错过了什么?

编辑:作为另一种选择,我尝试了以下代码:

代码语言:javascript
复制
   INTEGER :: I , K, B(900),C(900),I1,ID3, IP
   INTEGER, INTENT(IN)           :: A, N

       OPEN(12,FILE='../B.dat')
       DO I=1,817
          READ(12,*)B(I),C(I)
       END DO

       DO I = 1,SIZE(A)
        DO K = 1,SIZE(B)
         IF (I.EQ.K) THEN
             DO IP = N-9,N
                ID3 = I1 +A*(IP-1)
         END DO
         END DO
         END DO

但是,K在整个循环中都会发生变化,因此代码不适用于匹配。然后我试着:

代码语言:javascript
复制
DO I = 1, SIZE(A)
  I1 =ID(I)
    DO IP = N-9,N
      ID3 = I1 +A*(IP-1)
    END DO

但是,我收到了一个分段错误:

|C:\TELEMAC\VEG\May\PRIVEtest.cas_2018-05-02-16h57min04s\out_testMedit.exe运行码::_____________运行代码::\这个错误的回溯:|#0 ffffffffffffffff ~~

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-05-03 02:40:05

你的例子中有太多不相关的变量,同时又没有给我们适当评估你想要的东西的信息。

如果您只想检查两个可能大小不相等的数组AB是否至少共享一个元素,则可以使用以下构造:

代码语言:javascript
复制
any([(any(A(i) == B), i = 1, size(A))])

让我们来详细介绍一下:

代码语言:javascript
复制
any(A(i) == B)

这将检查A的th元素是否在B中的任何位置。返回逻辑。然后为A的所有元素创建一个临时数组。

代码语言:javascript
复制
[(any(A(i) == B), i = 1, size(A))]

然后,只需设置一个any(),就可以在IF语句中使用它:

代码语言:javascript
复制
program my_any

    implicit none
    integer :: A(3), B(4), i

    A = [1, 2, 3]
    B = [6, 3, 4, 10]

    if (any([(any(A(i) == B), i=1, size(A))])) then
        print *, "YES"
    else
        print *, "NO"
    end if

end program my_any
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50137491

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档