Este programa es exactamente igual al de la carpeta anterior, excepto en un detalle: "la llamada a la subrutina allocate() no se realiza desde el programa principal, sino desde la subrutina auxiliar PedirMemoria()". Las instrucciones allocatable v(:) ... allocate(v(n), STAT=ist); asignan a v el puntero a la primera componente de un nuevo vector (del tipo que corresponda) con n componentes. Un valor no nulo en la variable ist indica que la reserva de memoria ha fracasado. Si pretendemos realizar esta operacion dentro de la subrutina PedirMemoria() tendriamos que enviar a la subrutina no v, sino lo que en C se denomina &v, para que la subrutina pueda modificar el valor de v. A continuacion, tendriamos que programar la subrutina de forma consecuente. Sin embargo, este tipo de manipulaciones (tipicas de C) no son evidentes en Fortran. Para obviar este problema, Fortran 90 proporciona el siguiente mecanismo: Basta con incluir en el programa principal el prototipo siguiente Interface Subroutine PedirMemoria(ncomponentes,x) implicit real*8 (a-h,o-z) allocatable x(:) end Subroutine PedirMemoria end Interface y definir la subrutina en la forma Subroutine PedirMemoria(ncomponentes,x) implicit real*8 (a-h,o-z) allocatable x(:) allocate(x(ncomponentes),STAT=ist) ... return end para que el compilador Fortran se encargue de que la llamada PedirMemoria(n,v) funcione correctamente. (*) El prototipo se ha escrito en un archivo, llamado interface.h, que se incluye en el programa principal. El Fortran 77 no ofrece este tipo de funcionalidad, por lo que este programa es necesario compilarlo con gfortran o con cualquier otro compilador compatible con Fortran 90 (o una version posterior). __________ (*) Nota: En realidad lo que ha hecho el compilador Fortran es sustituir v por el equivalente a &v en la llamada a la subrutina, y x por el equivalente a *x en la subrutina.