Pregunta

Esto es algo que he querido conocer recientemente, sobre todo por curiosidad. Estoy en el estado de ánimo de aprender algunos estilos de codificación de edad, y FORTRAN parece ser un buen lugar para empezar.

Creo que debería ayudar a ustedes a cabo proporcionando un buen punto de partida.
Entonces, ¿cómo sería este procedimiento C escribirse en 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 ;
}

Sé que la función entera podría ser una sola línea:

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

Pero el punto de que me haga esta pregunta es para ver cómo esos cuatro estados pueden ser escritos individualmente en FORTRAN, sin combinar necesariamente siempre en un solo estado.

¿Fue útil?

Solución

Cuando se aprende a partir de FORTRAN? Basta con echar un vistazo a la wikibooks !

Derivado del ejemplo, diría:

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

Otros consejos

No me culpen - Dijiste de edad estilos de codificación:

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

tiemblo mientras escribo esto, pero

  • todas las variables son números enteros de forma implícita, ya que comienzan con las letras entre I y N
  • FORTRAN pasa por referencia, por lo que restablece I y J al final para dar el mismo efecto que la función original (es decir, pasan por valor, por lo x y y se mantuvieron sin cambios en la rutina de llamada)
  • Los comentarios comienzan en la columna 1, las declaraciones reales comienzan en la columna 7

Por favor, por favor, por favor, nunca escribir nuevo código como este a menos como una broma.

Su función podría tener este aspecto en Fortran

 integer function foo(m, n)
 integer i

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

 end function foo

Usted debe ser capaz de empezar a trabajar con cualquier clase particular en Fortran. Algo como esto podría ayudar http: //www.cs .mtu.edu / ~ Shene / CURSOS / cs201 / NOTAS / fortran.html

aplausos

funciones y subrutinas :

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

luego más tarde:

k = foo(1, 2)

Similar al anterior, pero con un programa principal para ilustrar cómo se llamaría.

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

Tenga en cuenta que esto es Fortran 77, que es lo que aprendí hace 23 años.

Es cierto estilo antiguo en la aplicación de la regla para IJKLMN entero

C2345678
      FUNCTION IFOO(I,J)
      II = I + J/2
      JJ = J - I*3
      IFOO = II*JJ
      END
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top