[ anterior ] [ Contenidos ] [ 1 ] [ 2 ] [ 3 ] [ 4 ] [ 5 ] [ 6 ] [ 7 ] [ 8 ] [ 9 ] [ 10 ] [ 11 ] [ 12 ] [ 13 ] [ siguiente ]


Lecciones de Fortran 90 para la asignatura Química Computacional
Capítulo 3 - Matrices o Arrays (Básico)


3.1 Objetivos

Los objetivos de esta clase son los siguientes:

  1. presentar las matrices o arreglos de una y varias dimensiones como estructuras de datos en Fortran.

  1. presentar cómo se define una matriz y cómo se accede a sus elementos.

  1. presentar la sintaxis de los bucles DO como estructura de control. DO implícito. Uso de esta estructura con matrices.

  1. Definición dinámica del tamaño de arreglos.

  1. Arreglos multidimensionales.


3.2 Puntos destacables.

Conceptos previos:

  1. rango (rank): número de índices necesarios para indicar un elemento de la matriz.

  1. límites (bounds): valor superior e inferior del índice que indica los elementos de la matriz en cada dimensión.

  1. extensión (extent): número de elementos de la matriz para cada dimensión.

  1. tamaño (size): número total de elementos de la matriz.

  1. Se dice que dos arreglos son "conformables" si tienen idéntico rango y extensión.

Es importante al explicar este material hacer énfasis en los siguientes puntos


3.3 Programas usados como ejemplo.


3.3.1 Programa ejemplo_3_1.f90

     PROGRAM ej_3_1
     !
     ! DEFINICIÓN DE VARIABLES
       IMPLICIT NONE
       REAL :: Total=0.0, Promedio=0.0
       INTEGER, PARAMETER :: semana=7
       REAL , DIMENSION(1:semana) :: Horas_trab
       INTEGER :: dia
     !
       PRINT *,' Introduzca las horas trabajadas'
       PRINT *,' por dia en una semana'
       DO dia=1,semana
          READ(*,*), Horas_trab(dia)
       ENDDO
     !
       DO dia=1,semana
          Total = Total + Horas_trab(dia)
       ENDDO
       Promedio = Total / semana
     !
       PRINT *,' Promedio de horas de trabajo semanales: '
       PRINT *, Promedio
     END PROGRAM ej_3_1

3.3.2 Programa ejemplo_3_2.f90

     PROGRAM ej_3_2
     !
     ! DEFINICION DE VARIABLES
       IMPLICIT NONE
       REAL :: Total=0.0, Promedio=0.0
       REAL , DIMENSION(:), ALLOCATABLE :: Horas_trab
       INTEGER :: dia, num_dias
     !
       PRINT *,' Introduzca el número de dias para los que '
       PRINT *,' se va a calcular el promedio de horas trabajadas.'
       READ(*,*), num_dias
     !
       ALLOCATE(Horas_trab(1:num_dias))
     !
       PRINT *,' Introduzca las horas trabajadas'
       PRINT *,' por dia en ', num_dias, 'dias.'
       DO dia=1, num_dias
          READ(*,*), Horas_trab(dia)
       ENDDO
     !
       DO dia=1,num_dias
          Total = Total + Horas_trab(dia)
       ENDDO
       Promedio = Total / num_dias
     !
       PRINT *,' Promedio de horas de trabajo en ',num_dias, ' dias : '
       PRINT *, Promedio
     !
     END PROGRAM ej_3_2

3.3.3 Programa ejemplo_3_3.f90

     PROGRAM asistencia
       IMPLICIT NONE
       INTEGER , PARAMETER :: N_alum=4
       INTEGER , PARAMETER :: N_asig=3
       INTEGER , PARAMETER :: N_prac=3
       INTEGER :: alumno, asignatura, pract
       CHARACTER(LEN = 2) , DIMENSION(1:N_prac,1:N_asig,1:N_alum) :: asiste='NO'
       DO alumno = 1,N_alum
          DO asignatura = 1,N_asig
             READ(*,*),(asiste(pract,asignatura,alumno),pract = 1, N_prac)
          ENDDO
       ENDDO
       PRINT *,' Asistencia a practicas : '
       DO alumno=1, N_alum
          PRINT *,' Alumno = ', alumno
          DO asignatura = 1,N_asig
             PRINT *,'   Asignatura = ', asignatura, ' : ', (asiste(pract,asignatura,alumno),pract=1,N_prac)
         ENDDO
      ENDDO
     END PROGRAM asistencia

3.3.4 Programa ejemplo_3_4.f90

     PROGRAM longitude
       IMPLICIT NONE
       REAL , DIMENSION(-180:180) :: Time=0
       INTEGER :: Degree, Strip
       REAL :: Value
     !
       DO Degree=-165,165,15
          Value=Degree/15
          DO Strip=-7,7
             Time(Degree+Strip)=Value
          ENDDO
       ENDDO
     !
       DO Strip=0,7
          Time(-180 + Strip) = -180/15
          Time( 180 - Strip) = 180/15
       ENDDO
     !
       DO Degree=-180,180
          PRINT *,Degree,' ',Time(Degree), 12 + Time(Degree)
       END DO
     END PROGRAM longitude

[ anterior ] [ Contenidos ] [ 1 ] [ 2 ] [ 3 ] [ 4 ] [ 5 ] [ 6 ] [ 7 ] [ 8 ] [ 9 ] [ 10 ] [ 11 ] [ 12 ] [ 13 ] [ siguiente ]


Lecciones de Fortran 90 para la asignatura Química Computacional

$Id: clases_fortran.sgml,v 1.24 2013/07/02 09:38:58 curro Exp curro $

Curro Pérez Bernal mailto:francisco.perez@dfaie.uhu.es