Você está na página 1de 54

CIDIAT

Curso de postgrado en Desarrollo de Recursos de Aguas y Tierras

APUNTES DE PROGRAMACION

Mrida, febero de 1997

CAPITULO I INTRODUCCION A LA COMPUTACION


I. GENERALIDADES I.1 El computador El computador es un equipo electro-mecnico capaz de procesar informacin en forma rpida y confiable. En particular, el com putador puede : - ejecutar operaciones elementales. - ejecutar una sola operacin a la vez. - ejecutar millones de operaciones por segundo. - almacenar y manejar gran cantidad de informacin. Toda operacin a ser ejecutada por el computador debe formar parte de un programa, el cul es un conjunto de instrucciones bsicas a ser ejecutadas segn un orden lgico preestablecido. En general, el computador comprende una unidad central de procesamiento (CPU), y unidades perifricas de entrada y salida. El CPU comprende la memoria principal, la unidad de control y la unidad de procesamiento propiamente dicha. Los perifricos de entrada suelen ser : - Lectora de tarjetas perforadas ( ya en desuso ). - Unidad de respaldo (casete, disquete, CD,...). - Terminal de vdeo ( cnsola ). - Unidad de disco ( duro o flexible ). - Tabla de digitalizacin. y los de salida : - Terminal. - Unidad de espaldo. - Disco duro o disquete. - Impresora. - Graficador ( plotter ). Los perifricos de entrada proporcionan informacin ( datos y programas ) en forma manejable por el computador. La memoria central almacena los datos y programas, la unidad de control controla el flujo de informacin entre la

memoria y la unidad de procesamiento, y activa los perifricos de acuerdo a las instrucciones recibidas. La unidad de procesamiento ejecuta las operaciones programadas, utilizando los datos almacenados en memoria central. Finalmente, los perifricos de salida proveen resultados en form a aceptable por el usuario. I.2 El procesamiento. La unidad de procesamiento trabaja en base a informacin en notacin binaria, o sea 0 o 1 ( pasa o no pasa corriente ). El tamao del microprocesador central, o " chip ", define la capacidad del computador. Hasta hace uncos aos, los microcomputadores usaban un chip de 8 bits; luego fueron de 16 bits y ahora la mayora son de 32 bits. Aqui cabe definir algunos trminos utilizados : - un bit es la mnima informacin almacenada por el computador y corresponde a un dgito binario ( 0 o 1 ). - Un byte es el conjunto de ocho bits - Una palabra equivale a dos bytes. Kb. significa Kilobyte, o sea 1024 bytes ( 210). Mb. significa Megabyte, o sea un milln de bytes. Si el computador trabaja en base a un chip de 16 bits, caracterstico de los minicomputadores de hace unos aos, el mximo valor entero que puede almacenar para direccionar una informacin, corresponde a 1111111111111111, o sea 2 16 en notacin decimal, lo que vale 65536 o en forma normalizada 64 Kb. Es una limitacin importante, sin embargo se ver mas tarde como se puede obviar. II. EL EQUIPO DE COMPUTACION II.1 El sistema operativo. Se llama sistema operativo al conjunto de programas que maneja los recursos del computador. Entonces, el sistema operativo puede ser considerado como un gerente quin : - conoce siempre el estado de los recursos del equipo de computacin. - sabe quin , cuando y como usan esos recursos. - distribuye esos recursos entre los usuarios. - recupera los recursos cuando sea necesario. Estos recursos, como se ha visto antes, vienen constituidos por el CPU, la memoria central y los perifricos. Los sistemas operativos usados actualmente son el DOS con o sin el ambiente Windows, as como el OS-2, UNIX (o LINUX), esos ltimos principalmente en estaciones de trabajo.

II.2 El manejo de archivos. Un archivo es un conjunto de datos de informacin ; - lluvias diarias de una cierta estacin. - listado de estudiantes. - conjunto de instrucciones de un programa. Un registro es un elemento de informacin de un archivo y puede ser : - la lluvia de un da. - el nombre de un estudiante. - una sola instruccin ( Fortran por ejemplo ). Un archivo puede estar ubicado en diferentes sitios, tales como en disco, en disquete,... . Cada uno de esos dispositivos contiene un directorio de archivos, el cul contiene informacin acerca del mismo disco como tambin el listado de los nombres y ubicacin de todos los archivos que ah residen.

CAPITULO II DESARROLLO DE PROGRAMAS EN FORTRAN

I. GENERALIDADES En este captulo, se describir el proceso de desarrollo de program as en FORTRAN 77. Cuando se quiere desarrollar un programa para resolver un problema especfico, hay que seguir un cierto proced imiento que asegure al usuario un programa final correcto y confiable. Por lo tanto, actualmente, el desarrollo de programas debe hacerse segn una secuencia de pasos bien definidos. Las etapas consecutivas en este proceso son las siguientes : 1. Identificacin del problema y definicin de objetivos. 2. Seleccin del mtodo de resolucin. 3. Descripcin del algoritmo y concepcin del flujograma. 4. Codificacin del programa. 5. Compilacin del programa y correccin de los errores. 6. Carga del programa en memoria central. 7. Corrida del programa y correccin de los errores. 8. Documentacin del programa. Cada una de esas etapas tiene sus objetivos especficos, los cuales al final facilitan la obtencin de un programa correcto y que cumpla con el objetivo inicial. A continuacin, se detallan las diferentes etapas por separado, ilustrndolas con un ejemplo sencillo. II. IDENTIFICACION DEL PROBLEMA Y DEFINICION DE OBJETIVOS. A este nivel, se debe saber claramente cul es el problema que se quiere resolver, es decir cuales son los datos b sicos del mismo y que resultado se espera tener despues de resolverlo, para establecer con claridad cul es el objetivo final que se persigue con el programa que se va a escribir. Por ejemplo, se puede considerar el problema siguiente : Cul es la suma de los n primeros nmeros enteros ?

En este caso, los datos del problema son el nmero n de enteros que se quieren sumar y esos mismos nmeros. El resultado busquado es la suma de esos n nmeros. III. SELECCION DEL METODO DE RESOLUCION. Ahora, el problema es : conociendo lo que se quiere, como obtenerlo. Se hace necesario seleccionar el mtodo de resolucin que mejor se adapte al problema, tomando en cuenta que el problema se va a resolver por computadora y el lenguaje de computacin que se va a usar. Para el ejemplo anterior, hay varias alternativas para sumar los n primeros enteros : 1. Hacer la suma de los nmeros uno por uno en orden creciente. 2. Hacer la suma de los nmeros uno por uno en orden decreciente. 3. Utilizar la frmula : S = n(n+1)/2. En este caso, se seleccionar la primera alternativa, o sea sumar los nmeros en orden creciente. IV. DESCRIPCION DEL ALGORITMO Y CONCEPCION DEL FLUJOGRAMA. Cuando ya se conoce el mtodo que se va a usar, entonces es necesario describir el algoritmo de resolucin. Este consiste en una lista clara y sin ambigedades de las operaciones que se de ben realizar, en forma de instrucciones elementales. Luego, a partir del algoritmo, se realiza el flujograma o diagrama de flujo que es una representacin grfica del algor itmo elaborado. Esa representacin grfica se hace en base a una serie de figuras geomtricas normalizadas, las cuales se presentan en la Figura V. El diagrama de flujo consiste entonces en describir el algoritmo por una secuencia de instrucciones incluidas dentro de esas figuras geomtricas.

FIGURA V. Para el ejemplo presentado, la descripcin del algoritmo ser la siguiente : 1. Leer el valor de n. 2. Inicializar la suma en cero. 3. Empezar con el nmero 1. 4. Si este nmero es inferior o igual a n, seguir. Sino, ir al paso 8 5. Sumar el nmero a la suma anterior. 6. Pasar al nmero siguiente. 7. Volver al paso 4. 8. Imprimir el valor de la suma.

Esa secuencia de instrucciones elementales describe los pasos que se deben seguir para realizar el calculo de la suma de los n primeros nmeros enteros. Sin embargo, esa representacin escrita del proceso de clculo no es la mas conveniente y una representacin grfica del algoritmo puede resultar mucho mas cmoda para la codificacin posterior del programa. Por lo tanto, siempre es muy til hacer un diagrama de flujo antes de realizar la codificacin del programa en el lenguaje seleccionado. Eso ha demostrado ser muy provechoso en el caso del Fortran. As, el algoritmo anterior puede ser representado por el flujograma siguiente, usando las figuras normalizadas ( Figura VI ). En cada una de esas figuras, aparecen las instrucciones del algoritmo tales como han sido descritas anteriormente.

FIGURA VI.

En los ltimos diez aos, se han desarrolladas tcnicas para m ejorar la elaboracin de programas. En particular, la tcnica de programacin estructurada ha resultado ser muy til en la obtencin de program as correctos y confiables. En la programacin estructurada, las combinaciones de figuras permitidas en los diagramas de flujo son limitadas. Prcticamente, se permiten tres estructuras bsicas. Esa tcnica de programacin estructurada se ver con mas detalles en el captulo siguiente.

V. CODIFICACION DEL PROGRAMA. La codificacin del programa consiste en la traduccin en el lenguaje seleccionado de las instrucciones descritas en el diagrama de flujo. En el presente caso, esta codificacin se hace en Fortran 77. Teniendo un flujograma bien realizado y suficientemente detallado, la transcripcin en Fortran de un programa no debe presentar muchas dificultades. De ah la importancia del flujograma en el desarrollo de programas. Adems, al usar la tcnica de programacin estructurada, la escritura del programa en Fortran se hace en el mismo orden de las instrucciones del diagrama de flujo. Tambin debe descatarse la importancia de intercalar comentarios en las instrucciones del programa. Resultarn de mucha utilidad en el momento de modificar el programa o de volver a usarlo despus de algn tiempo. Para el mismo ejemplo anterior, el programa codificado resultar ser :

PROGRAM SUMA READ (1,*) N S=0 I=1 10 IF ( I . LE . N ) THEN S=S+I I=I+1 GO TO 10 ENDIF WRITE (1,*) S END En este ejemplo, se usan instrucciones Fortran que se detallarn en otros captulos con el fin de ilustrar las diferent es etapas del desarrollo del programa. Sin embargo, esas instrucciones se entienden fcilmente y se puede ver que siguen el mismo orden del flujograma. VI. COMPILACION, CARGA DEL PROGRAMA Y CORRECCION DE ERRORES. La compilacin del programa consiste en traducir en lenguaje mquina, el programa escrito en Fortran 77. Esa compilacin se hace corriendo un programa ( el compilador ) que realiza esa traduccin. Al hacer la compilacin se detectan los errores de sintaxis, es decir los errores cometidos en la codificacin del programa al no respetar las reglas de escritura ( caracteres equivocados, falta de parntesis, falta de operador, ... ). Todos esos errores son detectados por el compilador y se hace necesario corregirlos para seguir desarrollando el programa, o sea pasar a las etapas siguientes.

VII. CARGA, EJECUCION DEL PROGRAMA Y CORRECCIONES. Una vez compilado el programa ha sido traducido al lenguaje de la mquina y existe como programa objeto. Para poder ser ejecutado, debe ser cargado en la memoria central con todas las libreras y subrutinas que pueda necesitar. Entonces el programa se encontrar en forma ejecutable en la unidad central de procesamiento, CPU, del computador. A este nivel, se pueden detectar los errores de lgica del programa, tales como : - divisin por cero. - logaritmo de un nmero negativo. - errores de formatos de entrada o salida. - arreglos mal dimensionados. - etc ...

Tambin se puede validar el programa corrindolo para un caso cuya solucin se conoce o haciendo chequeos manuales de partes del mismo cuando es posible. As se tendr la seguridad de que el programa escrito cumple con el objetivo inicial. Si no es el caso, entonces hay que reiniciar el procedimiento de desarrollo del programa desde el principio y chequear cada uno de lo pasos. IX. DOCUMENTACION DEL PROGRAMA. Teniendo ahora un programa correcto y confiable, es indispensable tener tambin una documentacin precisa y completa del mismo. En efecto, cualquier usuario futuro de este programa no ha participado en la elaboracin del m ismo y, por lo tanto, no est enterado de como trabaja dicho programa. Igualmente, cualquier modificacin o mejora que se quiera hacer al programa hace necesario conocer perfectamente el programa original. Esa documentacin debe incluir lo siguiente : Nombre y objetivo del programa. Fecha de elaboracin y autor (para cualquier informacin adicional ). Listado de variables y su significado. Formato de introduccin de los datos. Formato de salida de los resultados. Un ejemplo de corrida con sus respectivos datos de entrada y resultados. Referencias bibliogrficas.

CAPITULO III PROGRAMACION ESTRUCTURADA

I. CONCEPTOS GENERALES. A mediados de los aos 60, la complejidad creciente de los programas as como su mayor tamao, hizo que fueron necesarios equipos de programadores trabajando juntos para desarrollar programas importantes. Tambin, el mantenimiento de los programas result ser una parte muy importante de las actividades de los centros de computacin. Entonces, varios investig adores empezaron a trabajar en un estilo disciplinado y estructurado de programar. Las ideas mas importantes que manejaron entonces fueron las de evitar los "GOTO" incondicionales, de disear program as de "arriba hacia abajo", y de hacer diseos modulares. Basndose en eso, se desarroll un conjunto de tcnicas de programacin que hoy en da se conocen como " Programacin Estructurada ". En este captulo, se presentan los elementos mas importantes en el uso de la programacin estructurada, insistiendo en la filosofa de esa tcnica. Para tal fin, se usar tambin un ejemplo detallado de aplicacin de esas tcnicas. II. ESTRUTURAS BASICAS DE LA PROGRAMACION ESTRUCTURADA. La idea bsica de esa tcnica es que cada mdulo del programa debe tener un solo punto de entrada y un solo punto de salida. El tamao de esos mdulos depende del nivel de detalle, pero en cada nivel se debe respetar esa regla. Por lo tanto, existen tres mdulos bsicos que se emplean para programar. Esas tres estructuras son las siguientes : Secuencia simple Seleccin o ramificacin condicional Repeticin o iteracin condicional En la figura siguiente se presentan esas tres estructuras bsicas.

Secuencia

Seleccin

Iteracin

La restriccin a esos tres tipos de es tructuras no es arbitraria, sino basada en consideraciones sobre la correccin de program as. En efecto, esas tres estructuras se caracterizan por tener una sola entrada y una sola salida, y todas ellas pueden ser reemplazadas por un solo bloque con una entrada y una salida. Adems, cuando se codifican, pueden ser ledas de arriba haci a abajo en forma continua, sin tener que saltar de una lnea a otra. Cada una de esas estructuras corresponde a un tipo de operacin diferente : Secuencia de instrucciones Estructura " IF-THEN-ELSE " Estructura " DO-WHILE " La estructura de secuencia consiste en una accin seguida por otra, o sea se realiza la operacin A y luego la operacin B. La estructura de seleccin consiste en una prueba para una condicin, seguida por dos rutas alternativas que el programa seguir. Dependiendo del resultado de la prueba, el programa seguir una u otra ruta. Luego de pasar por una de esas rutas, el programa regresa a un solo punto. Este tipo de operacin puede identificarse como " IF ... THEN ... ELSE " es decir " SI ... ENTONCES ... DE LO CONTRARIO ". Eso quiere decir que si la condicin de la prueba es verdadera, entonces se realizar la operacin A; de lo contrario, se efectuar la operacin B. La estructura de repeticin tambin puede llamarse de iteracin, ya que la operacin especificada se repite mientras se cumple la condicin de la prueba. Lo que puede identificarse como una secuencia del tipo " DO WHILE " ( Hacer Mientras ). En la lgica de un programa, se prueba una condicin, la cul rige la ejecucin de la operacin que la sigue. Si esta condicin es verdadera, se ejecuta la operacin y se repite la prueba. Por lo tanto, esta operacin se repetir tantas veces como se cumpla la condicin de prueba. Cuando esa condicin ya no es verdadera, se termina el ciclo y el programa pasa a la instruccin siguiente. La ventaja de usar solamente esas tres estructuras es la de realizar programas mas fciles de entender y mantener. Es posible combinar esas tres estructuras para producir una secuencia mas compleja, pero sin perder nunca la simplicidad inherente a esas tres figuras. Ha sido demostrado que en base a esas tres estructuras, se puede expresar en Fortran 77 la lgica de cualquier program a.

En resumen, el empleo de esas figuras permite : 1. Simplificar los programas. Existe un solo punto de entrada a cada estructura asi como un solo punto de salida. 2. Leer un programa de arriba hacia abajo, haciendo mas visible la lgica del mismo, facilitando asi su correccin y modificacin. El lenguaje Fortran no fue diseado inicialm ente para programacin estructurada. Sin embargo, con las modificaciones introducidas en el Fortran 77, se puede seguir esa filosofa en forma razonablemente buena. Una de las implicaciones del uso de esa tcnica en Fortran, es la exclusin del " GOTO " incondicional, lo cul se discutir en los captulos del Fortran. III. EJEMPLO DE PROGRAMA ESTRUCTURADO. En la figura siguiente, se presenta el diagrama de flujo de un programa, el cul se va a analizar en base a lo anterior.

FIGURA VII

En este flujograma, se pueden identificar varias de las estructuras bsicas vistas anteriormente. Por ejemplo, en la Figura siguiente, lo que aparece en el rectngulo representa una estructura tipo " DO-W HILE ".

FIGURA VIII.

En este rectngulo, se hace una prueba sobre la condicin Test2, la cul manda a realizar la operacin 4 mientras sigue verdadera. Cuando esta condicin ya no se cumple, el programa sigue a la instruccin B. Esta secuencia puede entonces ser reemplazada por un rectngulo equivalente, tipo caja negra, que cumple la misma funcin, debido al hecho que ambas tienen una sola entrada y una sola salida. Ahora, se tiene lo que aparece en la Figura IX en la cul, otra vez, se identifican las estructuras bsicas de la programacin estructurada.

FIGURA IX. Ahora en el rectngulo, aparece una secuencia simple, la cul otra vez se va a reemplazar por una caja negra, con una entrada, una salida.

FIGURA X.

El rectngulo encierra ahora la estructura 3, la cul es del tipo " IFTHEN-ELSE ", en que se chequea la condicin Test1. Si es verdadera, se ejecuta la operacin 6, sino se realiza la operacin 3. Ot ra vez, la secuencia encerrada en el rectngulo puede ser reemplazada por una operacin equivalente de una sola entrada, una sola salida, como aparece en la figura siguiente :

FIGURA XI Ya se tiene una secuencia simple de operaciones, la cul reemplaza todas las operaciones anteriores. Esa secuencia viene encerrada en un rectngulo y puede ser tambin reemplazada por otra operacin, tal como aparece finalmente en la Figura XII. As, se puede ver en este caso sencillo, la aplicacin de la programacin estructurada, basndose siempre en las mismas tres estructuras bsicas, secuencia simple, seleccin y repeticin, respetando la condicin de una sola entrada, una sola salida. Adicionalmente, se puede ver que la codificacin del program a presentado en el diagrama de flujo inicial, podr hacerse siguiendo directamente el orden de las instrucciones en dicho diagrama, lo cul tambin es caracterstico de la tcnica empleada.

FIGURA XII.

IV. DISEO DEL PROGRAMA. En el ejemplo anterior, se ha simplificado progresivamente el diagrama de flujo hasta llegar a una sola operacin. La tcnica de diseo de arriba hacia abajo consiste en la operacin inversa, es decir ir detallando cada vez m as el flujograma. Primero, se va entonces a usar un solo bloque de operaciones de una entrada, una salida tal como el de la Figura XII. Luego, en cada etapa del diseo, se refina el bloque de operaciones, empleando siempre estructuras de una sola entrada, una sola salida. Este proceso de reemplazo o de refinamiento sucesivo producir finalmente un diagrama de flujo similar al de la Figura VII. Lo que permitir luego codificar sin problema el programa y tambin facilitar en el futuro la correccin y modificacin del mismo. En efecto, el uso de estructuras de una sola entrada, una sola salida, permite luego incorporar nuevas estructuras al programa sin introducir nuevas conexiones con el resto del flujograma. Como se ha mencionado antes, el uso del GOTO incondicional debe ser eliminado o por lo menos restringido al mnimo ya que puede introducir muchas posibilidades de ramificacin en el programa, el cul perdera entonces su caracterstica mas importante. Por ejemplo, en la Figura XIII, aparece un diagrama de flujo noestructurado.

FIGURA XIII. De hecho, resulta imposible reducir dicho flujograma a un bloque de una sola entrada y una sola salida. Cuando no se cumple la condicin Test2, se realiza la operacin 3 y luego se regresa al punto A por una instruccin GOTO, lo cul hace que el programa no puede reducirse a una sola estructura y por lo tanto no es estructurado.

CAPITULO IV EL LENGUAJE FORTAN 77 CARACTERISTICAS GENERALES

I. INTRODUCCION. Un lenguaje de computacin permite la comunicacin entre el usuario y el computador mediante programas e instrucciones fcilmente manejables por el usuario y evitando toda ambigedad acerca de lo que quiere hacer el usuario y lo que debe hacer la mquina. El nivel de un lenguaje de computacin lo determina la cercana al nivel de interpretacin del usuario. As un lenguaje de alto nivel est mas cerca del usuario que de la mquina. Un lenguaje de alto nivel debe ser independiente del tipo de computador, pero no as el compilador el cul hace la traduccin del lenguaje del usuario al lenguaje de la mquina. Esa traduccin es una operacin necesariamente compleja y por lo tanto diferente para cada tipo de computador. Lenguajes de alto nivel lo son el Cobol, el Algol, el Pascal, el Fortran, el PL/1, el Basic, . . . El Cobol es el lenguaje mas utilizado en el rea administrativa y el Fortran el mas usado en el campo cientfico, por lo menos a nivel de sistemas importantes. A nivel de computador personal, el Basic ha tomado ahora mayor importancia. El Fortran, acrnimo de FORmula TRANslator, ha sido creado por IBM, principalmente, en el ao 1957. Desde entonces, ha sufrido cambios y evoluciones pasando del Fortran original al Fortran II, y luego al Fortran IV. Este ltimo ha sido estandarizado en 1966 por el ANSI, American National Standarts Institute, bajo el nombre de Fortran ANSI 66. En 1977, se adopt una nueva revisin, la cul agrega algunas caractersticas, aclara puntos ambiguos y hace cambios menores. Esa versin se conoce como Fortran 77. En 1990, se lanz al mercado una versin mejorada del Fortran, adaptada al ambiente Windows y a las capacidades actuales de los microcomputadores conocida como Fortran 90. En este captulo y en los siguientes, se describe el uso del Fortran 77.

II. REGLAS DE CODIFICACION. Cuando se va a escribir un programa en Fortran, la codificacin debe hacerse siguiendo algunas reglas. Una lnea consta de 80 colum nas, de las cuales algunas tienen un empleo especfico :

Columna 1

Empleo

Comentarios y opciones especiales. Un asterisco * o la letra C en primera columna indica que lo que sigue en la linea no es una instruccin Fortran y no ser traducido por el compilador. Sin embargo, se imprimir en el listado del programa, y por lo tanto se usa para comentarios de explicacin del mismo. 1-5 Etiqueta de instruccin. Se utiliza como identificador para hacer referencia a

esta instruccin. Puede escribirse en cualquiera de las 5 columnas, pero generalmente se coloca hacia la derecha, dejando espacios libres a la izquierda. Continuacin de lnea. Cuando una instruccin no cabe en una sola lnea, puede continuarse en la siguiente, coloca ndo una carcter diferente de cero en la columna 6 de la lnea de continuacin. Instrucciones FORTRAN. La instruccin puede empezar en cualquiera de las columnas 7 a 72. Para facilitar la lectura del programa, pueden usarse sangras y espacios Numeracin de lneas. Cuando se usaban tarjetas perforadas, las columnas 73 hasta 80 podan ser utilizadas para numerarlas. Lo importante de lo anterior es que las instrucciones Fortran deben codificarse entre las columnas 7 y 72, ambos inclusivos. Sin embargo, los datos pueden suministrarse usando las 80 columnas de la lnea. Cabe tambin destacar la diferencia existente entre la etiqueta que puede tener una instruccin, la cul sirve para referenciar dicha instruccin en el programa, y la numeracin de las lneas por el editor. Esa numeracin de lneas por el editor es propia del m ismo y no puede ser utilizada por el programa en Fortran. Se puede recalcar tambin la confusin posible entre diferentes caracteres al codificar un programa. Particularmente eso puede ocurrir con la letra o y la cifra 0, 73 - 80 7 - 72 6

y tambin la I y el 1. Para evitarlo, se acostumbra usar la letra o tal cul y usar para el cero.

III. CONSTANTES Y VARIABLES. 1. Constantes. Una constante es una cantidad que no vara, y por lo tanto puede escribirse usando su mismo valor ( por ejemplo : 3.14159 o 9.81 ). Viene representada por un nmero, con o sin punto decimal segn sea real o entera, y debe seguir las reglas del Fortran : a. No se usa nunca la coma. b. El signo + es implcito, pero los nmeros negativos deben usar el signo -. c. Los ceros a la izquierda se ignoran. Ejemplos : Constante aritmtica. 1,0 -6,0 1.000.000,00 Entero 1 -6 1000000 Real 1.0 -6.0 1000000.00

Tambin se puede usar la notacin cientfica o exponencial : Aritmtica 2.000.000,00 0,00001 Cientfica 2 x 106 10-5 Fortran 2. E06 1. E-5

Se puede asignar un nombre a una constante para hacer un programa mas general ( por ejemplo : PI o G ). En este caso, los nombres se rigen por las siguientes reglas : a. b. c. d. Puede tener hasta 6 caracteres, los cuales deben ser letras o cifras. El primer carcter debe ser una letra. Si la constante es entera, esa letra debe ser I , J , K , L , M o N. Los espacios en blanco se ignoran.

2. Variables.

Una variable es la representacin de una cantidad que se desconoce o que puede variar durante la ejecucin de un programa. En lgebra, una variable o incgnita se representa mediante un carcter tal como a, o x. En Fortran, se usa un nombre formado por una secuencia de uno hasta seis caracteres, siguiendo las mismas reglas expuestas para las constantes.

Ejemplos : Algebra x a j imin xmax _ Fortran X BETA A J IMIN XMAX DELTA Tipo real real real entera entera real real

Ejemplos incorrectos :

Variable AB.21 2XERT I+J CAUDALES X**2 UN POCO

Comentario Incorrecto : Uso del punto . Incorrecto : Empieza por 2 Incorrecto : Uso del signo + Incorrecto : mas de 6 caracteres Incorrecto : Uso del signo * Correcto : Equivale a UNPOCO

IV. OPERADORES ARITMETICOS. Son los operadores que permiten realizar operaciones usuales en aritmtica o sea : sumar, restar, multiplicar, dividir y elevar a una potencia ( +, -, x, : y exp. ). En Fortran, esos operadores se expresan mediante el uso de otros smbolos

Aritmtica + x : exp.

Fortran + * / **

No se pueden usar dos operadores seguidos, pero se puede encerrar cualquier expresin o parte de ella entre parntesis. En Fortran, las parntesis tienen el mismo significado que en lgebra y determinan la secuencia de las operaciones que se van a realizar. Se ejecutan siempre desde adentro hacia afuera y de la izquierda a la derecha. Ejemplos : Algebra xy a+b a + (b - c) r2 yn (b2 4ac ) W 1/3 Fortran X*Y A+B A + (B-C) PI * R **2 Y ** N (B**2 - 4*A*C)**0.5 W **( 1./3.)

V. INSTRUCCIONES ARITMETICAS. Una instruccin aritmtica consiste en una variable separada de una expresin aritmtica por el signo " = ". En Fortran, el signo " = " tiene un significado diferente que en matemtica : no significa igualdad de las expresiones sino que el resultado de las operaciones efectuadas del lado derecho, debe ser asignado a la variable ubicada a la izquierda del signo " = ". Por ejemplo : AREA = 3.14159 *R**2 significa que el resultado de la operacin de multiplicar R al cuadrado por PI, debe ser asignado a la variable llamada AREA. En una operacin aritmtica, no puede haber constantes ni operadores del lado izquierdo del signo =. Ah debe estar el nom bre de una variable. Del mismo

modo, no puede haber variables desconocidas del lado derecho de la instruccin. Los espacios en blanco se ignoran. Ejemplos : X = AB** 2. - C equivale a X=AB**2.-C X = A + B est permitido si A y B son constantes o variables conocidas. A + B = X no es correcto. Si se trata de operaciones mixtas, es decir que se usan variables y/o constantes enteras y reales, entonces, el tipo del resultado lo fija el tipo de la variable ubicada del lado izquierdo. Por ejemplo : X=I+J el resultado ser real. si I=2 y J= 3, X = 5. N = X**2. el resultado ser la parte entera. si X = 1.5, entonces N = 2 X = M+5*(X - Y) el resultado ser real. si X=2.4, Y=3.2 y M=6, X =2.0 VI. FUNCIONES INTRINSECAS DEL FORTRAN. Existe una serie de funciones disponibles directamente en Fortran, las cuales forman parte integral del lenguaje y pueden usarse en cualquier instruccin. Funcin ABS(X) IABS(N) FLOAT(N) IFIX(X) EXP(X) SIN(X) COS(X) TAN(X) SQRT(X) ALOG(X) ALOG10(X) Definicin Valor absoluto Valor absoluto Convertir en real Convertir en entero Exponencial de x Seno de x Coseno de x Tangente de x Raz cuadrada de x Logaritmo natural de x Logaritmo decimal de x Tipo Real Entero Real Entero Real Real Real Real Real Real Real Argumento Real Entero Entero Real Real Real Real Real Real Real Real

CAPITULO V EL LENGUAJE FORTRAN 77 INSTRUCCIONES DE ENTRADA Y SALIDA

I. LAS INSTRUCCIONES EN FORTRAN 77. En Fortran, existen dos clases principales de instrucciones, las instrucciones ejecutables y las no-ejecutables. Las instrucciones ejecutables especifican la accin que el programa debe realizar mientras que las no-ejecutables contienen informacin sobre esas mismas instrucciones o sobre las variables del programa : caractersticas de los operandos, tipo de datos, especificacin de formato, etc ... Ambos tipos de instrucciones, ejecutables o no-ejecutables, pertenecen a una de las seis categoras siguientes : 1. Instrucciones de definicin de programa. 2. Instrucciones de especificacin. 3. Instrucciones de asignacin de valores. 4. Instrucciones de control. 5. Instrucciones de entrada y salida. 6. Instrucciones de parada y suspensin. En las tablas siguientes, se presentan las principales instrucciones del Fortran 77 segn la categoria a la cul pertenecen y se especifica si es ejecutable ( Ej. ) o no-ejecutable ( No ej. ).

TABLA 1

TABLA 2

TABLA 3

TABLA 4

TABLA 5

TABLA 6

Cada una de esas instrucciones ejecutables o no-ejecutables, tiene un sitio definido en un programa, es decir que , por ejemplo, una instruccin COMMON no puede estar ubicada en cualquier parte. En la Tabla 7, se presenta el orden que deben seguir las instrucciones dentro del programa. La primera instruccin debe ser PROGRAM o SUBROUTINE o FUNCTION o BLOCK DATA. La ltima debe ser la instruccin END. Entre esas dos, la instruccin FORMAT puede estar en cualquier

sitio. La instruccin PARAMETER debe estar antes de cualquier instruccin ejecutable, as como las instrucciones de especificacin, tales como IMPLICIT, REAL, DIMENSION, INTEGER, etc. ... TABLA 7

Esas reglas deben respetarse rigurosamente para que el programa pueda ser ejecutado correctamente. En caso de no hacerlo, se producirn errores durante la compilacin del programa.

II. INSTRUCCIONES DE ENTRADA/SALIDA SIN FORMATO. Los datos pueden ser introducidos o sacados del computador de diferentes maneras, segn se use o no los formatos de especificacin de entrada y salida. En este prrafo, se presentan las instrucciones de E/S sin form ato. 1. La instruccin READ. La forma general de la instruccin READ sin formato o con formato libre es la siguiente : READ *, V1,V2,V3, ... ,VN

donde

V1 nombre de la variable correspondiente al primer dato de entrada. V2 nombre de la variable correspondiente al segundo dato de entrada. ... ... VN nombre de la variable correspondiente al ltimo dato de entrada.

Los diferentes valores deben separarse por comas o espacios en blanco. Los enteros no deben tener punto decimal. Esos datos se leern por la unidad normal de entrada ( terminal ). Ejemplo : READ *, A ,B, C Se leer por pantalla tres valores a los cuales se le asignar los nom bres A, B, C. Esos tres valores debern darse separados por com as o blancos. 2. La instruccin PRINT. La instruccin PRINT transfiere datos de la memoria a la unidad normal de salida ( impresora ). En formato libre, se da como : PRINT *, list donde list es una constante, una variable, un arreglo y/o una expresin alfanumrica encerrada entre apstrofos. Ejemplo : PRINT *,' El caudal es ',Q Se imprimir el valor de la variable Q almacenado en memoria precedido de la expresin entre apstrofos. Si Q es igual a 25.5, la impresin ser : El caudal es 25.50 III. LAS INSTRUCCIONES DE ENTRADA/SALIDA CON FORMATO. 1. La instruccin READ con formato. Su forma general simplificada es : READ ( unidad, fmt, END = num1, ERR = num2) list

donde : unidad es la unidad lgica de entrada. Puede ser un archivo. fmt es el nmero de la instruccin FORMAT que especifica el formato de los datos de entrada. Si es un asterisco, el formato es libre. num1 es el nmero de una instruccin a la cul ir el programa en el caso de encontrar un "fin de archivo " (EOF),en los datos. num2 es el nmero de una instruccin a la cul ir el programa en el caso de encontrar un error en la lectura de datos. list es una lista de los nombres de las variables de entrada. Ejemplos : READ(1,*) AA leer la variable por pantalla en form ato libre.

READ(13,110) XA,XB leer las variables XA y XB por la unidad 13 (archivo) con el formato indicado en la instruccin 110. READ(23,290,END=90) X1 leer la variable X1 por la unidad 23 y con el formato 290. En caso de encontrar una marca de fin de archivo, EOF, ir a la instruccin 90. READ(8,30,ERR=99) AB leer la variable AB por la unidad 8 con el formato 30. En caso de encontrar un error en los datos de entrada, ir a la instruccin 99. 2. La instruccin WRITE con formato. Su forma general simplificada es : WRITE (unidad, fmt) list donde unidad, fmt y list tienen la misma significacin que para la instruccin READ. Adicionalmente, fmt puede contener la propia instruccin FORMAT entre apstrofos y parntesis y list puede representar una expresin aritmtica. Ejemplos : WRITE(1,*) CAUDAL dar por pantalla la variable CAUDAL con formato libre. WRITE(6,120) A, CC imprimir las variables A y CC de acuerdo al form ato 120. WRITE(23,'("caudal",F8.2)') Q transferir al archivo 23 el valor de la variable Q de acuerdo al formato indicado entre apstrofos.

3. La instruccin FORMAT. Una instruccin FORMAT es una instruccin no-ejecutable, en forma de una lista de especificaciones de formato y de edicin, la cul se seguir al leer o al imprimir datos o variables. 3.1 Especificaciones de formato. Las principales especificaciones de formato son las siguientes : a. Especificacin I. La especificacin I se usa para nmeros enteros; se da como : Iw escritura. b. Especificacin F. Se usa para nmeros reales y se da como : Fw.d donde w es el tamao del campo y d el nmero de posiciones a la derecha del punto decimal. c. Especificacin E. Se usa para nmeros reales en formato exponencial y se da como : Ew.d donde w y d son los mismos anteriores. d. Especificacin A. Se usa para caracteres alfanumricos y se da como : Aw donde w es el tamao del campo. donde w es el nmero de posiciones del campo de lectura o

e. Ejemplos. Entrada de datos : Especificacin I4 Dato 1 Valor ledo 1

I2 I2 F6.4 F6.4 E8.3 E9.4 A4 A10

-1 123 123456 123.45 7.1 E 5 45 E35 DATO CAUDAL DIARIO

-1 12 12.3456 123.45 7.1x105 0.0045x1035 DATO CAUDAL DIA

Comentario : - los blancos a la derecha se ignoran. - el punto decimal ledo prevalece sobre la especificacin w. Salida de datos : Especificacin I4 I2 I5 F5.2 F3.1 F4.1 E10.3 E10.8 A10 A4 Valor en memoria +452.25 623 -52 +10.657 -254.2 23 -12.3454 0.00456532 CAUDAL CAUDAL Salida 452 ** -52 10.65 *** 23.0 -.123E+02 .456532E-02 CAUDAL ****

3.2 Especificaciones de edicin. Las diferentes especificaciones, que sean de formato o de edicin, vienen separadas por coma cuando se trata de un mismo registro, o por barra cuando son registros consecutivos. 1. Edicin de alfanumricos. Se hace con comillas o apstrofos, o con la especificacin H. En este ltimo caso, se da como nH donde n es el nmero de caracteres que siguen a H. Ejemplos : ' CAUDAL' se imprimir como CAUDAL "DATO" se imprimir como DATO

6HLLUVIA se imprimir como LLUVIA 2. Posicionamiento horizontal. Se usa la especificacin X, la cul se da como nmero de saltos de posiciones hacia la derecha . Por ejemplo : 10X salta 10 posiciones hacia la derecha. 3. Repeticiones. Cuando se quiere utilizar la misma especificacin para diferentes variables, no es necesario repetirla, sino que se coloca el nm ero de veces que se quiere delante de la especificacin : 3F5.2 equivale a F5.2,F5.2,F5.2 5I4 equivale a I4,I4,I4,I4,I4 Tambin se puede repetir un grupo de especificaciones, encerrndolo entre parntesis : 3(5X,F10.3) equivale a 5X,F10.3,5X,F10.3,5X,F10.3 Cuando las especificaciones se usan para mas de un registro, se utiliza la barra, /, para separarlos. Por ejemplo : FORMAT(5X,F8.3,5X,3I2/5X,5F8.3) En este caso se leer el primer registro o lnea con el formato 5X,F8.3,5X,3I2 y el segundo con 5X,5F8.3. Ejemplos : ABS( -14.) = 14.0 IABS(-12) = 12 FLOAT(15) = 15.0 IFIX(56.78) = 56 EXP(2.5) = e2,5 SEN(3.14159) = sen(180) COS(3.14159/2.) = cos(90) TAN(3.14159/4.) = tan(45) SQRT(49.0) = 49 ALOG(20.) = Ln (20.) ALOG10( 2,8) = log(2.8) nX donde n es le

CAPITULO VI LAS INSTRUCCIONES DE CONTROL En este captulo, se describirn las instrucciones de control y transferencia mas comnmente utilizadas en Fortran 77. Esas son : - La instruccin DO, la cul puede ser : - DO etiquetado - Bloque DO - DO WHILE - La instruccin IF, la cul puede ser : - IF aritmtico - IF lgico - Bloque IF - La instruccin GOTO, la cul puede ser : - GOTO incondicional - GOTO calculado - GOTO asignado - La instruccin CALL - La instruccin CONTINUE I. LA INSTRUCCION DO I. 1 El DO etiquetado. Se da como : DO [etiqueta], [index]=[inicio],[final],[paso] donde : etiqueta es el nmero de una instruccin ejecutable, la cul ser la ltima ejecutada en el lazo DO. No puede ser : - un GOTO, u otro DO - cualquier instruccin de un IF. - un RETURN, un STOP o un END index es una variable que controla el lazo DO. Puede ser entera o real. La coma antes del index es opcional. inicio es una variable o expresin que representa el valor inicial de la variable index en el lazo DO.

final es una variable o expresin que representa el valor final de la variable index en el lazo DO. paso es una variable o expresin que representa el incremento de la variable index en el lazo DO. No puede ser igual a cero. Por defecto, es igual a 1. Las variables index, inicio, final y paso deben ser del mismo tipo. Si no lo son, entonces las tres ltimas son convertidas al tipo de index. La ltima instruccin del DO puede ser la instruccin CONTINUE pa ra evitar terminar con una instruccin no permitida. Las instrucciones comprendidas entre el DO y la ltima ( la que lleva etiqueta) se ejecutan cada vez que se completa un ciclo del lazo. Ejemplos : DO 10, I=1,20 WRITE (1,*) I CONTINUE DO 20 X=1.0,2.0,0.1 ..... ..... CONTINUE DO 100 J=10,2,-1 ... CONTINUE Se imprimirn los nmeros del 1 al 20

10

Se ejecutarn 11 veces las instrucciones incluidas entre el DO y la n 20

20

Se ejecutarn 9 veces lo incluido entre el DO y la instruccin n 100.

100

Cuando se ejecuta un lazo DO, la siguiente secuencia de operaciones se realiza : 1. Se calculan los valores de index, inicio, final y paso. 2. El nmero de veces que se ejecutar el lazo se calcula com o : Parte entera de ((final -inicio + paso)/paso) 3. Si el nmero resultante es inferior o igual a cero, no se ejecuta el lazo y se pasa a la instruccin siguiente. 4. Se ejecuta el lazo DO. 5. Si no se ha ejecutado el lazo completo, se incrementa el valor de index y se regresa al punto 4. Dentro del DO, modificaciones de index, inicio, final o paso no afectan el nmero de veces que se efecta el lazo, ya que este valor se calcula al entrar al lazo DO.

I. 2 El Bloque DO. El Bloque DO es idntico al DO etiquetado, con la nica diferencia de no usar etiqueta al final del lazo, sino un END DO. Es una extensin del Fortran 77 de la ANSI. Por ejemplo : DO J=1,20 .... .... END DO DO I=0,10,2 .... .... END DO El bloque de instrucciones se ejecutar 20 veces y luego saltar a la instruccin que sigue END DO

El bloque de instrucciones se ejecutar 6 veces y saltar a la instruccin que sigue al END DO.

I. 3 El DO WHILE. La instruccin DO WHILE constituye tambin una extensin al Fortran 77, pero es un elemento muy importante de la programacin estructurada. Se da como : DO WHILE ( expresin lgica ) .... .... END DO y se ejecuta de la siguiente manera : La expresin lgica se evala al in icio del lazo DO. Si es cierta, se ejecutan las instrucciones comprendidas entre el DO y el END DO, y se vuelve a chequear la expresin lgica. Si no es cier ta, el lazo DO se termina y se ejecuta la instruccin que sigue al END DO. Ejemplos : DO WHILE (I.NE.99) READ(1,*) I .... .... END DO DO WHILE (J . LT . 10) Se leern valores de I y se ejecutarn las instrucciones siguientes hasta que se lea un valor de I igual a 99.

... DO WHILE (I . GE . J) ... ... END DO ... END DO En el segundo ejemplo, se tiene dos lazos DO anidados. El primero se ejecuta mientras J sigue menor que 10, y el segundo mientras I es superior o igual a J. Cuando se tienen varios lazos DO anidados, cada uno debe terminar por un END DO diferente. Ntese la diferencia entre el DO WHILE y el Bloque DO o el DO etiquetado. En el primer caso, la condicin se chequea al inicio del lazo, mientras que en los otros, se chequea al final del mismo. II. LA INSTRUCCION IF. II. El IF aritmtico. La instruccin IF aritmtica transfiere el control a una de tres instrucciones alternativas. Su forma es : IF ( expre ) etiq1,etiq2,etiq3 donde : expre es una expresin aritmtica cuyo signo se chequea. etiq1, etiq2, etiq3 son etiquetas de instrucciones ejecutables a las cuales el programa segn el valor de expre (negativo, nulo o positivo). Ejemplos : IF ( A+B ) 10,20,30 Si A+B es negativo, se va a la instruccin 10 Si A+B es igual a cero, se va a la instruccin 20 Si A+B es positivo, se va a la instruccin 30

va

IF (X) 10,10,25 Si X es inferior o igual a cero, se va a la instruccin 10 Si X es mayor que cero, se va a la instruccin 25 El uso del IF aritmtico no se recomienda en programacin estructurada, ya que no respeta siempre la condicin de una sola entrada, una sola salida. Se recomienda el uso del IF lgico o del Bloque IF. II. 2 El IF lgico. La instruccin IF lgica evala una expresin lgica y ejecuta una instruccin si el resultado de la evaluacin es cierto. Se da como : IF ( expre ) inst donde expre es la expresin lgica a evaluar inst es la instruccin a ejecutar si la expresin es cierta. No puede ser : - un DO - un END - un IF Ejemplos : IF ( X. GT . Y ) X=Y IF ( A . EQ . B )GOTO 99 Si X es mayor que Y, se hace X igual a Y Si A igual B, se va a la instruccin 99

El IF lgico acta como una seleccin de dos vas posibles : si la condicin es verdadera, se ejecuta la instruccin contenida en la instruccin IF, sino esa no se ejecuta y se pasa a la instruccin siguiente. Los operadores aritmticos permitidos dentro de una expresin lgica, son .EQ. .NE. .LT. .LE. .GT. .GE. IGUAL A DIFERENTE DE INFERIOR A INFERIOR O IGUAL A SUPERIOR A SUPERIOR O IGUAL A

Tambin se pueden combinar varias expresiones lgicas dentro de un mismo IF en base a los operadores lgicos siguientes : . AND. . OR . . NOT . Ejemplos : IF ( exp1.OR.exp2) IF( exp1.AND. .NOT. exp2 ) IF( exp1. AND. exp2 ) cierto si exp1 o exp2 ciertos cierto si exp1 cierto y exp2 falso cierto si exp1 y exp2 ciertos Ambas expresiones deben ser ciertas. Una u otra expresin debe ser cierta. La proposicin inversa de la segunda deben ser cierta.

II. 3 El Bloque IF. El bloque IF es una extensin del IF lgico que permite ejecutar un o dos bloques de instrucciones dependiendo del valor cierto o falso de la expresin lgica. Tambin es muy importante en programacin estructurada. Se da como : IF( expre1 ) THEN .... ELSE [ IF ( expre2 ) THEN] .... [ELSE] .... ENDIF donde expre1 y expre2 son expresiones lgicas. Un bloque IF puede contener cualquier nmero de sub-bloques ELSE IF, pero solamente un sub-bloque ELSE. Un bloque IF puede contener cualquier nmero de bloques IF anidados, pero cada uno debe terminar por un ENDIF. Ejemplos : IF ( X.EQ.Y ) THEN X=X+1 ENDIF Si X es igual a Y , se hace X igual a X+1

IF( A.LT.B.OR.A.EQ.C) THEN

Si A es menor que B o si A es igual

.... ELSE IF(A.EQ.B) THEN .... ELSE .... ENDIF IF(NI.EQ.O) THEN NI=NJ J=J+1 IF(J.LT.K) THEN K=K-1 ELSE IF(J.EQ.K) THEN K=K+1 ENDIF ELSE NI=I K=NI ENDIF

a C, se ejecuta el bloque siguiente. De lo contrario, si A es igual a B,se ejecuta el segundo bloque. Finalmente, si A no es igual a B, se ejecuta el tercer bloque.

En este ejemplo, se muestra el uso de varios IF anidados.

III. LA INSTRUCCION GOTO. III. 1 El GOTO incondicional. La instruccin GOTO transfiere el control a una instruccin ejecutable etiquetada, dentro del mismo programa. Se da como : GOTO etiq o GO TO etiq donde etiq es la etiqueta de la instruccin a la cul debe ir el program a. Esta instruccin puede estar ubicada antes o despus de la instruccin GOTO, pero debe estar en el mismo programa. Ejemplo : GOTO 20 El control se transfiere a la instruccin que lleva la etiqueta 20.

III.2 El GOTO calculado. La instruccin GOTO calculado transfiere el control a una de varias instrucciones dependiendo del resultado de la evaluacin de una expresin. Se da como : GOTO (etiq1,etiq2,etiq3,. . . ,etiqn), expre donde etiq la etiqueta de una instruccin ejecutable. expre es una expresin entera o real que se evala. El uso de una expresin real es una extensin del Fortran 77. El resultado de la expresin se convierte a entero, to mando la parte entera del mismo. Este valor indica la posicin de la etiqueta en la lista del GOTO. Ejemplos : GOTO(20,30,40,50) A Si A=1, va a la instruccin 20 Si A=2, va a la instruccin 30 Si A=3, va a la instruccin 40 Si A=4, va a la instruccin 50.

B=1.5 X=2. GOTO(10,11,12,13,14,15) B+X En este caso, la parte entera de B+X es igual a 3 y el control pasa a la instruccin 12. III.3. El GOTO asignado. El GOTO asignado transfiere el control a una instruccin cuya etiqueta ha sido asignada a una variable en la instruccin GOTO por una instruccin ASSIGN.

Se da como : GOTO ivar,( etiq1,etiq2,etiq3,. . .) donde ivar es una variable entera. etiq es la etiqueta de una instruccin ejecutable (opcional) A la variable ivar, se le debe asignar antes un valor por una instruccin ASSIGN. Cuando se ejecuta el GOTO, el control se transfiere a la instruccin que lleva la etiqueta correspondiente. Ejemplos : ASSIGN 10 TO SPOT GOTO SPOT ASSIGN 100 TO TIME GOTO TIME(90,100,150) El control pasa a la instruccin 10.

El control pasa a la instruccin

10

IV. LA INSTRUCCION CALL. La instruccin CALL transfiere el control a un subprograma. Se da como : CALL nombre (arg1,arg2,arg3,. . . .) donde nombre arg Ejemplos : CALL LECIM Transfiere el control a la subrutina LECIM. CALL VALOR(X1,X2,X3) Transfiere el control a la subrutina VALOR as como los valores X1,X2,X3. es el nombre de un subprograma. son los argumentos que se pasan al subprograma.

CAPITULO VII

LAS VARIABLES CON SUBINDICES Y LAS INSTRUCCIONES DE ESPECIFICACION

I. LAS VARIABLES CON SUBINDICES. Cuando se quiere usar en un mismo programa un conjunto de variables similares, en vez de usar nombres diferentes para cada una, se pueden usar variables con subindices. Por ejemplo, si P es la precipitacin de un da, las precipitaciones del mes de Enero pueden llamarse P1,P2,P3. . . . hasta P31 o en forma mas sencilla agruparlas en una sola variable que ser Pi, i variando de 1 hasta 31. En este caso, la variable P representa un vector que almacena los valores de precipitacin daria. En Fortran, se puede usar tambin esas variables con subindices en la forma siguiente : P(I), I= 1,31 y la precipitacin del primer da ser P(1), la del segundo P(2), . . .lo cul facilita la estructuracin del programa. En el ejemplo anterior, P(I) es un vector o un arreglo unidimensional que contiene los valores de precipitacin del m es de Enero. Si se quiere usar los valores de precipitacin de todo el ao, se podra us ar un vector de 365 valores, o mejor un arreglo de dos dimensiones en el cul el primer ndice representara el nmero del mes y el segundo el da dentro del mes, P(I,J), con I=1,12 y J=1,31. En este ltimo ejemplo, se tiene que : P(2,24) es la precipitacin del da 24 de febrero. P(10,5) es la precipitacin del da 5 de octubre. Un arreglo de dos dimensiones como el anterior puede tambin considerarse como una matriz en la cul el primer ndice es el nmero de la fila y el segundo el nmero de la columna. Los arreglos pueden tener mas de dos dimensiones. En Fortran 77, se permiten arreglos de hasta 7 dimensiones. Esos arreglos deben ser declarados como tal en una instruccin de especificacin ( INTEGER, REAL, DIMENSION, COMMON, ...) en la cul se especifica el nmero de dimensiones y los limites de cada dimensin.

Eso viene en la forma siguiente : nombre(d1,d2,d3, . . . ) donde nombre es el nombre del arreglo, el cul debe seguir las mismas reglas de los nombres de las variables. di es la especificacin de dimensin del arreglo. Debe haber una especificacin para cada dim ensin.

Esa especificacin se da como : n o donde : n es el limite superior m es el limite inferior Si se especifica solamente el limite superior, el limite inferior se toma como 1. El valor de ambos limites puede ser positivo, negativo o nulo. Sin embargo, el limite superior debe ser mayor ( o igual) que el limite inferior. Los limites pueden ser expresiones aritmticas, en las cuales las constantes o variables deben ser enteras. Esos limites indican el nmero mximo de elementos en cada dimensin del arreglo. El nmero de elementos en cada dimensin puede ser calculado como n-m+1. Ejemplos : A(0:10) TABLA(5,12) XX(2,2,2,3) Arreglo unidimensional (vector) de 11 elementos. Arreglo bidimensional de 5 filas y 12 columnas. Arreglo de cuatro dimensiones y 24 elementos. Arreglo tridimensional de 693 elementos. n:m

CAB(-5:3,2:12,-1,5)

Los subindices designan un elemento especfico del arreglo. Para referenciar un elemento de un arreglo, se debe indicar el nombre del mismo, as como los subindices del elemento en cada dimensin, separados por coma. Cada subindice debe entrar dentro de los limites definidos para cada dimensin. El error cometido al usar un subindice fuera de los limites definidos no se detecta, ni a la compilacin, ni

durante la ejecucin, pero los resultados son im previsibles. Los subindices pueden ser expresiones aritmticas; despus de evaluar la expresin, se usa su parte entera. Ejemplos : ARR(I+4,J-1) TAB((3*X+1)/4) Si X=3.6, la expresin vale 2.95, lo cul da un subindice igual a 2.

Los arreglos unidimensionales se almacenan como lista de valores. Los arreglos de mayores dimensiones se almacenan haciendo variar primero el primer ndice, luego el segundo, y asi sucesivam ente hasta el ltimo ndice, el cul varia mas lentamente. Ejemplos : A(10) se almacena como :

A(1),A(2),A(3),A(4),. . . ,A(9),A(10) B(3,5) se almacena como :

B(1,1),B(2,1),B(3,1),B(1,2),B(2,2),B(3,2),B(1,3),B(2,3),. . . B(1,5),B(2,5),B(3,5) La lectura y escritura de las variables con subindices se hace en una forma un poco diferente. Se puede usar un DO implcito para entrada y salida de variables contenidas en arreglos. Se da como : READ(unidad, fmt) (lista, index = inicio, final, paso) o WRITE(unidad, fmt) (lista, index = inicio, final, paso) donde unidad, fmt, index, inicio, final, paso tienen la misma significacin definida anteriormente. Por ejemplo : READ(1,100) (A(I),I=1,20) En este caso, las variables se leern en el orden A(19),A(20) A(1),A(2),. . .,

WRITE(6,120) ((B(I,J),I=1,2),J=1,2) El orden de impresin ser : B(1,1),B(2,1),B(1,2),B(2,2) Es decir que el lazo interno se ejecutar cada vez que se incrementa el lazo externo. Esos DO implcitos se permiten para arreglos de cualquier nmero de dimensiones.

II. LAS INSTRUCCIONES DE ESPECIFICACION. Las instrucciones de especificaciones mas usadas son las siguientes : INTEGER, REAL, CHARACTER DIMENSION, IMPLICIT, COMMON PARAMETER EQUIVALENCE II. 1. Las especificaciones de tipo. Las instrucciones de especificacin de tipo definen el tipo de las variables. Las especificaciones INTEGER y REAL se usan cuando el nombre de la variable va en contra de la declaracin implcita por el primer carcter del nombre. Ejemplos : INTEGER RUN, TIME REAL IMAX, LARGO, N En esos dos casos, los nombres de las variables contradicen el tipo de las mismas, por lo que se hace necesario esa especificacin de tipo. Normalmente, las variables se declaran sin especificar el nmero de palabras que usan en memoria. Sin embargo, en algunos casos, se puede cambiar ese tamao. Por eso, se usa : INTEGER*2 o INTEGER *4 REAL*4 o REAL*8 Respectivamente, se usarn enteros de dos o cuatro palabras, y reales de cuatro u ocho palabras.

La especificacin CHARACTER se usa para declarar que una variable es alfanumrica. En el caso de las variables alfanumricas, es necesario indicar la longitud de la variable. La instruccin se da como : CHARACTER*long donde long especifica la longitud de la variable. Por defecto, se toma igual a 1. Ejemplo : NOMBRE*20 DIREC*40 La variable NOMBRE tiene 20 caracteres. La variable DIREC tiene 40 caracteres.

II. 2. La instruccin DIMENSION. La instruccin DIMENSION se usa para especificar las dim ensiones de las variables con subindices. Se da como : DIMENSION nom1(limit1), nom2(limit2), . . . donde nom limit son los nombres de los arreglos. son las declaraciones de dimensionamiento de esos arreglos, tales como se definieron anteriormente.

Ejemplo : DIMENSION A(10,20),TAB(2,5,10) Las declaraciones de dimensionamiento de los arreglos deben darse una sola vez, sea en la instruccin DIMENSION o en una declaracin de tipo, pero nunca en ambas. Por ejemplo : INTEGER A(100) declara el arreglo A como entero y teniendo 100 elementos. y es equivalente a

INTEGER A DIMENSION A(100)

INTEGER A(100) DIMENSION A(100)

est prohibido ya que se dimensiona dos veces el arreglo A.

II.3 La instruccin COMMON. La instruccin COMMON especifica un espacio comn de almacenamiento en memoria, el cul puede ser usado por diferentes programas y subprogramas. Se da como : COMMON /nom1/ list1,/nom2/ list2, . . . donde : nom es el nombre de un COMMON etiquetado. Ese nombre es opcional es la lista de las variables.

list Ejemplos :

el

COMMON A,B,C Las variables A,B,C se almacenan en un COMMON sin etiqueta. COMMON /TSF/ X,X1,X2 Las variables X,X1,X2 se almacenan en el COMMON etiquetado TSF. COMMON /A/A1,A2,/X/ X1,X2 Las variables A1 y A2 se almacenan en el COMMON A y , X1 y X2 en COMMON X.

En una instruccin COMMON, no deben aparecer los nom bres de variables que estn en la lista de argumentos de una subrutina, los nombres de subrutinas o de funciones, ni variables que estn en una instruccin DATA. Puede haber varias instrucciones COMMON en un solo programa. Lo importante en una instruccin COMMON no es el nombre de la variable, sino su ubicacin dentro del COMMON.

Por ejemplo, si en un programa aparece lo siguiente : COMMON I(4),J(6) y en un subprograma : COMMON J(4),I(6) los valores del arreglo I del programa principal sern los valores del arreglo J del subprograma. Igualmente, si en el programa principal aparece : COMMON I(4),J(6), SAM Y en la subrutina : COMMON GEO,M(10) la equivalencia ser : Programa principal I(1) I(2) I(3) ... J(6) SAM Subprograma GEO M(1) M(2) ... M(9) M(10)

II. 4. La instruccin IMPLICIT. La instruccin IMPLICIT especifica el tipo de las constantes o variables, asociado con el primer carcter de su nombre. Se da como : IMPLICIT tipo,(rango1,rango2, . . ),tipo(rango1, . . .) donde : tipo rango es una especificacin de tipo (INTEGER,REAL,...) es una sola letra o un rango de letras asociadas con el tipo especificado.

Ejemplo :

IMPLICIT REAL(I,J,K),INTEGER(A-C) Esa instruccin significa que las vari ables cuyo nombre empieza por I, J o K sern reales, y que las variables c uyo nombre empieza por una letra comprendida entre A y C sern enteras. II. 5. La instruccin PARAMETER. La instruccin PARAMETER se usa para definir constantes con nombres. Despus de la instruccin PARAMETER, el uso del nombre es equivalente al uso de la constante. Se da como : PARAMETER ( nom1=exp1,nom2=exp2,. . . ) donde : nom exp es el nombre de la constante. es una expresin cuyo valor se atribuye a la constante.

Ejemplos : PARAMETER (MIN=10,MAX=50) DIMENSION A(MIN,MAX) CHARACTER*6 ARCHI PARAMETER (ARCHI=?RIO) OPEN(10,FILE=ARCHI,STATUS='OLD') PARAMETER (N=4) CHARACTER*N TOTO PARAMETER (INF=0,ISUP=20) DIMENSION XER(INF:ISUP) DO I=INF,ISUP ... ENDDO

PARAMETER (PI=3.14159) ... SURF=PI*R**2 El uso de la instruccin PARAMETER define la constante nicamente en el programa en el cul se usa. Una consta nte puede ser definida una sola vez en una instruccin PARAMETER. Si su tipo no es implcito, debe ser declarado previamente en una instruccin de especificacin. II. 6. La instruccin EQUIVALENCE. La instruccin EQUIVALENCE asocia variables para que comparten el mismo espacio en memoria. Se da como : EQUIVALENCE (list1),(list2), . . . donde : list es una lista de dos o mas variables o arreglos que se asocian en el EQUIVALENCE.

Ejemplos : EQUIVALENCE (A,B),(C(2),DE,E) Las variables A y B comparten el mismo espacio en memoria, y las variables C(2), D y E comparten otro espacio comn.

Cuando se usan arreglos la equivalencia se hace elemento por elemento. Por ejemplo : DIMENSION A(3),B(5) EQUIVALENCE (A(2),B(4)) indica que los elementos A(2) y B(4) comparten el mismo espacio en memoria. Eso implica tambin que los otros elementos tienen equivalencia uno a uno : A(1) A(2) A(3) B(3) B(4) B(5)

B(1) B(2)

Por la tanto, la equivalencia de arreglos se hace en base a la forma en la cul se almacenan los elementos del arreglo.

Los tipos de los elementos en la instruccin EQUIVALENCE pueden ser diferentes. Esa instruccin no implica conversin de tipo de variables. Cada variable conserva su tipo. III. LA INSTRUCCION CONTINUE. La instruccin CONTINUE crea un punto de referencia dentro de un programa. Se da como : CONTINUE Ejemplo : DO 20 I=1,10 X=X+I IF(X.LT.25) GOTO 20 GOTO 10 CONTINUE En este caso, la ltima instruccin del DO es un GOTO, lo cul no est permitido. Entonces, se usa la instruccin CONTINUE.

10

La instruccin CONTINUE debe tener siempre una etiqueta para servir de punto de referencia en un programa. Particularmente, se usaba en los lazos DO como ltima instruccin. Ahora, con el uso de bloque DO y del END DO, su uso ya no se justifica tanto.

Você também pode gostar