Sei sulla pagina 1di 15

CAPITULO VI

ARREGLOS

Resultados Del Aprendizaje:


El alumno conocer y har uso de las memorias tabulares conocidas como
arreglos.(Tablas Dimensiones).

CONTENIDO :

Arreglos Lineales ( Vectores )


Arreglos Bi-direccionales ( Matrices )
Arreglos Multi-direccionales, Casos y consideraciones
Ejercicios ejemplificativos
Evidencias Para El Aprendizaje

Pregunta Gua:

Qu sucede con los datos almacenados en un arreglo, una vez que se termina
el proceso?

91
Sesin Presencial:
VI.1 A r r e g l o s Variables con subndices.

Estructura de datos.- Es una coleccin de datos del mismo tipo organizados de un modo
especifico. En Fortran se puede contar con 2 tipos de estructuras de datos: Estructuras de
datos Estticas y Estructuras de datos Dinmicas.
Estructuras Estticas de datos.- Son en las que se asigna una cantidad fija de memoria
cuando se declara la variable.
Estructuras Dinmicas de datos.- Son colecciones de datos cuyo tamao y forma de
estructura y de memoria puede aumentar disminuir a medida que se ejecuta el
programa.Frecuentemente se necesita realizar operaciones con conjuntos de datos
numricos o de datos no numricos del mismo tipo, y para esto, es conveniente
nombrarlos con una misma variable, pero ponindoles subndices, por ejemplo supngase
que se tiene la siguiente serie de valores: 75, 68, 93, 84,. ..etc. los cuales representan
las calificaciones obtenidas por un alumno y las llamaremos Nota (con el subndice i ),
sea Nota(I) dado que todos son datos del mismo problema.
Este es un ejemplo de arreglo lineal( llamado tambin arreglo unidimensional o vectorial).
Habr ejemplos cuyos datos no se ajusten al modelo lineal, sino a un modelo de una
matriz(Conjunto de modelos lineales).
Ejemplo anterior : Nota(1)=75, Nota(2)=68, Nota(3)=93), Nota(4)=84 ..... Nota(i)

Ahora bien considrense los siguientes 2 conjuntos lineales:

Nota(1,1) nota (1,2) nota (1,3) nota (1,4) Representado por : Nota ( x , y ) donde x,y sern los sub-
Nota(4,1) nota (4,2) nota (4,3) nota (4,4) ndices, que indican la posicin del cada valor de Nota.

Los coeficientes a11,a12, a2i y a22 son nmeros dados, mientras que X1 x 2 y tambin Y1 y Y2
son variables.

Ejemplo :Las coordenadas de 2 sistemas coordenados diferentes en el plano.


Disponiendo los coeficientes en la forma en que se presentan en la transformacin y
encerrndolos entre parntesis se obtiene una disposicin de la forma:

nota11 nota12 ...... nota1N


nota2i nota22 ....... notaNM

El cual es un ejemplo de arreglo matricial (llamado tambin arreglo bidimensional). Los


valores nota1,n,..., notanm reciben el nombre de elementos del arreglo.A la matriz completa se
le puede nombrar con cualquier variable permitida ponindole 2 subndices, por ejemplo X 1
1 ,... XI J donde el primer subndice puede indicar los renglones y el segundo las columnas.

92
6.1) Ejemplo.-
Escriba un ejemplo de arreglo lineal y un ejemplo de arreglo matricial:

Solucin x1 x2 x3 . . . . . xn

Arreglo lineal X(1)= 9 x(2) = 8 x (3) = 7 :

Arreglo matricial

9 8 7 6 Matriz (3,2)=0
Matriz (2,3)=3
5 4 3 2
Matriz (4,4)=6
1 0 1 2
3 4 5 6

Se usan arreglos en unos programas cuando se manejan conjuntos de datos del mismo
tipo, y si todos o parte de ellos se van a utilizar ms de una vez durante la ejecucin del
programa o si se necesitan almacenar para un uso posterior. Una vez concluido el
proceso, las memorias por ser virtuales (transitorias) desaparecen.

VI.2 . Puntos a tomar en cuenta acerca de los arreglos.


1.- En Fortran un arreglo se puede nombrar por medio de una variable ordinaria con
subndices, los cuales se deben poner entre parntesis, y si son 2 o ms, se deben
separar con comas).

Ejemplo:
lolo(i), x(i,j), chencho(z)

2.- Todos los elementos de un arreglo deben ser del mismo tipo
(numricos, caracter, lgicos..)
3.- Los nombres de los arreglos (variables sub indicadas) se pueden utilizar en un
programa como si fueran variables ordinarias.
4.-Se puede hacer referencia a cualquiera de los elementos de un arreglo,
escribiendo el nombre del arreglo seguido del valor del(los) subndices encerrados
entre parntesis.

VI.3 Puntos a tomar en cuenta acerca de los subndices


1.- Los subndices deben ser enteros constantes o variables enteras, frmulas y/o
nombres de funciones (siempre y cuando produzcan resultados enteros), por

Ejemplo:
pepe(I) gaby (irenglon,icolumna) valor(n1+n2) lugar(n**2, m-18)

93
Debe observarse que los subndices son valores numricos, aun y cuando se utilicen
diferentes variables para representarlos en un mismo nombre de arreglo, por ejemplo si i y
j son subndices y tienen el mismo valor, entonces x(i) y x(j) se estn refiriendo al mismo
elemento del arreglo T. Al momento de asignar un valor a una variable con subndice, este
valor ocupa el lugar reservado en memoria para esa variable con ese subndice, una vez
almacenados de esta manera todos los valores, se les puede utilizar mas de una vez en
cualquier parte del programa.

2.- El valor mximo de un subndice en una variable nunca debe ser mayor que el
especificado al declarar la variable donde se dice la medida (dimensin).

3.- En un mismo programa no debe utilizarse una misma variable con y sin subndice
porque se genera confusin al lenguaje y por lo tanto un error.

Declaracin de arreglos

VI.4 Arreglo lineal. Mejor conocido como Vectores y tiene la forma:

Forma 1: Dimension (a) :: nombre tipo


Forma 2:Tipo, Dimension ( a : b) :: nombre Tipo, Dimension (#):: nombre

tipo = Tipo de datos (real, integer, etc.) que componen el arreglo.


[a : b] = Intervalo de valores para los subndices
a = Lmite inferior
b = Lmite superior
# = Nmero de elementos del arreglo
nombre = Nombre del arreglo (Variable cualquiera).

Nota: El nmero de elementos en una Dimension dada es: # = (b - a) + 1

6.2) Ejemplo
Escriba las instrucciones necesarias para declarar un arreglo que contenga 3
elementos enteros ( utilice las 2 formas anteriores).

Integer, Dimension( 1 : 3 ) :: numero ! formato uno


Integer, Dimension (3):: numero ! formato dos

Forma #3 Tipo Nombre #


6.3) Ejemplo
Escriba la instruccin necesaria para realizar la misma declaracin del ejemplo anterior.
Integer:: Numero (3)

94
6.4) Ejemplo.- Escriba las declaraciones para 5 arreglos de diferentes tipos: entero, real,
caracter y lgico y que contengan 10 elementos cada uno

Real, Dimension (10) :: valor


Integer, Dimension(2,5):: numero
Character ,(len = 30), Dimension (10):: nombre
Logical, Dimension (10):: serie

6.5) Ejemplo

Escriba 3 declaraciones diferentes para un arreglo lineal con 5 elementos reales.

Real, Dimension(3):: valor


Real, Dimension (-7: 3):: cant
Real, Dimension (6 : 9):: serie

VI.5 Inicializando Arreglos


Si un arreglo no es inicializado en el momento de su declaracin, su contenido ser
indefinido. Existen Cuatro Formas distintas de inicializar los arreglos:

Forma 1:
Se puede inicializar un arreglo usando las instrucciones Do y Read, para ello nos
auxiliaremos del ejemplo a continuacin descrito.

6.6) Ejemplo.-
Elabore el diagrama de flujo y codificacin para leer y desplegar una serie de n valores
enteros que representen al vector a.

PROGRAM VECTOR
INTEGER:: LIMITE = 20, I, N
INTEGER , DIMENSION (LIMITE ):: A
READ(*,1) N
1 FORMAT (I1)
DO I= 1,N
READ(*,2) A (I)
WRITE (*,2) A (I)
END DO
2 FORMAT ( X, I5)
END PROGRAM VECTOR

95
Aqu podemos observar varias cosas:

La memoria seleccionada inicialmente es mayor a la necesaria (Esto genera el


principio de lo que se conoce como Memoria Dinmica)

En un mismo Ciclo, leemos y desplegamos lo ledo.

No importa el nombre de la variable utilizada como subndice, sino el valor que


tome sta, adems se pueden separar espacios adicionales (de mas).

Forma 2:
Lectura y despliegue Iteradas, en esta forma se usa la instruccin Read con una
instruccin Do implcita, vea el siguiente ejemplo:
Ejemplo 6.7
Haga el diagrama de flujo y codificacin para leer y desplegar el mismo arreglo del
ejemplo anterior, pero usando lectura y despliegue iteradas.
PROGRAM INTERADO
IMPLICIT NONE
INTEGER :: I,N, LIMITE = 20
INTEGER :: DIMENSION (LIMITE)::A
READ (*,1)N
1 FORMAT (I1 ) ! AQU N SIEMPRE SER MENOR O IGUAL A NUEVE
READ (*,2) (A(I),I=1,N) ! ES NECESARIO CONOCER N PARA DISEAR FORMATO
2 FORMAT (9I1) ! AQU LEE NUEVE VALORES PARA A CON 1 DIGITO CADA UNO
WRITE (*,3) (a(i),I=1,N)
3 FORMAT(5X,9(A( ,I1, ) = ,I3))
END PROGRAM INTERADO

AQU SE INDICA QUE LO QUE SE


ENCUENTRA ENTRE EL PRXIMO
PARNTESIS SE REPITE NUEVE VECES

Despliega
_____a(1) = __5 A(2)=__3 A(3) = __8 A(4) =__6

En Diagrama sera

Dentro de un despliegue iterado se pueden realizar algunas operaciones sencillas

96
Forma 3:
Al momento de declarar una variable como arreglo se puede inicializar, por ejemplo
para inicializar un arreglo entero de 3 elementos hacemos: (no separar espacios de
ms)
Integer, Dimension (3):: A = (/15 , 7, 9 /)

tambin se puede hacer lo siguiente: se declara la variable como arreglo, y dentro


del programa se inicializa, antes de que se utilice.

Integer, Dimension (3):: x


x =( / 6 , 7,8,1 / )
Forma 4:

Esta forma es una combinacin de los mtodos anteriores, por ejemplo si los valores
de todos los elementos del arreglo tienen una secuencia, por ejemplo 6, 8, 10, etc., se
puede utilizar un Do iterado al momento de la declaracin, o sea:

Integer, Dimension (10):: x = (/ (i, i=4, 6,10) /)

Si todos los elementos del arreglo van a tener el mismo valor, por ejemplo el valor 55,
hacemos:

Integer, Dimension (10):: x = 55

VI.5 Operaciones con Arreglos completos


Un arreglo se puede utilizar como si fuera una variable ordinaria cualquiera (x, y, ..
etc.) para realizar algunas operaciones, pero refirindose al arreglo completo; pero los
arreglos tienen que ser exactamente iguales, o sea el mismo nmero de dimensiones
y el mismo numero de elementos.
Las operaciones que se pueden realizar son:
1.- Desplegar arreglos
2.- Sumar 2 arreglos iguales
3.- Suma, resta, multiplicacin o divisin de un arreglo con una constante (valor
escalar)

97
Forma Anterior Forma Moderna
Desplegar arreglos Iterando equivale a:

Do i = 1 , 4 write(*,10) (c(e),I=1,4)
Write(*,*) c(i) 10 Format('', 'c = ',4(F6.1,1X))
Enddo

Suma de 2 arreglos Tambin puede hacer:


Do I = 1, n suma( I ) = a ( I ) + b ( I )
Suma( i ) = a( i ) + b( i )
Enddo

Aqu automticamente se suman


elemento a elemento

Multiplicar un Arreglo por un Escalar.- Esta operacin se ejecuta con cada uno de los
elementos del arreglo. Esto sucede por ser una funcin propia de FORTRAN 90-95 dentro de
sus funciones de librera ( Ver Anexo Cuatro A.4)

VI.7 Arreglos matriciales.


Para declarar un arreglo matricial tenemos 3 formas.

Forma 1: tipo, Dimensin( a:b, c:d):: nombre

Forma 2: tipo, Dimensin( #,#):: nombre

Donde:
Tipo .- Tipo de datos que contendr el arreglo (reales, enteros, etc.) a:b
No. de renglones (a = valor inicial, b = valor final)
No. de columnas (c = valor inicial, d = valor final)
#.-- No. de renglones y columnas (1 No. de renglones, 2 No. de columnas)
Nombre .- Nombre del arreglo (variable cualquiera)

Nota: Puede haber hasta 7 dimensiones o subndices, y el nmero de elementos en una


dimension dada es: # = (b - a) + 1
6.11) Ejemplo
Escriba las instrucciones necesarias para declarar un arreglo de 3x3 elementos
enteros ( 3 renglones y 3 columnas), utilice las 2 formas anteriores .

Integer, Dimension( 1 : 3,1:3) ::valor ! forma Uno

Integer , Dimension (3, 3):: valor ! forma Dos

98
Forma 3: Tipo:: nombre(#,#)

6.12) Ejemplo

Escriba la instruccin necesaria para realizar la misma declaracin el ejemplo anterior.

Integer:: valor(3, 3) ! forma Tres

6.13) Ejemplo

Escriba 3 declaraciones diferentes para un arreglo matricial de 5 renglones y 5 columnas


para elementos reales.

Real,Dimension(10:14,6:10)::valor
Real,Dimension (-7 : -3, 14:18)::arreglo
Real, Dimension ( 5 , 5):: matriz

9.7) Inicializando Arreglos matriciales.- Para inicializar un arreglo existen 4 formas de


inicializar los arreglos matriciales:

Forma 1:
Se puede inicializar un arreglo usando las instrucciones Do y Read

Ejemplo 6.14

Haga el diagrama de flujo y codificaci6n para leer e desplegar un arreglo matricial de


5*5 valores enteros cualquiera.
La solucin Clsica sera:

PROGRAM MATRIZ
IMPLICIT NONE
INTEGER :: I,J ,N,= 5 , MAXIMO 10
INTEGER, DIMENSION (MAXIMO, MAXIMO)::A
UNO: DO I=1,N
DOS: DO I=1,N
WRITE (*,*) DAME UN VALOR
READ (*,*) A (I, J)
WRITE(*,*) VALOR DADO ES , A(I, J)
END DO DOS
END DO UNO
END PROGRAM MATRIZ

99
Forma 2:

Lectura e impresin Iteradas, en esta forma se usa la instruccin Read con dos
instrucciones Do implcitas
Recordando:

Do's Implicitos Anidados Iteradamente Equivale a:

Exterior:Do i=1, n

Interior: Do j=1, m
read(*,*)((a( i, j), i=1,n), j= 1,m)
Read ( *,*) a( I,j)
Enddo Interior

Enddo Exterior

De sta misma manera el ejemplo anterior quedara solucionado :

La solucin interada sera:

PROGRAM MATRIZ_INTERADA
IMPLICIT NONE
INTEGER::I,J,N=5, MXIMO = 10
INTEGER, DIMENSION(MXIMO, MXIMO) =A
WRITE(*,*) DAME CINCO VALORES
READ (*,*) (( A (I,J), I=1,N), J=1,N)
WRITE (*,*) LOS VALORES LEIDOS SON
WRITE (*,1) (( A (I,J), I=1,N), J=1,N)
1 FORMAT (5, (5 ( 5X, I3, 2X ),1))
END PROGRAM MATRIZ_INTERADA

La solucin anterior dar como resultado 5 valores separados por 2 columnas, brinca
rengln y se repite 5 veces, es decir como una matriz.
Observe que en la impresin se cambio el nombre de los subndices.

100
6.15) Ejemplo
Diga si los siguientes arreglos son el mismo nmero de elementos y modo del contenido y si
se pueden restar el vector x del vector y.

Real, Dimension(11 : 14):: x = (/9., 7., 5., 3. /)


Real, Dimension ( 15 : 18):: y = (/ 8., 6., 4., 2. /)

Solucin
Los arreglos son exactamente iguales en el nmero de sus localidades (ms no en su
contenido)(lectura anterior de un arreglo matricial) , por lo tanto SI se pueden restar.

6.9 La Funcin Reshape


Forma 3:
Al momento de declarar una variable como arreglo se puede inicializar, pero para esto se
debe utilizar una funcin integrada al Fortran (funcin de biblioteca) llamada RESHAPE la
cual cambia la forma de un arreglo sin cambiar el nmero de elementos en el, por ejemplo
para inicializar un arreglo entero de 3*3 elementos hacemos: Arreglo a leer.

Notas
75 71 93
64 38 96
78 71 86

Integer,Dimension( 5, 5):: A(3,3) =Reshape((/75,64,78,71,38,71,93,96,86 /), (/ 3, 3 /))

Observe que los datos se introducen ahora por columna, adems si no se usa la funcin,
se hubiera tornado como un arreglo lineal de 3*3 = 9 elementos.
Tambin se puede hacer lo siguiente: se declara la variable como arreglo, y dentro del
programa se inicializa ste, antes de que se utilice.

Integer, Dimension (5, 5):: notas


notas Reshape((/75,64,78,71,38,71,93,96,86 /), (/ 3, 3 /))

101
Evidencias del aprendizaje

6.1.- Diga que otros nombres reciben los arreglos.


6.2.- Explique que es un arreglo.
6.3.- De un ejemplo de un arreglo uni dimensional (vector).
6.4.- De un ejemplo de un arreglo bi dimensional (matriz).
6.5.- De un ejemplo de un arreglo tridimensional (cubo).
6.6.- Pueden existir arreglos de ms de tres dimensiones (poli
dimensionales ) ?
6.7.- Si tenemos un arreglo uni dimensional de cinco elementos como
localiza el contenido de la tercera unidad?
6.8.- Qu son los subndices en un arreglo?
6.9.- Un subndice puede llegar a ser no entero, si, no por que?
6.10.-Se puede tener como subndice una expresin matemtica?; si, no y
Cmo deber de ser el resultado?
6.11.- Puede el nmero de subndice ser menor a lo declarado?
6.12.-Puede ser el numero de subndice ser mayor a lo declarado, por
que?
6.13.- A que se le denomina arreglo esttico?
6.14.- A que se le llama arreglo dinmico?
6.15.- Es posible que los subndices sea negativos?
6.16.- Cuntos subndices utiliza un arreglo matricial?
6.17.- Cuntos subndices utiliza un arreglo cbico?
6.18.- Qu principal ventaja puede presentar el uso de arreglos?
6.19.- Se puede decir que un arreglo es una memoria?
6.20.- Podemos almacenar nuestra informacin en un arreglo en vez de un
archivo, si, no y por qu?
6.21.- Al trmino del proceso de un programa con arreglos se conserva la
informacin de los arreglos?
6.22.- Para qu sirve es estatuto reshape?
6.23.- Escriba un ejemplo con el estatuto reshape.
**Los problemas a continuacin presentados se debern resolver haciendo uso
de todos los pasos sugeridos para una programacin exitosa y utilizando
arreglos.
6.24.- Elabore un programa que lea dos fuerzas en tres dimensiones y las
reste entre s, para dar la fuerza resultante.

6.25.- Elabore un programa que lea cinco fuerzas en tres dimensiones y las
sume entre s, para determinar la fuerza resultante.

6.26.- un programa que lea n valores temperatura en grados Celsius y la


convierta a grados Fahrenheit, kelvin y Ranking si las frmulas fueran:
0
F = 9/5( 0c+32) 0
K= 5/9(0f-32)+273.15 0
R= 3000k

102
6.27.- Haciendo uso de los operadores relacionales, localice el valor mayor
entre tres nmeros ledos.

6.28.-Elabore un programa que lea n valores de l de tal forma que calcule


el rea de dichos cuadrados.

6.29.- Un submarino amarillo viaj por las turbulentas aguas del ro


Chuvscar, durante n ocasiones, y en cada ocasin su distancia
viajada fue distinta y se ley en millas marinas, se desea conocer el
equivalente en millas terrestres, yardas y metros. Si : (milla marina =
1852.9m = 2025 yardas, milla terrestre = 1609.3m = 1760 yardas)

6.30.- En una piscina de clavados con 10m de profundidad mxima; una serie
de n competidores se lanzan y cada uno llega a distinta profundidad
(p); se desea saber cual es la presin mxima que se sometieron, si
la alberca tena una temperatura de 16.6 grados centgrados.( a esa
temperatura un centmetro de mercurio = 0.01358 kilogramos/
cm 2 = 13.58 cms de agua). Suponga la profundidad p en cms.

6.31.- Una flotilla de camiones llevan diferentes pesos de carga medida en


kilogramos, al cruzar la frontera, la aduana solicita el equivalente en
toneladas largas, cortas y en libras. Elabore un programa, si la flotilla
consta de x camiones (tonelada corta = 2000 lbs = 807.2 kg y la
tonelada larga = 2240lbs = 1.0161 tns = 1016kg)

6.32.- Los buques petroleros llevan combustible de Tampico a Inglaterra, se


cargan con medidas en litros y al llegar le solicitan el equivalente en
Bushel. Cada buque lleva una carga n y son c buques (bushel =
2150.42 pulgadas cbicas x 352379 = hectolitro = 100 lts )

103
6.33.- Disee un programa que lea y despliegue lo ledo y el promedio de
cada alumno y el promedio general de todos los alumnos si se tiene:

Datos Variable Tamao Tipo


(caracteres)
Matricula Mat 8 Entero
Nombre Nomb 30 Alfanumrico
Especialidad Esp 3 Real
Nota1 Mate 6 Real con 3
fracciones
(incluye punto)
Nota2 Fin 6 Real con 3
fracciones
(incluye punto)
Nota3 Fsica 6 Real con 3
fracciones
(incluye punto)
Nota4 Quim 6 Real con 3
fracciones
(incluye punto)
*(promedio Prom 6 Real con 3
alumno) fracciones
(incluye punto)
*(promedio grupo) Pg 6 Real con 3
fracciones
(incluye punto)
*Estos promedios se calculan dentro del programa.

6.34.- Haga un programa que calcule el valor de ngulo expresado en


radianes, para la funcin seno lo cual es una serie infinita, se calculan
solo 5 trminos.
n

Seno = (-1)n-1 2n-1 (recuerde el ejemplo resuelto de factorial)


i=1 (2n-1)!

Teta 3 Teta 5 Teta 7


La frmula quedar: Seno _ Teta = +
3! 5! 7!

6.35.- Suponga que se desea calcular el promedio de las races medias


cuadrticas de un modelo estocstico si se dan n valores y xi
observaciones.
N
Prmc = 1
N X
I
2
I

104
6.36.- Basndose en el problema 6.35 que pide como calcular el promedio
individual de cada alumno, el promedio general del grupo; genere
adicionalmente el promedio de cada materia. Para ello es
recomendable hacer uso de arreglos de la siguiente forma. Presente la
solucin haciendo uso del estatuto RESHAPE.

Notas Prom.
Matricula Nombre 1 2 3 4 5

Promedio de cada materia

6.37.- Elabore un programa basndose en el problema 6.36, localice el


promedio ms alto de los alumnos y despliegue la matrcula, nombre,
calificacin y promedio en caso de haber varios con la nota ms alta,
despliguelos.(Consulte la funciones de librera)

6.38.- Si tuvisemos un arreglo matricial de 4x4, sume los elementos de la


diagonal principal.

A11 A12 A13 A14


A21 A22 A23 A24
A31 A32 A33 A34
A41 A42 A43 A44

105

Potrebbero piacerti anche