vectores una programacion pasar parametro matriz matrices llenar funciones con como array arrays fortran fortran90 subroutine

arrays - una - Subrutina con elemento de matriz como argumento



pasar array como parametro c++ (1)

En mi programa, la subrutina stlstp pasa el work(2,1) como parámetro a stlfts(...) subrutina. work(2,1) será el doble valor en ese índice, pero ¿cómo la subrutina convertirlo como matriz de dimensión única x(n) ?

Cuando stlfts(...) x value en la stlfts(...) , está imprimiendo elementos de n tamaño, por ejemplo:

STLFTS....X,,, 0.0000000000000000 1.4964418382246345E-317 1.48978578 58438612E-317 1.4964339331743010E-317 1.4964418382246345E-317 4.3367611401 ....

Según tengo entendido, salvo el 1er. Valor, todos los demás valores de esta x son basura, pero no estoy seguro de cómo afectará esta asignación a la referencia original. ¿alguien puede ayudarme con esto?

subroutine stlstp(y,n,np,ns,nt,nl,isdeg,itdeg,ildeg,nsjump,ntjump,nljump,ni,userw,rw,season,trend,work) ! implicit none ! Arg integer n,np,ns,nt,nl,isdeg,itdeg,ildeg,nsjump,ntjump,nljump,ni logical userw double precision y(n),rw(n),season(n),trend(n),work(20,5) ! Var integer i,j do 80 j = 1,1 do 1 i = 1,n work(i,1) = y(i)-trend(i) 1 continue call stlss(y,n,np,ns,isdeg,nsjump,userw,rw,season) PRINT *, ''WORK 1,2 ....'',work(1,2) PRINT *, ''WORK ....'',work call stlfts(work(1,2),n+2*np,np,work(1,3),work(1,1))

Ahora el código de subrutina stlfts es:

subroutine stlfts(x,n,np,trend,work) integer n, np double precision x(n), trend(n), work(n) PRINT *, ''STLFTS....X,,,'',x call stlma(x, n, np, trend) end


Gracias a IanH por la dirección del estándar (Fortran 2008 12.5.2.11 (1)), la respuesta fue incorrecta en la declaración sobre la conformidad estándar:

Un argumento real representa una secuencia de elementos si es una expresión de matriz, un designador de elementos de matriz , un escalar de carácter predeterminado o un carácter escalar de tipo con el tipo de carácter C (15.2.2). Si el argumento real es una expresión de matriz, la secuencia de elementos consta de los elementos en el orden de elementos de la matriz. Si el argumento real es un designador de elemento de matriz, la secuencia de elementos consiste en ese elemento de matriz y cada elemento que lo sigue en orden de elementos de matriz.

Esto significa que esta praxis es de conformidad estándar y esta es una forma legal de cómo pasar una parte de una matriz a partir de algún elemento.

La situación se puede explicar a los programadores C como la subrutina stlstp pasa la dirección del punto real en la matriz original.

La subrutina stlfts luego interpreta la dirección como una dirección de una parte de la matriz original de longitud n . Serán los primeros n elementos en el orden principal de la columna a partir del elemento (1,2) . De esta forma, obtiene acceso a otros elementos de la matriz original WORK y el resultado no será basura.