Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Programación Fortran 5
Programación Fortran 5
MATERIA
PROGRAMACIÓN
PRESENTA
Ian Gennaro Güitrón Sagaón
DOCENTE DE LA ASIGNATURA
Alberto Vázquez Martínez
ANTECEDENTES ……………………………………………………………………..… 3
Arreglos ….. …………………………………….………………………………… 3
Declaración de Tablas ………..…………………………………………………. 3
CONTENIDO ……………………………………………………………………………... 5
Quiz 5.1 ……....…………………………………………………………………… 5
Quiz 5.2 …………………………………………………………………………… 7
Quiz 5.2 ………………………………………………………………………...…11
Ejercicio de fin de Capítulo ,...………………………………………………..…14
CONCLUSION ………………………………………………………………………….. 15
BIBLIOGRAFIA …………………………………………………………………………. 16
ANTECEDENTES
ARREGLOS
En Fortran, un arreglo es un grupo de variables o constantes, todos del mismo tipo,
que estén referenciados por el mismo nombre. Los valores en el mismo grupo
ocupan locaciones consecutivas en la memoria de la computadora. El valor o dato
individual en el arreglo es llamado elemento de arreglo y es definido por el nombre
del nombre del arreglo total con un subíndice señalando una localización dentro del
arreglo.
Los arreglos pueden ser herramientas extremadamente útiles. Estos permiten que
se apliquen el mismo algoritmo una y otra vez a diferentes ítems de datos con un
simple ciclo do.
Por ejemplo, suponga que se necesita conseguir la raíz cuadrada de 100 números
reales diferentes. Si los números se asignan como un arreglo saldrán enlistados de
forma que según el nombre de la matriz y la posición tendrán ese nombre asignado
(a por el nombre de la matriz, y la posición de la línea, por ejemplo: a1, a2, a3…
an). Si los números están guardados en la matriz de 100 valores, entonces el código
sería el siguiente:
DECLARACION DE TABLAS
En Fortran90 es posible declarar tablas de forma dinámica, lo que significa que la
extensión de sus dimensiones se decide durante la ejecución del programa, aunque
es preciso indicar, ya durante la compilación, el número de dimensiones, es decir,
de subíndices, que va a tener. La creación de este tipo de tablas se hace en dos
etapas:
1. Declaración de la tabla mediante el atributo ALLOCATABLE, sin
informaci´on sobre el tamaño de esta.
TIPO, ALLOCATABLE :: nombre_tabla(ind-dim)
donde ind-dim es la indicación sobre el número de dimensiones de la tabla.
2. Cuando se desee crear la tabla, se usará la instrucción ALLOCATE
(nombre_tabla(dim))
EJEMPLO: real*4, allocatable :: tabla(:,:) ... print*,’>> dimensión de la
matriz ? ’ read*,n allocate(tabla(n,n))
Con la sentencia ALLOCATE se pueden crear varias tablas a la vez,
separándolas por comas. Una tabla creada con la sentencia ALLOCATE
puede ser destruida, cuando ya no se use, con la sentencia:
40 Rosa Echevarría Líbano
Ampliación de Cálculo Numérico. Introducción a FORTRAN90
DEALLOCATE(nombre_tabla)
Una tabla dinámica que ya haya sido creada (ALLOCATE) no puede ser
creada de nuevo a menos que se destruya previamente. Para saber si una
tabla dinámica esta creada o no en un momento dado se puede emplear la
función intrínseca
ALLOCATED(tabla)
que devuelve el valor lógico. TRUE. si tabla está creada y .FALSE. en caso contrario
CONTENIDO
QUIZ 5.1
PARA LAS PREGUNTAS 1 A 3, DTEERMINE LA LONGITUD DEL ARREGLO
ESPECIFICADO POR CADA UNA DE LAS SIGUIENTES DECLARACIONES Y EL
RANGO DEL SUSCRIPTOR PARA ARREGLO.
1. INTEGER :: ITEMP (15)
3. INTEGER, PARAMETER :: I1 = - 20
INTEGER, PARAMETER :: I2 = - 1
REAL, DIMENSION (I1:I1*I2) :: A
La longitud es de 41 unidades.
DETERMINE CADA UNO DE LAS SIGUIENTES DECLARACIONES FORTRAN
SON VALIDAS. POARA CADA DECLARACION VALIDA, ESPECIFIQUE QUE
PASARIA EN EL PROGRAMA. ASUMA EL TIPADO POR DEFECTO PARA
CUALQUEIR VARIABLE NO ESPECIFICADA.
4. REAL :: PHASE (0:11) = (/0., 1., 2., 3., 3., 3., &
3., 3., 3., 2., 1., 0. /)
8. INTEGER :: I, J
INTEGER, DIMENSION (10) :: SUB1
INTEGER, DIMENSION (0:9) :: SUB2
INTEGER, DIMENSION (100) :: IN = &
(/((0,I=1,9), J*10, J=1,10)/)
SUB1 = IN (10:100:10)
SUB2 = SUB1 / 10
WRITE (*,100) SUB1 * SUB2
100 FORMAT (1X,10I8)
La declaración es válida, el arreglo ivec1 será inicializada por los valores del
1 al 10 y el arreglo ivec2 irán en contra. El arreglo data1 sera inicializado por
los valores 1., 4., 9., hasta el 100. La declaración write imprimirá los valores
de 100., 81., 64., etc hasta llegar al valor de 1, esto es debido a los valores
descritos en el suscriptor del vector.
Es invalido, esto debido a que no imprimirá una sola tabla debido a las
instrucciones son ambiguas, podría imprimir mas de una tabla.
QUIZ 5.2
PARA LAS PREGUNTAS DE 1 A 3, DTERMINE EL NUMERO DE ELEMENTOS
EN ARREGLO ESPECFICADO POR LA DECLARACION DE ESTATUROS Y EL
RANGO DE SUSCRIPTOR VALIDO PARA CADA ARREGLO.
1. REAL, DIMENSION (-64:64, 0:4) :: DATA_INPUT
294 elementos, el valor de rango es válido en in (-3, -3, 1) para in (3, 3, 6).
Válido, los arreglos data1, data2 y data_out todos están bien definidos, por
lo tanto las instrucciones como el primer write imprimirá los primero 5 valores
como 1., 11., 11., 11., 11., y en el segundo los dos valores serán ambos 11.
Los valores son leídos en línea, así queda como el valor (1,1) = 11.2, (1,2) =
16.5, (1,3) = 31.3, etc. El valor correspondiente a mydata (2,4) = 17.1
El valor es de -9.0
QUIZ 5.3
PARA LAS PREGUNTAS 1 A 5, DETERMINE CUAL SERIA LA IMPRESIÓN EN
PANTALLA DE LAS SIGUIENTES DECLARACIONES WRITE.
1. REAL, DIMENSION (-3:3, 0:50) :: VALUES
WRITE (*,*) LBOUND (VALUES, 1)
WRITE (*,*) UBOUND (VALUES, 2)
WRITE (*,*) SIZE (VALUES, 1)
WRITE (*,*) SIZE (VALUES)
WRITE (*,*) SHAPE (VALUES)
Lbound = -3
Ubound = 50
Size = 7
Size = 357
Shape = 7,51
Ubound = 4
Size = 60
Shape = 3, 4, 5
Maxval = 9.0
Maxloc = 5,5
4. REAL, DIMENSION (2,2) :: ARR1
ARR1 = RESHAPE ( (/3., 0., -3., 5./ ), (/2,2/) )
WRITE (*,*) SUM ( ARR1 )
WRITE (*,*) PRODUCT ( ARR1 )
WRITE (*,*) PRODUCT ( ARR1, MASK = ARR1 / = 0. )
WRITE (*,*) ANY ( ARR1 > 0.)
WRITE (*,*) ALL ( ARR1 > 0. )
Sum = 5.0
Product = 0.0
Product = - 45.0
Any = T
All = F
1 0 0 0 0
0 0 0 0 0
3 2 1 0 0
0 0 0 0 0
5 4 3 2 1