Синтаксическая ошибка/Две основные программы Fortran

Я пытаюсь скомпилировать эту программу для выборки важности Монте-Карло, но я столкнулся с парой проблем:

1 - Ошибка: синтаксическая ошибка в объявлении данных в (1), относящаяся к следующей строке, где (1) находится сразу после и под словом «функция».

real function f(x)

2 - Ошибка: Две основные ПРОГРАММЫ в (1) и (2), ссылаясь на эти две строки

program importance1

и

t=0.0

.

Далее следует пример кода. В программе больше строк кода, но я не думаю, что есть какие-то проблемы, поэтому я только что опубликовал этот первый сегмент.

program importance1
implicit none
real mean_value,t,ta,rr
real x,xtrials,s_square_old,s_square_new,std_dev,std_error,frac_stand_dev
integer k
real :: alpha=0.90
integer :: trials=50
xtrials=trials

real function f(x)
f=exp(x)
return
end

real function g(x)
g=(alpha/(exp(alpha)-1.))*exp(alpha*x)
return
end

t=0.0
s_square_old=0.0

person Alcaeos    schedule 27.10.2013    source источник


Ответы (1)


Не уверен, откуда у вас появилась идея сделать это, но похоже, что вы определяете функции в середине кода, а это не то место. В Фортране функции идут в отдельном блоке MODULE или в конце программы в блоке CONTAINS:

program importance1
  implicit none
  real :: mean_value,t,ta,rr
  real :: x,xtrials,s_square_old,s_square_new,std_dev,std_error,frac_stand_dev
  integer :: k
  real :: alpha=0.90
  integer :: trials=50
  xtrials=trials

  t=0.0
  s_square_old=0.0

contains

  real function f(x)
    real :: x
    f=exp(x)
  end function

  real function g(x)
    real :: x
    g=(alpha/(exp(alpha)-1.))*exp(alpha*x)
  end function

end program
person Kyle Kanos    schedule 27.10.2013
comment
Функции и подпрограммы также можно размещать над оператором program без contains. - person milancurcic; 27.10.2013
comment
Да и модуль на самом деле не нужен. Но использование модуля & contains поможет компилятору отловить ошибки при линковке. - person Kyle Kanos; 27.10.2013
comment
Да, определенно нет оправдания тому, чтобы не использовать модули в наши дни. - person milancurcic; 27.10.2013
comment
Это работает, большое спасибо. Мой профессор дал пример кода, но он не работал должным образом, поэтому я просто возился с ним. - person Alcaeos; 27.10.2013