Вы находитесь на странице: 1из 21

Facultad de Ciencias Exactas, Ingeniera y Agrimensura Universidad Nacional de Rosario

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

Manual de FORTRAN Parte 1 pag. 2 de 21

1. Comenzando a trabajar con Fortran

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

Aparece la siguiente ventana:

Ahora para crear un espacio de trabajo (Workspace), en la barra de Men, seleccione FILE y NEW

Manual de FORTRAN Parte 1 pag. 3 de 21

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.

Manual de FORTRAN Parte 1 pag. 4 de 21

Ver la primer ventana. Finish y aparece la segunda ventana

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.

Manual de FORTRAN Parte 1 pag. 5 de 21

Comenzar a escribir el cdigo fuente PROGRAM Nombre

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.

Luego elige abrir y aparece:

En esta ventana, selecciona el proyecto y el archivo deseado.


Manual de FORTRAN Parte 1 pag. 6 de 21

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:

Elija la pestaa General y obtendr:

Seleccione la opcin Exclude file from build y luego diga OK. Observe que el icono correspondiente al file eje1.f90 a cambiado.

1.2 Guardar el programa


Vaya escribiendo el programa, y guarde eligiendo la opcin SAVE AS (si es la primera vez que lo guarda) SAVE (si guarda con modificaciones).

1.3 Compilar el programa


Para compilar el programa debe pulsar el botn o pulse la combinacin de teclas Ctrl y F7 en la parte superior de la barra de herramientas

1.4 Ejecutar el programa


Para ejecutar el programa debe pulsar el botn o pulse la combinacin de teclas Ctrl y F5 en la parte superior de la barra de herramientas

1.5 Generar el ejecutable


Para generar el .exe debe pulsar el botn o pulse F7

Manual de FORTRAN Parte 1 pag. 7 de 21

2. INTRODUCCIN AL LENGUAJE FORTRAN


2.1 Qu es FORTRAN
La palabra FORTRAN deriva de FORmula TRANslation. (Traductor de frmulas). Fortran se cre y se ha desarrollado como un lenguaje especializado en clculos tcnicos y cientficos. Las bibliotecas matemticas y numricas existentes para Fortran son probablemente las ms completas y eficientes. Fortran fue el primer lenguaje cientfico de alto nivel utilizado en la historia de los computadores. La primera versin fue desarrollada para el IBM 704 por John Backus y colaboradores entre 1954 y 1957. Poco a poco se empezaron a desarrollar versiones mejoradas, de las cuales muchas obtuvieron Normas Internacionales ANSI (America Nacional Standard Institute) para definir un Fortran estndar aprobado por la ISO (Internacional Standards Organization). Fortran, ha evolucionado incorporando ideas de otros lenguajes ms modernos. La evolucin de los compiladores FORTRAN se resumen en el siguiente listado: 1958 FORTRAN I II y III 1966 FORTRAN IV o Fortran 66 1er. NORMA ANSI 1977 FORTRAN V o Fortran 77 - Revision NORMA ANSI 1990 FORTRAN 90 Normas ISO y ANSI 1994 Primer compilador Fortran 90 1995 FORTRAN 95 1997 FORTRAN 95 y Normas ISO y ANSI 2002 FORTRAN 2000 GNU FORTRAN versin de software Libre FORTRAN 2003 Object Oriented Programming FORTRAN 2008 (no est en Mercado) parallel processing model and BIT data type

2.2 Estructura general de un programa FORTRAN


La primera y la ltima lnea de un programa son respectivamente:

PROGRAM program_name
...

END PROGRAM program_name


Es habitual obligarse a declarar todas las variables que se vayan a utilizar poniendo como segunda lnea del programa con IMPLICIT NONE Cada rengln o lnea del programa pueden tener hasta 132 caracteres. Una lnea puede contener varias sentencias, separadas por el carcter punto y coma (;). Las lneas de comentario empiezan por el carcter ! Se admiten comentarios al final de una sentencia ejecutable, pues el compilador ignora todo lo que aparece en una lnea a continuacin del carcter !, excepto si este carcter aparece en el interior de una cadena de caracteres. Ejemplos 1) PROGRAM suma ! Este programa suma dos nmeros enteros IMPLICIT NONE INTEGER a,b,c ! Se definen a las variables a, b y c como enteras read(*,*) a ! Lee el valor de la variable a desde el teclado read(*,*) b ! Lee el valor de la variable b desde el teclado c = a+b ! Asigna a la variable c el resultado del valor de a ms el valor de b write(*,*) c ! Escribe por pantalla el valor de la variable c END PROGRAM ! Finaliza el programa 2) PROGRAM prod ! ste programa lee dos nmeros, los multiplica y muestra el resultado IMPLICIT NONE REAL num1,num2,resul WRITE(*,*) 'Introduzca los nmeros:' READ(*,*) num1,num2 resul=num1*num2 WRITE(*,*) 'El resultado es ',resul END PROGRAM
Manual de FORTRAN Parte 1 pag. 8 de 21

2.3 Caracteres permitidos


Los caracteres permitidos en Fortran son los siguientes: 0,1,2,3,4,5,6,7,8,9 A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z ' " ( ) + - * / : = ! & $ ; < > % ? , . (incluye blanco, punto, coma, y punto y coma)

Es importante tener en cuenta que Fortran no distingue entre maysculas y minsculas.

2.4 Palabras reservadas


Como todos los lenguajes de programacin, Fortran, tiene palabras reservadas al lenguaje especfico. Las palabras reservadas son:

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 una buena prctica usar nombres que identifiquen su uso en el programa.

2.6 Tipos de Datos


Los programas en FORTRAN manejan dos objetos diferentes: las constantes y las variables. Las constantes tienen un valor fijo que se define al comienzo del programa y que no puede modificarse. Las variables pueden cambiar de valor durante la ejecucin del programa. Constantes y variables deben tener tipos de dato especficos que indican al programa como almacenarlas y manejarlas. Fortran soporta los siguientes tipos de datos: INTEGER, REAL, COMPLEX, CHARACTER y LOGICAL. Las variables se declaran en la forma:

INTEGER :: i, j, hora, minutos=60 REAL :: pi=3.141592654, velocidad, valorMedio=0.

Manual de FORTRAN Parte 1 pag. 9 de 21

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:

(1.23, -3.12), (1e-02, .324e-02)


Las variables complejas se pueden combinar con los operadores +, , *, / y **. De todos los operadores relacionales, slo los operadores == y /= se pueden utilizar con variables complejas. Tambin muchas funciones de biblioteca que se pueden aplicar a variables complejas, como por ejemplo SQRT, ABS, SIN, COS, LOG y EXP. Estas funciones son generales, en el sentido que su argumento puede ser una variable REAL . Otras funciones intrnsecas estn especialmente dirigidas a variables complejas, como por ejemplo CONJG(c), que calcula el complejo conjugado; REAL(c) e AIMAG(c) que devuelven las partes real e imaginaria de un complejo c manteniendo la clase; CMPLX(x, KIND=k) y CMPLX(x, y, KIND=k), que convierten una o dos variables numricas de cualquier tipo en un nmero complejo de la clase especificada, con parte imaginaria nula cuando slo se da un argumento numrico. Las variables complejas pueden ser ledas con READ. Cuando no se incluye formato, las partes real e imaginaria deben ir entre parntesis, separadas por una coma. Si la lectura es con formato no se incluye el parntesis. En la escritura sin formato con PRINT * o WRITE (*,*) los valores complejos se muestran entre parntesis, separados por una coma. Los valores numricos de la parte real e imaginaria se definen como los nmeros reales. IMPORTANTE Fortran no obliga a declarar las variables que se van a utilizar. Realiza una convencin de nombre implcita, Cuando encuentra en el programa una variable que no fue declarada le fija el tipo de dato del valor o la expresin que tiene asignada.

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.

2.6 Operadores aritmticos


Los operadores aritmticos binarios son: Suma (+), Resta (-), Multiplicacin (*), Divisin (/) y Potenciacin (**) No se pueden poner nunca dos operadores consecutivos. Si es preciso se utilizan los parntesis para separarlos.

2.7 Expresiones aritmticas


Las expresiones aritmticas se definen mediante una combinacin de variables, constantes numricas, parntesis, llamadas a funcin y operadores aritmticos. El orden de las operaciones aritmticas en una expresin es el siguiente: 1. Se evala en primer lugar el operador potencia (**). Si hay varios, se ejecutan de derecha a izquierda. 2. Se evalan a continuacin las multiplicaciones y divisiones. Si hay varios operadores de este tipo se evalan de izquierda a derecha. 3. Finalmente se evalan las sumas y restas, tambin de izquierda a derecha. Los parntesis cambian el orden de realizacin de las operaciones: en primer lugar se realizan las operaciones del parntesis ms interior. Las operaciones se realizan con el tipo de datos de los operandos. Por ejemplo, la suma de INTEGER es un INTEGER; la divisin de dos INTEGER es otro INTEGER, lo que quiere decir que se trunca el cociente.

Manual de FORTRAN Parte 1 pag. 11 de 21

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.

2.8 Funciones numricas


Fortran dispone de funciones numricas para evaluar las funciones matemticas ms habituales. Todas las funciones numricas se utilizan incluyendo su nombre, seguido de los argumentos entre parntesis y separados por comas, en alguna expresin aritmtica. La funcin se evala y el resultado se incluye en dicha expresin aritmtica. FORTRAN cuenta con una serie de funciones matemticas pre-definidas llamadas funciones intrnsecas. Una lista de algunas de ellas (no todas) es: Funcin Sqrt(x) abs(x) sin(x) cos(x) tan(x) Asin(x) Acos(x) Atan(x) Exp(x) Alog(x) Alog10(x) int(x) Nint(x) Mod(div, divis) Significado Raz cuadrada de x Valor absoluto de x Seno de x Coseno de x Tangente de x Arco seno de x Arco coseno de x Arco tangente de x Exponencial de x Logaritmo natural de x Logaritmo en base 10 de x Parte entera de x Redondea al entero ms prximo Resto de la divisin entera

Manual de FORTRAN Parte 1 pag. 12 de 21

2.9 Operaciones con caracteres


Las cadenas de caracteres van entre apstrofos o entre dobles comillas. El operador de concatenacin es la doble barra //. A partir de una variable de tipo cadena de caracteres se puede extraer una subcadena por medio del carcter (:). Por ejemplo si la variable Especie tiene como valor "rinoceronte", la subcadena Especie(:4) es "rino", Especie(3:8) es "nocero" y Especie(9:) es "nte". Hay otras funciones para manejo de cadenas de caracteres, algunas de ellas son:

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

2.10 Expresiones lgicas y operadores relacionales


Las expresiones lgicas pueden ser simples o compuestas. Se llaman expresiones lgicas simples las que constan de una constante lgica (.TRUE. y .FALSE.) o de una variable lgica, o bien de una expresin relacional en la forma: expresin1 operador_relacional expresin2 donde tanto expresin1 como expresin2 son expresiones aritmticas, de caracteres o lgicas, y operador_relacional es uno de los siguientes: Smbolo < o .LT. > o .GT. == o .EQ. <= o .LE. >= o .GE. /= o .NE. Significado Menor que Mayor que Igual que Menor o igual que Mayor o igual que Distinto de

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.

4. Sentencias de ENTRADA/SALIDA sencillas


Fortran permite utilizar sentencias de entrada/salida muy sencillas, en las que casi todas las opciones son las de defecto. Existen otras sentencias de entrada/salida ms complejas que no usaremos en este curso. La sentencia read es usada para la entrada y la sentencia write para la salida. El formato es: read (nm_unidad, c_ f ormato) lista_de_variable write(nm_unidad , c_formato) lista_de_variables El nmero de unidad se puede referir a la salida estndar, entrada estndar o a un archivo. Nosotros dejamos por el momento *, ya que es la unidad de entrada teclado. El c_formato se refiere a un formato para manejar la alineacin de los datos en pantalla. Es posible simplificar estas sentencias usando asteriscos (*) para algunos argumentos, como lo que se ha hecho en los ejemplos anteriores. A lo anterior se le conoce como una lectura/escritura de lista dirigida. read (*,*) write (*,*)

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:

integer m, n real x, y read (*,*) m, n read (*,*) x, y

Manual de FORTRAN Parte 1 pag. 14 de 21

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:

-1 100 -1.0 1e+2


O se pueden agregar comas como separadores:

-1, 100 -1.0, 1e+2


Observar que la entrada en Fortran es sensible a la lnea, por lo que es importante contar con el nmero apropiado de elementos de entrada (registros) en cada lnea. Por ejemplo, si se da la siguiente entrada en una sola lnea

-1, 100, -1.0, 1e+2


entonces a m y a n se asignarn los valores de -1 y 100 respectivamente, pero los dos ltimos valores sern descartados, dejando a x e y sin definir.

4.1 Sentencia WRITE


Como ya dijimos, la sentencia WRITE permite mostrar variables y constantes en la salida estndar (consola) desde la que se est ejecutando el programa. Uso sencillo: WRITE (*, *) lista de variables y constantes Ejemplo: PROGRAM nombre IMPLICIT NONE CHARACTER*20 nom WRITE(*,*) WRITE(*,*) 'COMO TE LLAMAS?' WRITE(*,*) READ(*,*) nom WRITE(*,*) WRITE(*,*) 'HOLA ', nom WRITE(*,*) END PROGRAM Uso MEJORADO: write(nm_unidad , c_formato) lista_de_variables

Cdigos comunes de formato


Las letras para cdigos de formato ms comunes son:

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.

4.2 Sentencia READ


La sentencia READ hace que se adquieran ciertos valores (normalmente desde teclado) desde una o ms lneas de entrada y que se asignen a la lista de variables de la sentencia. Cuando el programa llega a una sentencia READ espera a que el usuario introduzca los valores de las variables que deben ser ledas. Por este motivo siempre es conveniente, antes de llamar a la sentencia READ, mostrar un mensaje por la consola solicitando los datos. Formato READ (*,*) lista de variables separadas por comas Ejemplo READ (*,*) velocidad, tiempo Una lnea de entrada es un conjunto de valores de distinto tipo que terminan con un carcter Intro. Una lnea de entrada se puede introducir desde teclado, o se puede leer desde un archivo. Se pueden leer cadenas de caracteres ponindolas entre comillas simples o dobles.

Manual de FORTRAN Parte 1 pag. 16 de 21

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.

5. SENTENCIAS DE CONTROL: bifurcaciones y bucles


En ausencia de otros tipos de indicaciones, las sentencias de un programa Fortran se ejecutan de modo secuencial, es decir cada una a continuacin de la anterior. Las sentencias de control permiten modificar esta ejecucin secuencial. Las principales sentencias de control corresponden a estas dos categoras: Bifurcaciones: Dependiendo de que se cumpla o no cierta condicin, permiten ejecutar o no una parte del cdigo, o bien permiten ejecutar alternativamente unas u otras sentencias. Bucles: Los bucles ejecutan repetidamente un conjunto de sentencias. Algunos bucles utilizan un contador para ejecutarlas un nmero determinado de veces y otros utilizan una condicin de salida o de terminacin.

En ambas sentencias de control las expresiones lgicas constituyen una parte importante, porque permiten controlar la ejecucin de dichas sentencias.

5.1 Bifurcaciones 5.1.1 Sentencia IF


La forma ms sencilla de la bifurcacin IF es la siguiente: IF ( exp_logica ) THEN bloc1 [ELSE bloc2] END IF exp_logica : es una expresin de tipo lgica bloc#: es un conjunto de sentencias vlidas Las sentencias que estn dentro del bloque se ejecutan slo si expresin_lgica es VERDADERA

Manual de FORTRAN Parte 1 pag. 17 de 21

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

Manual de FORTRAN Parte 1 pag. 18 de 21

5.1.2 Sentencia CASE


Es una estructura que permite varios casos de seleccin. Slo se ejecuta el bloque de sentencias para el cual el valor de selector coincide con el valor en la lista de valores. Posteriormente se salta a la lnea END SELECT. En caso de que selector no coincida con ningn caso, se ejecuta el bloque de sentencias por defecto del CASE DEFAULT (es optativo). SELECT CASE (selector) CASE (lista_de_valores1) Sentencias1 CASE (lista_de_valores2) Sentencias2 CASE DEFAULT Sentencias3 END SELECT selector es una expresin de tipo INTEGER, CHARACTER o LOGICAL (no REAL). Los diferentes casos o situaciones para selector pueden tener la forma: :x todos los valores x x: todos los valores x x:y todos los valores en el rango entre x e y, con x y x tan slo el valor x. Se puede utilizar una lista de casos comunes (que ejecutarn el mismo cdigo) en un nico CASE separndolos por comas. Ejemplo: 1)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 SELECT CASE (opcion) CASE ( 1 ) res=a+b CASE ( 2 ) res=a-b CASE ( 3 ) res=a*b CASE ( 4 ) res=a/b CASE DEFAULT WRITE(*,*) 'NO HA ELEGIDO UNA OPCION VALIDA' END SELECT WRITE(*,*)'El resultado es: :',res END PROGRAM 2) PROGRAM signo IMPLICIT NONE INTEGER :: N, Signo READ (*,*) N SELECT CASE (N) CASE ( : -1) Signo = -1 CASE (0) Signo = 0
Manual de FORTRAN Parte 1 pag. 19 de 21

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

Manual de FORTRAN Parte 1 pag. 20 de 21

5.3.1 Bucles DO controlados por contador


La primera forma de este bucle es la siguiente: DO variable_de_control = valor_inicial, valor_final, incremento Sentencias END DO El modo de ejecutarse este bucle es el siguiente: la variable_de_control toma el valor_inicial y se compara con valor_final. Las Sentencias se ejecutan si dicha variable_de_control es menor o igual que valor_final si incremento es positivo, o si variable_de_control es mayor o igual que valor_ final si incremento es negativo. Los valores inicial, final y el incremento de la variable de control se determinan antes de que el bucle comience a ejecutarse, y no deben ser modificados durante la ejecucin del bucle. Si el valor de incremento no se explicita, el programa asume el valor 1. Ejemplos: DO j=2,4 se repite 3 veces con j valiendo 2, 3 y 4. DO i=10,1,-1 se repite 10 veces con i valiendo 10, 9, 8, ...., 1. DO i=2,1 no se repite nunca pues i no puede ir de 2 a 1 aumentando 1 en cada paso. Salta directamente al END DO. PROGRAM index_do INTEGER i, suma, n ... suma=0 DO i=1, n, 2 suma = suma+i END DO ... END PROGRAM index_do

5.3.2 Bucle DO controlados por expresin lgica


Se trata de un bucle que se repite MIENTRAS se verifique una condicin. Se escribe de la forma: DO WHILE condicin acciones END DO Cuando la condicin deje de cumplirse, el bucle termina. Ejemplo: un bucle que muestra los nmeros del 1 al 9 (Ojo, podra parecer que se ejecuta 10 veces, pero slo son 9, pues cuando n=10 la condicin ya no se verifica, y por lo tanto el bucle no se ejecuta. Sera distinto si en lugar de n<10 fuese n<=10). Ejemplos 1) PROGRAM muestra INTEGER n n=1 DO WHILE (n < 10) write(*,*) n n=n+1 END DO END PROGRAM muestra 2) PROGRAM iteration_while INTEGER n, suma n=0 suma = 0 DO WHILE (suma < 500) n = n+1 suma = suma + n END DO END PROGRAM iteration_while

Manual de FORTRAN Parte 1 pag. 21 de 21

Вам также может понравиться