Domanda

Questa è una cosa che è ho voluto sapere di recente, per lo più per curiosità. Sono in vena di imparare alcuni vecchi stili di codifica, e FORTRAN sembra un buon punto di partenza.

Credo che dovrei aiutare voi ragazzi fuori, fornendo un buon punto di partenza.
Così come sarebbe questa procedura C essere scritto in 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 ;
}

So che l'intera funzione potrebbe essere una sola riga:

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

Ma il punto a me questa domanda è quello di vedere come quei quattro affermazioni sarebbero scritti individualmente in FORTRAN, non neccessarily combinate in una singola istruzione.

È stato utile?

Soluzione

Dove si impara FORTRAN da? Basta dare uno sguardo al Wikibooks !

Derivato dal esempio, direi:

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

Altri suggerimenti

Non dare la colpa a me - lei ha detto vecchia di codifica stili:

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

mi vengono i brividi mentre scrivo questo, ma

  • tutte le variabili sono implicitamente interi, dal momento che iniziano con le lettere tra I e N
  • FORTRAN passa per riferimento, quindi resettato I e J alla fine per dare lo stesso effetto come la funzione originale (cioè passano per valore, così x e y sono rimasti invariati routine chiamante)
  • I commenti iniziano nella colonna 1, le dichiarazioni attuali iniziano nella colonna 7

Per favore, per favore, non scrivere nuovo codice come questo a meno che non come uno scherzo.

La funzione potrebbe essere simile a questa in Fortran

 integer function foo(m, n)
 integer i

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

 end function foo

Si dovrebbe essere in grado di iniziare con qualsiasi tutorial su Fortran. Qualche cosa come questa potrebbe aiutare http: //www.cs .mtu.edu / ~ Shene / CORSI / cs201 / NOTE / fortran.html

applausi

funzioni e subroutine :

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

poi in seguito:

k = foo(1, 2)

Simile alla precedente, ma con un programma principale per illustrare come si sarebbe chiamato.

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

Si noti che questo è Fortran 77, che è quello che ho imparato 23 anni fa.

La vera vecchio stile nell'applicazione della IJKLMN regola per intero

C2345678
      FUNCTION IFOO(I,J)
      II = I + J/2
      JJ = J - I*3
      IFOO = II*JJ
      END
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top