Está en la página 1de 16

Universidad Autónoma del Carmen

Dependencia Académica de Ciencias Químicas y


Petroleras
Facultad de Química

NOMBRE DEL TRABAJO

Ejercicios Quiz 5.1, Quiz 5.2, Quiz 5.2 y


Ejercicio de Fin de Capítulo 5.14

MATERIA
PROGRAMACIÓN

PRESENTA
Ian Gennaro Güitrón Sagaón

DOCENTE DE LA ASIGNATURA
Alberto Vázquez Martínez

CD. DEL CARMEN, CAMPECHE, MEXICO. 27 DE JUNIO DEL 2020

ENTREGA: 23.00 HRS


INDICE

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:

De esta forma, se pueden realizar todas las operaciones que se designen en la


instrucción por medio de las iteraciones con un solo comando.
Así como los datos, existen diferentes formas de inicializar una matriz en Fortran:
1. Usando declaraciones de asignación
2. Usando declaraciones de tipo de asignación por tiempo de compilación.
3. Usando declaración tipo READ

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)

La longitud de la primera declaración es 15.

2. LOGICAL :: TEST (0:255)

La longitud de la declaración estipulada es 256.

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. /)

La declaración es válida, el arreglo se iniciara con los valores declarados en


el constructor.

5. REAL, DIMENSION(10):: PHASE = 0.

Es válido, los 10 valores en el arreglo serán equivalentes a 0.

6. INTEGER :: DATA1 (256)


DATA1=0
DATA1 (10:256:10)=1000
WRITE (*,100) DATA1
100 FORMAT (1X,10I8)
La declaración es válida, cada 10 valores dentro del arreglo se iniciarán con
el valor 1000, y todos los demás valores serán inicializados o escritos con 0.
Los valores serán entonces escritos posteriormente.

7. REAL, DIMENSION (21:31) :: ARRAY1 =10.


REAL, DIMENSION (10) :: ARRAY2 = 3.
WRITE (*,100) ARRAY1 + ARRAY 2
100 FORMAT (1X, 10I8)

La declaración es inválida, no serán conformados debido a que la variable


array1 y array2 tienen longitud diferentes, el primero 11 y el segundo solo 10.

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)

Es válido, cada diez elementos el arreglo in se iniciará o se escribirá con


valores de 10, 20, 30, etc. Todos los demás elementos serán cero. Los 10
elementos del arreglo sub1 serán inicializados con los valores de 10, 20, 30
hasta el 100, y el arreglo sub2 serán inicializadas con 1, 2, 3 hasta el 10. La
multiplicación se dará por que los arreglos sub1 y sub2 sean homogéneas.

9. REAL, DIMENSION (-3:0) :: ERROR


ERROR (-3) = 0.00012
ERROR (-2) = 0-0152
ERROR (-1) = 0.0
WRITE (*,500) ERROR
500 FORMAT (T6, ERROR = ,/,(3X,I6))

Los valores en el arreglo error serán impresos, de cualquier forma, como


error (0) nunca se inicializa, no esta la certeza de si se iniciara o no de forma
correcta o arrojara un error al correr el promp.

10. INTEGER, PARAMETER :: MAX = 10


INTEGER :: 1
INTEGER, DIMENSION (MAX) :: IVEC1 = (/(I, I=1,10)/)
INTEGER, DIMENSION (MAX) :: IVEC2 = (/(I, I=10, 1, -1)/)
REAL, DIMENSION (MAX) :: DATA 1
DATA1 = REAL (IVEC1)**2
WRITE (*,500) DATA1 (IVEC2)
500 FORMAT (IX, ‘OUTPUT = ’, /, 5 (3X, F7.1))

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.

11. INTEGER, PARAMETER :: NPOINT = 10


REAL, DIMENSION (NPOINT) :: MYDATA
DO I= 1, NPOINT
READ (*, *) MYDATA
END DO

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

645 elementos en el arreglo, el rango es valido y es data_input (-64,0) para


data_input (64,4)

2. INTEGER, PARAMETER :: MIN_U = 1, MAX_U = 70


INTEGER, PARAMETER :: MAXFIL=3
CHARACTER (LEN=24), DIMENSION (MAXFIL, MIN_U : MAX_U) :: FILENM

210 elementos, el rango valido es filenm (1,1) a filenm (3,70)

3. INTEGER, DIMENSION (-3:3 , -3:3, 6) :: IN

294 elementos, el valor de rango es válido en in (-3, -3, 1) para in (3, 3, 6).

DETERMINE CUAL DE LAS SIGUIENTES DECLARACIONES FORTRAN ES


VALIDA. POR CADA DECLARACION VALIDA, ESPECIFIQUE QUE PASARA EN
EL PROGRAMA. ASUMA EL TIPADO POR DEFECTO PARA CUALQUIER
VARIABLE QUE SU TIPO NO ESTE ESPECIFICADO.
4. REAL, DIMENSION (0:11, 2) :: DIST
DIST = (/ 0.00, 0.25, 1.00, 2.25, 4.00, 6.25, &
9.00, 12.25, 16.00, 20.25, 25.00, 30.25, &
-0.00, -0.25, -1.00, -2.25, -4.00, -6.25, &
-9.00, -12.25, -16.00, -20.25, -25.00, -30.25/)

La declaración es inválida, el constructor del arreglo no esta hecho conforme


al arreglo dist.

5. REAL, DIMENSION (0:11, 2) :: DIST


DIST = RESHAPE ((/ 0.00, 0.25, 1.00, 2.25, 4.00, 6.25, &
9.00, 12.25, 16.00, 20.25, 25.00, 30.25, &
-0.00, -0.25, -1.00, -2.25, -4.00, -6.25, &
-9.00, -12.25, -16.00, -20.25, -25.00, -30.25/) &
, (/12,2/))

La declaración es válida, el arreglo dist será iniciado con los valores


establecidos den la instrucción reshape

6. REAL, DIMENSION (-2:2, -1:0) :: DATA1 = &


RESHAPE ( (/ 1.0, 2.0, 3.0, 4.0, 5.0, &
6.0, 7.0, 8.0, 9.0, 0.0 /), &
(/ 5, 2 /) )
REAL, DIMENSION (0:4, 2) :: DATA2 = &
RESHAPE ( (/ 0.0, 9.0, 8.0, 7.0, 6.0, &
5.0, 4.0, 3.0, 2.0, 1.0 /), &
(/ 5, 2 /) )
REAL, DIMENSION (5,2) :: DATA_OUT
DATA_OUT = DATA1 + DATA2
WRITE (*,*) DATA_OUT (:.1)
WRITE (*,*) DATA_OUT (3,:)

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.

7. INTEGER, DIMENSION (4) :: LIST1 = (/1, 4, 2, 2/)


INTEGER, DIMENISON (3) :: LIST2 = (/1, 2, 3/)
INTEGER, DIMENSION (5, 5) :: ARRAY
DO I=1,5
DO J = 1,5
ARRAY (I,J) = 1 + 10 * J
END DO
END DO
WRITE (*,*) ARRAY (LIST1, LIST2)

Es válido, estas declaraciones imprimirán por medio de la sentencia do un


arreglo matricial de 3 columnas por 4 filas, donde los valores serán: 11, 21,
31 en la primera fila; 14, 24, 34 en la segunda; 12, 22, 32 en la tercera y 12,
22, 32 en la cuarta.

8. INTEGER, DIMENSION (4) :: LIST = (/2, 3, 2, 1/)


INTEGER, DIMENISON (10) :: VECTOR = ( / (10*K, K= -4.5) / )
VECTOR (LIST) = ( / 1, 2, 3, 4 /)
WRITE (*,*) VECTOR

La declaración es inválida, no son congruentes las dimensiones establecidas


en cada uno de los arreglos establecidos.
SUPONGA QUE UN ARCHIVO INSERTADO ES ABIERTO EN LA UNIDAD I/O 2 Y
CONTIENE LOS SIGUIENTES DATOS:
11.2 16.5 31.3 3.1414 16.0 12.0
1.1 9.0 17.1 11. 15.0 -1.3
10.0 11.0 12.0 13.0 14.0 5.0
15.1 16.7 18.9 21.1 24.0 -22.2

¿QUE DATOS SE LEERIAN DEL ARCHIVO INSERTADO POR CADA UNO DE


LAS SIGUIENTES DECLARACIONES? ¿CUAL SERIA EL VALOR DE MYDATA
(2,4) EN CADA UNO DE LOS CASOS?
9. REAL, DIMENSION (3,5) :: MYDATA
READ (2,*) MYDATA

La información será recopilada por las primeras 3 columnas empezando por


los valores de la fila 1, siendo estsos 11.2, 16.5, y 31.3; el valor de mydata
(2,4) es 15.

10. REAL, DIMENSION (0:2, 2:6) :: MYDATA


READ (2,*) MYDATA
La información será leída en orden de columnas, de la siguiente forma,
mydata(0,2) = 11.2, (1,2) = 16.5, (1,3) = 31.3, etc. El valor asignado para
mydata (2,4) = 17.1.

11. REAL, DIMENSION (3,5) :: MYDATA


READ (2,*) ((MYDATA (I,J), J = 1,5), I = I, 3)

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

12. REAL, DIMENSION (3,5) :: MYDATA


DO I = I, 3
READ (2,*) (MYDATA (I,J), J = 1,5)
END DO

La información es igual que en la anterior organizado en orden de fila, sin


embargo, esto solo ocurre con los primeros 5 valores donde cada línea será
leida por las siguientes declaraciones read. Por consiguiente, los próximos
valores read empiezan con el primer valor del archivo input. El valor de
mydata (2,4) = 11.0

RESPONDA LAS SIGUIENTES PREGUNTAS


13. ¿CUAL ES EL VALOR DE DIST(6,2) EN LA PREGUNTA 5 DE ESTE QUIZ?

El valor es de -9.0

14. ¿CUAL ES EL RANGO DE MYDATA EN LA PREGUNTA 10 DE ESTE QUIZ?

El rango del arreglo mydata es 2.

15. ¿CUAL ES LA FORMA DE MYDATA EN LA PREGUNTA 10 DE ESTE QUIZ?

La forma del arreglo mydata es 3 x 5

16. ¿CUAL ES LA EXTENCION DE LA PRIMERA DIMENSION DE


DATA_INPUT EN LA PREGUNTA 1 DE ESTE QUIZ?

La extensión de la primera dimensión del arreglo data_input es 129.

17. ¿CUAL ES EL MAXIMO NUMERO DE DIMENSIONES QUE UN ARREGLO


PUEDE TENER EN FORTRAN 90/95?
La dimensión máxima es 7.

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

2. REAL, ALLOCATABLE, DIMENSION ( :, :, : ) :: VALUES



ALLOCATE ( VALUES (3, 4, 5), STAT = ISTAT )
WRITE (*,*) UBOUND (VALUES, 2)
WRITE (*,*) SIZE (VALUES)
WRITE (*,*) SHAPE (VALUES)

Ubound = 4
Size = 60
Shape = 3, 4, 5

3. REAL, DIMENSION (5,5) :: ARR1


DO I = 1, 5
DO J = 1, 5
INPUT1 (I, J) = I + J – 1
END DO
END DO
WRITE (*,*) MAXVAL (INPUT1)
WRITE (*,*) MAXLOC (INPUT1)

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

5. INTEGER, DIMENSION (2,3) :: ARR2


ARR2 = RESHAPE ( /3, 0, -3, 5, -8, 2/), (/2, 3/) )
WHERE ( ARR2 > 0)
ARR2 = 2 * ARR2
END WHERE
WRITE (*,*) SUM ( ARR2, MASK = ARR2 > 0. )

El valor impreso será el de sum = 20.0

6. REESCRIBA LA PREGUNTA 3 USANDO EL CONSTRUCTO FORALL


PARA INICIALIZAR INPUT1.

Real, dimenison (5,5) :: input1


Forall ( i = 1:5, j = 1:5)
Input1 (i,j) = i + j – 1
End forall
Write (*,*) maxval (input1)
Write (*,*) maxloc (input1)
DETERMINE CUAL DE LOS SIGUIENTES SETS DE DECLARACIONES
FORTRAN SON VALIDOS. PARA CADA SET DE DECLARACIONES VALIDAS,
ESPECIFIQUE QUE PUEDE PASAR EN EL PROGRAMA. PARA CADA SET DE
DECLARACIONES INVALIDAS, ESPECIFIQUE QUE ESTA MAL. ASUMA LOS
TIPOS POR DEFECTO PARA CUALQUIER VARIABLE QUE NO ESTEN
ESPECIFICADOS.
7. REAL, DIMENSION (6) :: DIST1
REAL, DIMENSION (5) :: TIME
DIST1 = ( / 0.00, 0.25, 1.00, 2.25, 4.00, 6.25 /)
TIME = ( / 0.0, 1.0, 2.0, 3.0, 4.0 /)
WHERE ( TIME > 0. )
DIST1 = SQRT (DIST1)
END WHERE

Invalido, el control de la máscara donde el constructor where tiene la misma


forma que el arreglo dist en el cuerpo where construct.

8. REAL, DIMENSION (:), ALLOCATABLE :: TIME


TIME = ( / 0.00, 0.25, 1.00, 2.25, 4.00, 6.25, &
9.00, 12.25, 16.00, 20.25 /)
WRITE (*,*) TIME
Invalido, falta la instrucción de allocate.

9. INTEGER, DIMENSION (5,5) :: DATA1 = 0.


FORALL (I = 1:5:2, J = 1:5, I-J >= 0 )
DATA1 (I,J) = I – J + 1
END FORALL
WRITE (*,100) ( (DATA1 (I,J), J = 1, 5), I = 1, 5 )
100 FORMAT (1X, 5I6)

La matriz o arreglo impreso será el siguiente:

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

10. LOGICAL, DIMENSION ( :,: ) , ALLOCATABLE :: TEST


WRITE (*,*) ALLOCATED (TEST)
La declaración es válida, y como hace falta la declaración allocate, el
resultado impreso será fall
EJERCICIO DE FIN DE CAPITULO 5.14
REESCRIBA LAS DECLARACIONES FORTRAN DEL EJERCICIO 5 – 13,
APROVECHANDO LAS VENTAJAS DE LA FUNCION TRANSFORMACIONAL
INTRINSECA DE COUNT.
CONCLUSIONES
Al ser de los últimos problemas que se proponen en el semestre, se puede ver a
simple vista que se hace uso de dos factores importantes: la lógica de programación
y las instrucciones de Fortran.
A lo largo de la realización del proyecto se notó que a pesar de tener una idea de
cómo se debería de resolver el problema normalmente los errores mas comunes
son de sintaxis o de como plasmar de manera correcta las instrucciones para que
el compilador realice las acciones e imprima los resultados de la forma que nosotros
como programadores podamos ser lo más claros posibles para los usuarios finales.
A pesar de que la naturaleza del problema muestre que con el conocimiento de las
matrices y ciclos de iteración es suficiente, los formatos y la correcta aplicación de
las instrucciones condicionales o sentencias if son los que determinan la correcta
resolución del problema en cuestión.
BIBLIOGRAFIA
Fortran 95 / 2003 for Scientist and Engineers, Tercera Edición, Stephen J.
Chapman, Editorial McGraw – Hill, año 2007, 982 páginas.

Introducción a la Programación en Fortran 90 para Químicos, Prácticas. Primera


Edición. Pedro Alberto Enríquez Palma, María Pilar Puyuelo García – Universidad
de la Rioja, año 2007. 276 páginas.

También podría gustarte