Вопрос

Это то, что я хотел узнать недавно, в основном из любопытства.Я в настроении изучить несколько старых стилей кодирования, и FORTRAN кажется хорошим местом для начала.

Я думаю, мне следует помочь вам, ребята, предоставив хорошую отправную точку.
Итак, как бы эта процедура C была написана на FORTRAN?

int foo ( int x , int y )
{
    int tempX = x ;
    x += y / 2 ;
    y -= tempX * 3 ;    // tempX holds x's original value.
    return x * y ;
}

Я знаю, что вся функция может быть одной строкой:

return ( x + ( y / 2 ) ) * ( y - ( x * 3 ) ) ;

Но смысл того, что я задаю этот вопрос, состоит в том, чтобы посмотреть, как эти четыре утверждения будут написаны по отдельности на FORTRAN, а не обязательно объединены в одно утверждение.

Это было полезно?

Решение

Откуда вы изучаете ФОРТРАН?Просто взгляните на викиокниги!

Исходя из приведенного примера, я бы сказал:

function func(x, y) result(r)
   integer, intent(in) :: x, y 
   integer             :: r 
   integer             :: tempX
   tempX = x
   x = x / 2
   y = y - tempX * 3
   r = x * y
end function foo

Другие советы

Не вини меня - ты сказал Старый стили кодирования:

C234567
      SUBROUTINE FOO(I,J,K)
C SAVE THE ORIGINAL VALUES
      IORIG = I
      JORIG = J
C PERFORM THE COMPUTATION
      I = I + J/2
      J = J - IORIG*3
      K = I * J
C RESTORE VALUES
      I = IORIG
      J = JORIG
      END SUBROUTINE FOO

Я содрогаюсь, когда пишу это, но

  • все переменные неявно являются целыми числами, поскольку они начинаются с букв между I и N
  • FORTRAN передается по ссылке, поэтому сбросьте I и J в конце, чтобы дать тот же эффект, что и исходная функция (т.е.передача по значению, так что x и y были неизменны в процедуре вызова)
  • Комментарии начинаются с столбца 1, фактические утверждения начинаются с столбца 7

Пожалуйста, пожалуйста, пожалуйста, никогда не пишите новый код, подобный этому, разве что в шутку.

Ваша функция может выглядеть следующим образом в Fortran

 integer function foo(m, n)
 integer i

 i = m
 m = m + n/2
 n = n - i*3
 foo = m*n

 end function foo

Вы должны быть в состоянии начать работу с любым учебником по Fortran.Что-то вроде этого могло бы помочь http://www.cs.mtu.edu /~shene/COURSES/cs201/NOTES/fortran.html

ваше здоровье

Видишь Функции и подпрограммы:

INTEGER FUNCTION foo(i, j)
...
foo = 42
END

тогда позже:

k = foo(1, 2)

Аналогично приведенному выше, но с основной программой, иллюстрирующей, как она будет вызываться.

C2345678
       program testfoo
         implicit none   
         integer r, foo 
         r = foo(4,5)
         print *, 'result = ', r
       end

       integer function foo(x,y)
         integer x, y
         integer tx, ty
         tx = x + y / 2
         ty = y - x * 3
         foo = tx * ty
         return
       end

Обратите внимание, что это Fortran 77, который я выучил 23 года назад.

Верный старый стиль в применении правила IJKLMN для целого числа

C2345678
      FUNCTION IFOO(I,J)
      II = I + J/2
      JJ = J - I*3
      IFOO = II*JJ
      END
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top