Академический Документы
Профессиональный Документы
Культура Документы
Laboratorio de Informtica
Autores Laura Angelone Ma. Alicia Morelli Claudia Reynares Ao 2008
Manual de FORTRAN
Parte 1
Tabla de contenidos
1. AMBIENTE DE PROGRAMACIN ............................................................................................................. 3 1.1 Manejo del ambiente de programacin Fortran ............................................................................................. 3 Elija la pestaa General y obtendr: .................................................................................................................... 7 1.2 Guardar el programa...................................................................................................................................... 7 1.3 Compilar el programa.................................................................................................................................... 7 1.4 Ejecutar el programa...................................................................................................................................... 7 1.5 Generar el ejecutable ..................................................................................................................................... 7 2. INTRODUCCIN AL LENGUAJE FORTRAN............................................................................................ 8 2.1 Qu es FORTRAN ........................................................................................................................................ 8 2.2 Estructura general de un programa FORTRAN ............................................................................................ 8 2.3 Caracteres permitidos .................................................................................................................................... 9 2.4 Palabras reservadas........................................................................................................................................ 9 2.5 Identificadores ............................................................................................................................................... 9 2.6 Tipos de Datos............................................................................................................................................... 9 2.6 Operadores aritmticos ................................................................................................................................ 11 2.7 Expresiones aritmticas ............................................................................................................................... 11 2.8 Funciones numricas ................................................................................................................................... 12 2.9 Operaciones con caracteres ......................................................................................................................... 13 2.10 Expresiones lgicas y operadores relacionales ......................................................................................... 13 3. Sentencia de ASIGNACIN ......................................................................................................................... 14 4. Sentencias de ENTRADA/SALIDA sencillas ............................................................................................... 14 4.1 Sentencia WRITE ................................................................................................................................... 15 4.2 Sentencia READ...................................................................................................................................... 16 5. SENTENCIAS DE CONTROL: bifurcaciones y bucles ............................................................................... 17 5.1 Bifurcaciones............................................................................................................................................... 17 5.1.1 Sentencia IF .......................................................................................................................................... 17 5.1.2 Sentencia CASE ................................................................................................................................... 19 5.3 BUCLES...................................................................................................................................................... 20 5.3.1 Bucles DO controlados por contador.................................................................................................... 21 5.3.2 Bucle DO controlados por expresin lgica ......................................................................................... 21
1. AMBIENTE DE PROGRAMACIN
1.1 Manejo del ambiente de programacin Fortran
En este tipo de ambientes de programacin se crea un espacio de trabajo y dentro del ste se abren proyectos. Cada proyecto puede estar compuesto por uno o ms programas. A continuacin veremos paso a paso como realizarlo. En PROGRAMAS seleccionar Compaq Visual Fortran 6.0 y luego Developer Studio
Ahora para crear un espacio de trabajo (Workspace), en la barra de Men, seleccione FILE y NEW
Elija la pestaa WORKSPACES para crear un Workspace En Workspace name escriba un nombre para el rea de trabajo, por ejemplo trabajo1. Observe que en Location, por defecto aparece el siguiente path: C:\ProgramFiles\MicrosoftVisualStudio\My Projects es la carpeta donde se guardarn los proyectos. Se puede cambiar en este momento. Luego hace clic en Black Workspaces y OK.
Para crear un Proyecto dentro del Workspace, elija nuevamente File -New, y seleccione la pestaa Projects y la opcin Fortran Console Application.
Escribe un nombre para el Proyecto, por ej, proyecto1. En Location se posiciona en la carpeta Trabajo1, selecciona ADD to currentv workspace para agregarlo a tu rea de trabajo y OK.
Seleccionar OK y el ambiente de trabajo resulta el siguiente. Donde se observa trabajo1 (Workspace) y proyecto1 files (Project)
Ahora est en condiciones para crear un programa. File New y en la pestaa File elegir la opcin FORTRAN FREE FORMAT SOURCE FILE
Antes de elegir OK, en File Name: escriba el nombre al archivo (que contendr el cdigo fuente del programa) con extensin .F90, por ejemplo: eje1.f90. NO OLVIDAR ESCRIBIR punto f90 !!! Finalizado todos los pasos anteriores se est en el editor de texto para poder empezar a escribir el programa.
Para abrir un rea de trabajo existente, deber seguir los siguientes pasos: Debe ir al men File, y elegir la opcin Open Workspace, aparece la siguiente ventana: En esta ventana, en Buscar en se posiciona en la carpeta de trabajo (en nuestro ejemplo trabajo1) y selecciona trabajo1.dsw.
Si en la carpeta Source File, hay ms de un archivo, deber elegir cual es el ejecutable. Porque en un proyecto solo puede haber un nico archivo ejecutable. Para esto, deber hacer: Clic derecho sobre cada uno de los archivos que quiera excluir. Elegir Setting y aparecer la siguiente ventana:
Seleccione la opcin Exclude file from build y luego diga OK. Observe que el icono correspondiente al file eje1.f90 a cambiado.
PROGRAM program_name
...
CALL, CASE, CHARACTER, COMPLEX, DEFAULT, DIMENSION, DO, END, ELSE, EXIT, FUNCTION, IF, IMPLICIT, IN, INOUT, INTEGER, INTENT, LOGICAL,OPEN, OUT, PARAMETER, PROGRAM, READ, REAL, RESULT, RETURN SAVE, SELECT, STOP, SUBROUTINE, THEN, TYPE, WHERE, WRITE
Observacin: no se incluyen las funciones de biblioteca.
2.5 Identificadores
Los identificadores son nombres que se utilizan para identificar programas, variables, constantes, funciones de biblioteca, funciones del usuario, etc. Los identificadores deben empezar por una letra, y pueden ir seguidos por hasta 30 caracteres (letras, dgitos y guin bajo). En los identificadores no se distingue entre maysculas y minsculas. Es habitual escribir con maysculas las palabras clave del lenguaje (IF, DO, END, ). Para el nombre de las variables es habitual utilizar minsculas, con la primera letra en mayscula. Con frecuencia se unen varias palabras poniendo la primera letra en mayscula o separndolas con un guin bajo.
Es posible inicializar las variables en el momento de declararlas. Si no se inicializan contienen basura informtica y su uso resulta imprevisible. Fortran permite trabajar con constantes y variables de tipo INTEGER o REAL con distinta precisin, es decir, con distinto nmero de cifras o rango. Por ejemplo, si se utilizan variables INTEGER con 16 bits se pueden representar nmeros entre -32768 y 32767; con 32 bits se pueden representar enteros entre -2147483648 y 2147483647. Tambin las variables REAL se pueden representar con 32 64 bits; en el primer caso se tienen unas 7 cifras decimales equivalentes y en el segundo caso 16. Las constantes se definen en la forma:
PARAMETER pi=3.1415927
Enteras o INTEGER Son los nmeros enteros (precedidos del signo - si son negativos). El tipo de dato INTEGER que se desea utilizar se puede especificar en el momento de declarar la variable
INTEGER*1 Enteros de 8 bits: entre -128 y 127 INTEGER*2 Enteros de 16 bits: entre -32768 y 32767 INTEGER*4 Enteros de 32 bits: entre -2147483648 y 2147483647
Reales o REAL Son los nmeros reales (con parte fraccionaria). Estos pueden expresarse con o sin exponente. Sin exponente es la forma normal, es decir 1.23 , -34.567 , etc. Con exponente se expresan mediante un nmero entero o real seguido de la letra E y de uno o dos nmeros que indican la potencia de diez por la que se multiplica la primera parte, ejemplo: 0.0000023 puede ponerse como 0.023E-4 , 23E-7 , etc ; 45000=4.5E4 ; y as todos. Si queremos usar una variable llamada suma y que sea real escribiremos: El tipo de dato REAL que se desea utilizar se puede especificar en el momento de declarar la variable
REAL*4 Variables de simple precisin, con 24 bits para la mantisa y 8 para el exponente. Se pueden representar nmeros decimales con unas 7 cifras, entre 10-38 y 1038. REAL*8 Variables de doble precisin, con 53 bits para la mantisa y 11 para el exponente. Se pueden representar nmeros decimales con unas 15~16 cifras, entre 10-308 y 10308.
Lgicas o LOGICAL En Fortran hay dos constantes lgicas: .TRUE. y .FALSE. (los puntos antes y despus de la correspondiente palabra son obligatorios). Las variables lgicas se declaran con la palabra LOGICAL y se les asigna valor por medio de expresiones lgicas. Las variables lgicas pueden imprimirse con la sentencia PRINT sin formato, y en este caso se imprimen como una T una F, precedidas normalmente por un espacio en blanco. Tambin es posible leerlas con una sentencia READ sin formato. En este caso los puntos son opcionales y slo se tiene en cuenta la primera letra de la palabra (es lo mismo ".F" que "F", que "FALSE" y que ".FALSO."). Caracter o CHARACTER Las cadenas de caracteres van entre "" ''. El carcter de cierre debe ser el mismo que el de apertura. En una cadena definida con "-" el apstrofo ' se considera como tal, es decir como un carcter ms de la cadena. Para las variables CHARACTER se puede declarar la longitud de la cadena que contendrn. Por ejemplo para definir tres variables caracter de longitudes (nmero de caracteres) 10,10 y 8 respectivamente y llamadas var1,var2 y var3 escribiremos: CHARACTER *10 var1, var2, var3 * 8 CHARACTER var1 * 10,var2 * 10,var3 * 8 Otra forma puede ser: CHARACTER * 20 nombre, primerApellido, segundoApellido que es lo mismo que CHARACTER (20) nombre, primerApellido, segundoApellido que es lo mismo que CHARACTER nombre*20, primerApellido*20, segundoApellido*20
Manual de FORTRAN Parte 1 pag. 10 de 21
Tambin es posible definir una longitud general y establecer excepciones: CHARACTER(20) nombre*30, primerApellido, segundoApellido, iniciales*3 Complejas o COMPLEX Fortran 90 permite trabajar con constantes y variables complejas. Las constantes complejas se definen mediante dos constantes reales entre parntesis, separadas por una coma:
Es una buena prctica de programacin declarar todas las variables que se usen en el programa. Para que el compilador Fortran nos informe si existe alguna variable que no ha sido declarada se coloca la sentencia IMPLICIT NONE.
Las operaciones mixtas (u operaciones en modo mixto) son operaciones entre variables o constantes de distinto tipo. Lo ms habitual es combinar INTEGER con REAL. En las operaciones mixtas el dato INTEGER se convierte antes en REAL, y el resultado es de tipo REAL. Por ejemplo, 5/2 es 2, mientras que 5/2.0 es 2.5. Un caso particular interesante es el que concierne al operador potencia (**). Si el exponente es INTEGER el resultado se obtiene por multiplicacin repetida. Por el contrario, si el exponente es de tipo REAL el resultado se obtiene mediante la aplicacin de logaritmos; esto quiere decir que la base no puede ser un nmero negativo, porque los nmeros negativos no tienen logaritmo. La prioridad de los operadores unarios es la misma que la de los operadores binarios correspondientes. A igualdad de prioridad, se trabaja de izquierda a derecha. Por ejemplo, si tomamos la igualdad a = 4.+5.**4./2. la variable a tomar el valor 316.5, mientras que para a = 4.+5.**(4./2.) la variable a tomar el valor 29. Ejemplo: PROGRAM variables IMPLICIT NONE REAL a,b a=1/3 b=1./3. write (*,*) a, b END PROGRAM Si bien las variables a y b son de tipo real, el resultado de la primer divisin es un integer (0) y el de la segunda un real (0.3333333E0). Es por ello que es muy importante el uso correcto de los tipos de variables.
Funcin
ACHAR(I) CHAR(I, kind)
Significado
Tipo argumento
INTEGER INTEGER CHARACTER CHARACTER CHARACTER CHARACTER
Tipo resultado
CHARACTER CHARACTER INTEGER INTEGER CHARACTER CHARACTER
Carcter I del cdigo ASCII Carcter en posicin I. El valor de retorno tiene la clase KIND especificada por el argumento opcional LEN(str) longitud de una cadena de caracteres LEN_TRIM(str) Longitud de una cadena sin contar los blancos REPEAT(str, n) Formar una cadena como resultado de concatenar str n veces TRIM(str) Elimina los blancos que van por delante
Cada uno de los operadores relacionales tiene dos formas, que se pueden usar indistintamente. Para comparar cadenas de caracteres se utiliza el cdigo ASCII de cada carcter; si es necesario, la cadena ms corta se completa con blancos por la derecha Las expresiones lgicas compuestas constan de dos o ms expresiones lgicas combinadas mediante los operadores lgicos. Los operadores lgicos son: Operador .NOT. .AND. .OR. Significado Negacin Conjuncin lgica Disyuncin lgica
Estos operadores sirven para expresar condiciones tras las cuales se har algo o no dependiendo del resultado de evaluar la condicin, que puede ser verdadero o falso. Por ejemplo: Si A y B son variables lgicas con valores .TRUE. y .FALSE. respectivamente, y hacemos C=.NOT. A , entonces C sera .FALSE
Manual de FORTRAN Parte 1 pag. 13 de 21
Si C fuese igual a (B .AND. A) .OR. B , entonces C=.FALSE. Las equivalencias se expresan en la siguiente tabla: A B .NOT. A .NOT. B A .AND. B A .OR. B A .EQV. B A .NEQV. B F F V F V V V F F V V F V F V F F F F V F V V V V F F V F V V F
Los operadores de relacin tienen prioridad sobre los lgicos pero no sobre los aritmticos.
3. Sentencia de ASIGNACIN
La forma general de las sentencias de asignacin hace uso del operador (=) en la forma: Variable = expresin Si Variable es de tipo REAL y la expresin es de tipo INTEGER, el resultado de la expresin se convierte a REAL antes de hacer la asignacin. En el caso contrario de que el resultado de una expresin de tipo REAL deba ser asignado a una variable INTEGER, se trunca la parte decimal o fraccional de la expresin y la parte entera se asigna a la variable INTEGER.
lista_de_variables lista_de_variables
La primera sentencia leer valores de la entrada estndar y asignar los valores a las variables que aparecen en la lista, y la segunda escribe la lista en la salida estndar.
Ejemplos
Se muestra un segmento de cdigo de un programa de Fortran:
Se ingresan los datos a travs de la entrada estndar (teclado), o bien, redireccionando la entrada a partir de un archivo. Un archivo de datos consiste de registros de acuerdo a los formatos vlidos de Fortran. En el ejemplo, cada registro contiene un nmero (entero o real). Los registros estn separados por espacios en blanco o comas. Por lo que una entrada vlida al programa anterior puede ser:
A - cadena de texto D - nmeros de doble precisin, notacin cientfica E - nmeros reales, notacin cientfica F - nmeros reales, formato de punto fijo I - entero X - salto horizontal (espacio) / - salto vertical (nueva lnea)
Formatos Significado Iw Constantes y variables INTEGER Fw.d Datos REAL con notacin decimal Ew.d Datos REAL con notacin exponencial A Aw Caracteres Lw Datos LOGICAL Tc, Ln, TRn Tabuladores Nx Espacios en horizontal / Espaciado vertical : Control para lectura de caracteres El cdigo de formato F (y similarmente D y E) tiene la forma general Fw.d donde w es una constante entera indicando el ancho del campo y d es un entero constante que indica el nmero de dgitos significativos.
Manual de FORTRAN Parte 1 pag. 15 de 21
Para los enteros solamente el campo de ancho es indicado, por lo que la sintaxis es Iw. En forma parecida las cadenas de caracteres pueden ser especificadas como Aw pero el campo de ancho por lo general no es usado. Si un nmero o cadena no llena todo el ancho del campo, se agregan espacios. Usualmente el texto ser ajustado a la derecha, pero las reglas exactas varan de acuerdo a los cdigos de formato. Para un espaciado horizontal, el cdigo nX es usado. Donde n indica el nmero de espacios horizontales. Si n es omitido se asume n=1. Para espaciado vertical (nuevas lneas) se usa el cdigo /. Cada diagonal corresponde a una nueva lnea. Observar que cada sentencia read o write por defecto termina con un salto de lnea.
Algunos Ejemplos x = 0.025 write(*,*)'x=', x write(*,(A,F)) 'x=', x write(*, (A,F5.3)) 'x=', x write(*, (A,E)) 'x=', x write(*, (A,E8.1)) 'x=', x
genera la siguiente salida una vez que es ejecutado:
Observacin Los espacios en blanco son automticamente puestos del lado izquierdo y que el ancho del campo por default para nmeros tipo real es de usualmente de 14. Se puede ver tambin que Fortran sigue la regla de redondeo donde los dgitos del 0-4 son redondeados hacia abajo y los dgitos del 5-9 son redondeados hacia arriba.
Cada vez que se ejecuta la sentencia READ se procesa una nueva lnea de datos de entrada. Los distintos datos se separan mediante comas, o mediante uno o ms espacios en blanco. Si en la lnea de entrada (hasta que se pulsa Intro) hay menos datos que en la lista, se continan procesando nuevas lneas de entrada hasta obtener valores para todas las variables de la lista. Si hay ms valores en la lnea de entrada que variables a leer, se asignan valores a todas las variables y se ignoran los restantes valores de la lnea. Ejemplo: PROGRAM separa programa que le un nmero real y lo separa en parte entera y fraccionaria IMPLICIT NONE REAL num, frac INTEGER ent write (*,*) 'Escrib un nmero real:' read (*,*)num ent=num frac=num-ent write (*,*) 'Parte entera:',ent write (*,*) 'Parte fraccionaria:',frac END PROGRAM
Observacin
Una sentencia READ (*, *) sola, espera a que se presione una tecla para continuar.
En ambas sentencias de control las expresiones lgicas constituyen una parte importante, porque permiten controlar la ejecucin de dichas sentencias.
Ejemplos: 1) PROGRAM condicion IMPLICIT NONE REAL a READ(*,*) a IF (a > 0) THEN write (*,*)'Es un numero mayor a cero' ELSE write (*,*)'Es un numero menor o igual a cero' ENDIF END PROGRAM 2) PROGRAM condicion IMPLICIT NONE REAL a READ(*,*) a IF (a > 0) THEN WRITE(*,*) 'Es un numero mayor a cero' ELSE IF (a = = 0 ) THEN WRITE(*,*) 'Es un numero igual a cero' ELSE WRITE(*,*)'Es un numero menor que cero' ENDIF ENDIF END PROGRAM 3) PROGRAM operaciones IMPLICIT NONE INTEGER opcion REAL a,b,res WRITE(*,*)'Ingrese dos numeros' READ(*,*) a,b WRITE(*,*) '[1] SUMA' WRITE(*,*) [2] RESTA' WRITE(*,*) '[3] MULTIPLICACION' WRITE(*,*) '[4] DIVISION' WRITE(*,*) 'Ingrese su opcion: ' READ(*,*) opcion IF (opcion >=1 .AND. opcion <= 4 ) THEN IF (opcion = = 1) THEN res=a+b End IF IF (opcion = = 2) THEN res = a-b End IF IF (opcion = = 3) THEN res=a*b End IF IF (opcion = = 4) THEN res = a/b End IF write (*,*)'El resultado es: :',res ELSE write(*,*) 'NO HA ELEGIDO UNA OPCION VALIDA' ENDIF END PROGRAM
CASE (1 : ) Signo = 1 END SELECT WRITE(*,*) "el signo es = ", Signo END PROGRAM signo 3) PROGRAM PR1 IMPLICIT NONE integer a ! Variable parameter b=0 ! constante read(*,*) a select case (a) case (-9:9) write(*,*) "Uno" case (10+b:20+b) write(*,*) "Dos" case (25:30) write(*,*) "Tres" end select end program PR1 4) PROGRAM estructura_casos Integer mes, nb_dias Logical aniob ... SELECT CASE (mes) CASE(4, 6, 9, 11) nb_dias = 30 CASE(1, 3, 5, 7:8, 10, 12) nb_dias = 31 CASE(2) SELECT CASE (aniob) CASE(.true.) nb_dias = 29 CASE(.false.) nb_dias = 28 END SELECT CASE DEFAULT print *, Numero de mes invalido END SELECT END PROGRAM estructura_casos
5.3 BUCLES
Los bucles se utilizan para repetir la ejecucin de un conjunto de sentencias un determinado nmero de veces o hasta que se cumpla una determinada condicin. Es posible referirse a estos casos como bucles controlados por contador o bucles controlados por expresin lgica, respectivamente. La forma general es : DO [control_de_bucle] bloc END DO control de bucle: define las condiciones de ejecucin del bucle bloc: es un conjunto de sentencias vlidas