La descarga está en progreso. Por favor, espere

La descarga está en progreso. Por favor, espere

Arreglos (vectores, matrices, ….)

Presentaciones similares


Presentación del tema: "Arreglos (vectores, matrices, ….)"— Transcripción de la presentación:

1 Arreglos (vectores, matrices, ….)
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 subíndice indica la posición particular dentro del arreglo. El subíndice es un ENTERO. Es útil para aplicar un algoritmo a un gran número de datos a través de ciclos Ej DO i=1,100 a(i)=sqrt(a(i)) END DO

2 Declaración de los Arreglos
Los arreglos tienen que ser declarados antes de ser utilizados para que el compilador guarde lugar en la memoria según el tipo y número de elementos que contiene. Ej REAL, DIMENSION (100) : : a Cuando se define la variable CHARACTER se tiene que tener en cuenta la longitud de caracteres y elemento:s Ej CHARACTER(10), DIMENSION (12) : : mes Los arreglos pueden ser declarados con más de un subíndice , por lo tanto pueden tener 2 o más dimensiones. El número de dimensiones se llama rango (rank). El número de elementos de cada dimensión se llama extensión (extent). La combinación del rango y la dimensión se llama forma (sharp) . El número de elementos declarados en el arreglo tamaño (size) Arreglos constantes: sus elementos son ctes. Pueden definirse entre / Ej: (/1, 2, 3, 4, 5/)

3 Arreglos

4 Inicialización de los arreglos
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 asignación elemento por elemento Ej de esta forma de inicialización: REAL, DIMENSION(10) : : arreglo DO i=1,10 arreglo(i) = REAL(i) END DO arreglo=(/1., 2., 3., 4., 5., 6., 7., 8., 9., 10./) arreglo= ! todos los elementos iguales INTEGER, DIMENSION(10) : : num, cuad num(i)=i+i cuad(i)= num(i)**2

5 2. Inicialización por sentencias de declaración
Ej de esta forma de inicialización: INTEGER, DIMENSION (5) : : arreglo = (/1, 2, 3, 4, 5 /) INTEGER, DIMENSION (5) : : arreglo = (/(i, i=1,5)/) INTEGER, DIMENSION (25) : : arreglo = (/((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 Inicialización de arreglos con READ Valores de borde de los arreglos Normalmente se usan valores de 1 a N Ej: REAL, DIMENSION (3) : : arr ⇒ arr(1), arr(2), arr(3) pero muchas veces resulta útil que los subíndices tomen otros valores. Para definir los: REAL, DIMENSION (imin, imax) : : arr Ej: REAL, DIMENSION (5) aa REAL, DIMENSION (-2 : 2) : : bb REAL, DIMENSION ( 7:11) : : cc Los 3 arreglos tienen la misma forma (igual dimensión e igual número de elementos

6 ! Controlar que el índice se encuentre dentro de los límites del arreglo
B(1) B(2) B(3) B(4) …… Arreglo B Arreglo A Si se utiliza el A(6) puede conducir a errores. Los compiladores FORTRAN tienen opción bounds cheking para controlar los valores que toma el índice Las constantes con nombre y la declaración de arreglos Se utiliza para cambiar de manera simple el tamaño de los arreglos. Ej: INTEGER, PARAMETER : : tama=1000 REAL : : arre1(tama) REAL : : arre2(2*tama) REAL : : arre3(tama,tama)

7 Usando arreglos completos o un subconjunto a b c
Buena costumbre: declarar el tamaño de los arreglos usando PARAMETER y realizar cambios rápidamente. Usando arreglos completos o un subconjunto a VALOR a(1) 1. a(2) 2. a(3) 3. a(4) 4. b VALOR b(1) 5. b(2) 6. b(3) 7. b(4) 8. c VALOR c(1) 6. c(2) 8. c(3) 10. c(4) 12. a b = c PROGRAM suma_arreglos IMPLICIT NONE ! INTEGER : : i

8 REAL, DIMENSION (4) : : a=(/ 1., 2., 3., 4./)
REAL, DIMENSION (4) : : b=(/ 5., 6., 7., 8./) REAL, DIMENSION (4) : : c, d ! ! Elemento por elemento DO i=1,4 c(i)= a(i)+b(i) END DO ! Suma en forma conjunta todos los elementos de los arreglos d= a+b ! Escribo los resultados WRITE(*,*) “c” WRITE(*,*) c(i) WRITE(*,*) “d”, d END PROGRAM suma_arreglos

9 Impresión c d ! La operación puede hacerse si y solo si ambos arreglos tienen la misma forma (igual número de dimensiones y el mismo número de elementos en cada dimensión, (igual rango e igual extensión))⇒ conforme Los escalares son conformes con los arreglos: REAL, DIMENSION (4) : : a=(/1., 2., 3., 4./), c REAL : : b=10 c=b*a El arreglo c será 10., 20., 30., 40. También se puede realizar estas operaciones con funciones intrínsecas elementales. Las más comunes: ABS, SIN, COS, EXP y LOG REAL, DIMENSION (4) : : a=(/-1., 2., -3., 4./), c c= ABS(a) El arreglo c será 1., 2., 3., 4.

10 Subconjunto de un arreglo
Para utilizar una sección del arreglo se especifican los índices : inicio:fin:incremento subíndice triple Ej : INTEGER, DIMENSION : : arre(/1, 2, 3, 4, 5, 6, 7, 8, 9, 10/) El subconjunto arre( 1:10: 2) arre(1), arre(3), arre(5), arre(7) y arre(9) 1, 3, 5, 7 y 9 inicio valor del índice inicial del subconjunto fin valor del índice final del subconjunto Incremento incremento a través de los índices del arreglo. Si falta: inicio → 1 fin → fin del arreglo incremento → 1 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 séptimo ( 3., -4., 5., -6., 7) a(i: j: i) → del tercer elemento al séptimo saltando de a 3 (3., -6.) a(i: j: j) → del tercer elemento al séptimo saltando de a 7 (3.) a(i:) → del tercer elemento al final (3., -4., 5., -6., 7., -8., 9., -10) a(j:) → del séptimo elemento al final (7., -8., 9., -10) a(: : i) → todos los elementos saltando 3 (1., -4., 7., -10.)

11 Subindice vector especifica uno a uno los elementos del arreglo a ser usados en el cálculo.
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 WRITE( *, *) a(1), a(2), a(3), a(4) Con DO implícito WRITE( *, *) (a(i), i=1,4) Imprime los valores de 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,3) Imprime

12 Ciclos anidados WRITE(*,*) ((i, j, j= 1, 3), i= 1, 3) Primero varia j y luego i 1 1 1 2 1 3 2 1 2 2 2 3 3 1 3 2 3 3 Los DO implícitos son muy importantes cuando se trabaja con arreglos que tienen dos o mas dimensiones.


Descargar ppt "Arreglos (vectores, matrices, ….)"

Presentaciones similares


Anuncios Google