Está en la página 1de 16

AREGLOS

Y
MATRICES (I)

VARIABLES CON SUBNDICES; MATRICES


A veces es necesario operar con elementos de un grupo o arreglo de
nmeros, tambin llamados matrices. Si tenemos un sistema de ecuaciones
simultneas:

AX + BY + CZ = R
DX + EY + FZ = S
GX + HY + PZ = T
Para trabajar con ellos es necesario nombrar a los elementos de la matriz,
con el objeto de identificarlos fcilmente.

C11X + C12Y + C13Z = SUM1


C21X + C22Y + C23Z = SUM2
C31X + C32Y + C33Z = SUM3

VARIABLES CON SUBNDICES; MATRICES


Los arreglos en FORTRAN pueden tener de 1 a 5 dimensiones
X,Y,Z
Dimensiones espaciales.
T
tiempo.
P
Parmetro fsico (Temperatura, Salinidad, Presin, densidad, etc)

ARREGLOS EN 1 DIMENSION.
X (1) , X (2) , X (3) , . ,X (N) . Variable Real 1 Dim. (1xN)
ARREGLOS EN 2 DIMENSIONES.
X (1,1), X (1,2), X (1,3), X (1,J)
X (2,1), X (2,2), X (2,3), X (2,J)

Variable Real 2 Dim. (K x J)


..
X (K,1), X (K,2), X (K,3), X (K,J)

REGLAS
Los arreglos o matrices tienen elementos Reales o Enteros, NUNCA
deben mezclarse los dos tipos de variables.

Los Subndices, siguen al nombre de la variable y se encierran entre


parntesis.
Los subndices de ms de una dimensin, se separan por comas.
Los subndices deben ser valores positivos diferentes de cero.
Un subndice puede ser constante, variables o una expresin entera.
A (7)
N (K)

------>
------>

Real
Entero

Z (3*N+3)
M (5*K-6)

------> Real
------> Entero

PROPOSICIN DIMENSIN
Antes de poder usar los elementos de una matriz, dentro del programa se
debe definir las dimensiones del arreglo.
REAL, DIMENSION(120) : : A
INTEGER, DIMENSION(23) : : A
DIMENSION A(9), B(12,18),K(9,15)
REAL , DIMENSION(12,25) :: D
REAL A(9), B(12,18)
INTEGER K(9,15)
Esta proposicin debe aparecer antes de cualquier proposicin ejecutable.

DIMENSIN A(5)
A(1) = 1.0
A(2) = 1.5
A(3) = 2.0
A(4) = 2.5
A(5) = 3.0

DIMENSIN A(5)
DO 10 N=1,5
A(N)=REAL(N+1)/2.0 ! Nunca combinar
10 CONTINUE
! Enteros con Reales

VECTORES
Un arreglo es un grupo de variables o constantes, todas del mismo tipo
referenciadas con un mismo nombre.
.

a(1)

a(2)

a(3)

a(4)

a(5)

a(6)

..

arreglo
Cada valor individual se llama elemento
El subndice indica la posicin particular dentro del arreglo.
El subndice es un ENTERO.
Es til para aplicar un algoritmo a un gran nmero de datos a travs de
ciclos
Ej
DO i=1,100
b(i)=sqrt(a(i))
END DO

VECTORES
Los elementos de los arreglos son variables ordinarias y tienen que ser
inicializadas antes de ser usadas. Si no se la inicializa su valor es indefinido.
Pueden ser inicializados:
1. Sentencias de asignacin elemento por elemento
Se inicializa :
REAL, DIMENSION(10) : : A
DO i=1,10
A(i) = REAL(i)
END DO

INTEGER, DIMENSION(10) : : num, cuad


DO i=1,10
num(i)=i+i
cuad(i)= num(i)**2
END DO

REAL, DIMENSION(7) : : A
A=(/1., 2., 3., 4., 5., 6., 7./)

REAL, DIMENSION(10) : : A
A=0.
! todos los elementos iguales

2. Inicializacin por sentencias de declaracin


Se inicializa de esta forma:
INTEGER, DIMENSION (5) : : A = (/1, 2, 3, 4, 5 /)
INTEGER, DIMENSION (5) : : B = (/(i, i=1,5)/)
INTEGER, DIMENSION (25) : : C = (/((0, i=1,4), 5*j, j=1,5) /)

0, 0, 0, 0, 5, 0, 0, 0, 0, 10, 0, 0, 0, 0, 15, 0, 0, 0, 0, 20, 0, 0, 0, 0, 25


REAL, DIMENSION (100) : : arreglo =1.0

3. Inicializacin de arreglos con READ


Valores de los arreglos
Normalmente se usan valores de 1 a N
Ej: REAL, DIMENSION (3) : : A A(1), A(2), A(3)
Muchas veces resulta til que los subndices tomen otros valores. Para definir los:
REAL, DIMENSION (imin, imax) : : B
Ej:
REAL, DIMENSION (5)
:: AA
REAL, DIMENSION (-2 : 2) :: BB
REAL, DIMENSION ( 7:11) :: CC
Los 3 arreglos tienen la misma forma (igual dimensin e igual nmero de elementos

VECTORES
Se debe controlar que el ndice se encuentre dentro de los lmites del arreglo
A(1)

A(2)

A(3)

A(4)

A(5)

B(1)

B(2)

B(3)

B(4)

Si se utiliza el A(6) puede conducir a errores.

Uso de PARAMETER: Es mejor declarar el tamao de los arreglos

usando PARAMETER y realizar cambios rpidamente.


Se utiliza para cambiar de manera simple el tamao de los arreglos.
INTEGER, PARAMETER : : imax=1000
REAL : : a1(imax)
REAL : : a2(2*imax)
REAL : : a3(imax,imax)

SUBCONJUNTO DE UN VECTOR
Subconjunto de un arreglo

Para utilizar una seccin del arreglo se especifican los ndices :


inicio:fin:incremento subndice triple
Ej :
INTEGER, DIMENSION : : A(/1, 2, 3, 4, 5, 6, 7, 8, 9, 10/)
El subconjunto A( 1:10: 2) A(1), A(3), A(5), A(7) y A(9)
1, 3, 5, 7 y 9
inicio 1 ; fin 10 ; incremento 2
Ej: INTEGER :: i=3, j=7
REAL, DIMENSION (10) :: a (/1., -2., 3., -4., 5., -6., 7., -8., 9., -10./)
a(:) todos los elementos
a( i: j) del tercer elemento al sptimo ( 3., -4., 5., -6., 7)
a(i: j: i) del tercer elemento al sptimo saltando de a 3 (3., -6.)
a(i: j: j) del tercer elemento al sptimo saltando de a 7 (3.)
a(i:) del tercer elemento al final (3., -4., 5., -6., 7., -8., 9., -10)
a(j:) del sptimo elemento al final (7., -8., 9., -10)
a(: : i) todos los elementos saltando 3 (1., -4., 7., -10.)

SUBCONJUNTO DE UN VECTOR
Subndice vector especifica uno a uno los elementos del arreglo a ser usados en el
clculo.
Ej: INTEGER, DIMENSION (5): : vec =(/1, 6, 4, 1, 9/)
REAL, DIMENSION (10) : : a (/1., -2., 3., -4., 5., -6., 7., -8., 9., -10./)
a(vec ) es el arreglo [1., -6., -4., 1., 9.]
Entradas y salidas

Elemento por elemento


WRITE( *, *) a(1), a(2), a(3), a(4)

Con DO implcito
WRITE( *, *) (a(i), i=1,4)
Imprime: a(1), a(2), a(3) y a(4)

En general:
WRITE( unidad , format) (var1, var2, . Indice= icomienzo, ifin. incre)
READ ( unidad , format) (var1, var2, . Indice= icomienzo, ifin. incre)
Dentro del write se pueden incluir tareas
Ej: WRITE( *, * ) (i, 2*i, 3*i, i= 1,4)
Imprime 1 2 3 4 2 4 6 8 3 6 9 12

VECTORES
Ejemplo: Definicin y asignacin de un vector.
PROGRAM VECTOR
IMPLICIT NONE
REAL, DIMENSION(10) :: ARRAY
ARRAY=(/1,2,3,4,5,6,7,8,9,10/)
ARRAY(1)=20
ARRAY(2:3)=(/3,4/)
WRITE(*,*) ARRAY
STOP
END PROGRAM VECTOR

El resultado de la ejecucin de este programa es que el contenido


de la variable vector debe ser:
20 3 4 4 5 6 7 8 9 10

PROGRAM suma
VECTORES
IMPLICIT NONE
INTEGER :: i
REAL, DIMENSION (4) :: a=(/ 1., 2., 3., 4./)
REAL, DIMENSION (4) :: b=(/ 5., 6., 7., 8./)
REAL, DIMENSION (4) :: c, d,e
! Suma Elemento por elemento
DO i=1,4
c(i)= a(i)+b(i)
END DO
d= a+b ! Suma en forma conjunta los elementos de los vectores
e= a*b
! Escribo los resultados
WRITE(*,*) 'c'
DO i=1,4
WRITE(*,*) c(i)
END DO
WRITE(*,*) 'd', d
WRITE(*,*)'e= ',(e(i), i= 1, 4)
END PROGRAM suma

Otro ejemplo de declaracin y asignacin de vectores.


PROGRAM VECTOR
IMPLICIT NONE
REAL, DIMENSION :: VEC
INTEGER :: i
INTEGER, DIMENSION (3) :: SUBS=(/1,7,10/)
VEC=0
!USANDO UN DO IMPLICITO
VEC=(/(I,i=1,10)/)
!USANDO UN VECTOR INTEGER PARA ASIGNAR ELEMENTOS DE UN VECTOR
VEC(SUBS)=2
WRITE(*,*)VEC
END PROGRAM VECTOR

En este caso el contenido de VEC es 2 2 3 4 5 6 2 8 9 2

EJEMPLO: Escribir un programa que calcule el producto escalar de dos


vectores A y B :
implicit none
integer A(5) !matriz columna
integer B(5) !matriz columna
integer i,j,k,l,m,sum1,i1,j1
integer prod
A=(/1, 2 , 3, 4, 5/)
B=(/2, 4, 6, 8, 10/)
! open(1,file='A.txt')
! open(2,file='B.txt')
do 10 i=1,5
! READ(1,*)A(i)
!
READ(2,*)B(i)
10
continue
sum1=0
do k = 1,5
sum1= sum1+A(k) * B(k)
end do
write(*,*)sum1
end

A.txt

B.txt

10

VECTORES
Escribir un programa
que lea una lista de
datos y lo ordene
de mayor a menor

dimension zmax(10)
open(1,file=mayor.txt')
do 20 J=1,10
read(1,*)zmax(J)
20 continue
!
do 10 M=1,9
do 10 I=1,9
if(zmax(I).lt.zmax(I+1)) then
tmp=zmax(I)
zmax(I)=zmax(I+1)
zmax(I+1)=tmp
endif
10 continue
do 30 K=1,10
write(*,93)zmax(K)
93 format(f7.2)
30 continue

!
write(*,94)zmax
94 format(10(f6.2,1x))
end

mayor.txt

output

1.23
4.23
6.32
-2.31
1.12
6.34
5.32
-1.54
-9.17
8.42

8.42
6.34
6.32
5.32
4.23
1.23
1.12
-1.54
-2.31
-9.17