簡體   English   中英

使用Fortran IF構造查找兩個數組之間的匹配值

[英]Using Fortran IF construct to find matching values between two arrays

在繼續執行代碼之前,我需要使用IF條件來確定數組( A )中的整數是否與另一個數組( B )中的整數匹配。 數組的長度不相等,並且包含唯一為正的唯一值。

我知道我可以使用以下方法找到匹配的值:

DO I = 1,SIZE(A)
Match(J)=(ANY(A(I)==B))

但是, IF...THEN構造不接受此格式。 我還沒有找到在網上和常規測試中實施它的方法。 我在這里想念什么?

編輯:作為替代,我嘗試了以下代碼:

   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在整個循環中都會發生變化,因此該代碼不適用於匹配。 然后,我嘗試:

DO I = 1, SIZE(A)
  I1 =ID(I)
    DO IP = N-9,N
      ID3 = I1 +A*(IP-1)
    END DO

但是我收到了細分錯誤:

_____________ runco​​de :: main::| runCode:無法運行| C:\\ TELEMAC \\ VEG \\ May \\ PRIVEtest.cas_2018-05-02-16h57min04s \\ out_testMedit.exe | ~~~~~~~~~~~~~~ ~~~~~ |程序接收到的信號SIGSEGV:分段錯誤-無效的存儲器參考。 | |此錯誤的回溯跟蹤:|#0 ffffffffffffffffff | ~~~~~~~~~~~~~~~~~~~

您的示例中有太多無關緊要的變量,而同時卻沒有提供給我們正確評估所需信息的信息。

如果只想檢查大小可能不相等的兩個數組AB是否共享至少一個元素,則可以使用此構造:

any([(any(A(i) == B), i = 1, size(A))])

讓我們進入細節:

any(A(i) == B)

這將檢查Ai個元素是否在B任何位置。 返回邏輯。 然后,我為A所有元素創建一個臨時數組:

[(any(A(i) == B), i = 1, size(A))]

然后只需在其周圍放一個any() ,就可以在IF語句中絕對使用它:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM