передача функции в подпрограмму - PullRequest
0 голосов
/ 03 ноября 2019

Мне нужно решить следующую задачу для моего задания.

"Напишите подпрограмму, которая пытается определить и приблизить максимальные и минимальные значения произвольной функции в заданном диапазоне за определенное количество шагов. Оцениваемая функция должна быть передана подпрограмме в качестве вызывающего аргумента. Используйте основную программу, чтобы передать функцию ? (?) = 5 * Sin (? ^ 2) + ln (? + 2) −? ^ 3 в подпрограммуа затем выполните поиск минимума и максимума в 200 шагах в диапазоне 0≤?≤ 2. Подпрограмма должна иметь следующие выходные аргументы: минимальное значение, местоположение минимального значения, максимальное значение и местоположение максимального значения. "

Я пытаюсь сделать это с помощью следующего кода:

program a2q4
    implicit none
    real::f
    Call Max_Min(f)
end program

function f(x)
    implicit none
    real::f,x
    f=5*sin(x**2)+log(x+2)-x**3
end function f

subroutine Max_Min(g)
    implicit none
    integer::a,b,stp,i
    real::g,ma,mi,malc,milc,h
    open(unit=241,file='in_a2q4.txt')
    open(unit=240,file='ot_a2q4.txt')
    read(241,*)a,b,stp
    h=(b-a)/200.0
    ma=0.0
    malc=0.0
    mi=0.0
    milc=0.0
    do i=a,b,h
        if(g(i)>ma)then
            ma=g(i)
            malc=i
        else
        end if
        if(g(i)<mi)then
            mi=g(i)
            milc=i
        else
        end if
    end do
    write(240,'(a,F8.4,a,F4.2)')"Minimum value=",mi," for x=",milc
    write(240,'(a,F8.4,a,F4.2)')"Maximum value=",ma," for x=",malc
end subroutine

Где входной файл содержит 0 2 200, но я не получаю никакого результата.

...