Проверьте, находится ли текущая дата между двумя датами Oracle SQL

Результаты массива требуют явного интерфейса. Вам также нужно будет отрегулировать funct и sum, чтобы фактически быть массивами, используя инструкцию dimension. Использование явного интерфейса требует Fortran 90+ (спасибо за подсказки @francescalus и @VladimirF) и довольно утомительно:

        PROGRAM integration
        INTERFACE funct
          FUNCTION funct(x) result(r)
            IMPLICIT NONE
            DOUBLE PRECISION r
            DIMENSION r( 10 )
            DOUBLE PRECISION x
          END FUNCTION
        END INTERFACE
        DOUBLE PRECISION a , b, sum, h
        DIMENSION sum( 10)
        INTEGER n, i

        PARAMETER (a = 0, b = 10, n = 200)  

        h = (b-a)/n
        sum = 0.0

        DO i = 1, n
           sum = sum+funct(i*h+a)
        END DO

        sum = h*(sum-0.5*(funct(a)+funct(b)))

        PRINT *,sum

        END  

        FUNCTION funct(x)
        IMPLICIT NONE
        DOUBLE PRECISION funct
        DIMENSION funct( 10)
        DOUBLE PRECISION x
        INTEGER K

        Do k = 1,10
          funct(k) = x ** 2 * k
        End Do

        PRINT *, 'Value of funct is', funct

        RETURN
        END

Если вы можете, вы должны переключиться на более современный стандарт, такой как Fortran 90+, и используйте modules. Они обеспечивают интерфейсы автоматически, что делает код намного проще.

В качестве альтернативы вы можете вывести цикл из k из функции и выполнить суммирование по элементам. Это было бы верно FORTRAN 77:

        PROGRAM integration
c       ...
        DIMENSION sum( 10)
c       ...
        INTEGER K
c       ...
        DO i = 1, n
          Do k = 1,10
            sum(k)= sum(k)+funct(i*h+a, k)
          End Do
        END DO
c       ...

Обратите внимание, что я передаю k функции. Он должен быть соответствующим образом скорректирован:

        DOUBLE PRECISION FUNCTION funct(x,k)
        IMPLICIT NONE
        DOUBLE PRECISION x
        INTEGER K

        funct = x ** 2 * k

        PRINT *, 'Value of funct is', funct

        RETURN
        END

Эта версия просто возвращает скаляр и заполняет массив в основной программе.


Кроме того, я не уверен, что разумно использовать переменную с именем sum. Существует внутренняя функция с тем же именем. Это может привести к некоторой путанице ...

30
задан ZygD 17 July 2018 в 12:11
поделиться